PropWare
3.0.0.229
C++ objects and CMake build system for Parallax Propeller
Simple-Libraries
Learn
Examples
Badge
09 Time
03 Set Time.c
1
/*
2
Set Time.c
3
Example of using the buttons to set the time.
4
*/
5
6
#include "
simpletools.h
"
// Include simpletools library
7
#include "
badgetools.h
"
// Include badgetools library
8
#include "
datetime.h
"
// Include datetime library
9
10
datetime
dt = {2015, 10, 23, 9, 12, 7};
// Set up the date/time
11
12
char
dates[9];
// Stores date string
13
char
times[9];
// Stores time string
14
15
// Forward declare functions for setting date/time with the badge's buttons.
16
void
setYear(
void
);
17
void
setMonth(
void
);
18
void
setDay(
void
);
19
void
setHour(
void
);
20
void
setMinute(
void
);
21
void
setSecond(
void
);
22
void
menu(
void
);
23
void
submenu(
void
);
24
25
void
main
()
// Main function
26
{
27
badge_setup
();
// Start badge systems
28
dt_run
(dt);
// Start system timer with dt
29
30
oledprint
(
" OSH to SET "
);
// Message how to set w/ OSH
31
pause
(2000);
32
33
while
(1)
// Main loop
34
{
35
dt =
dt_get
();
// Get system time
36
dt_toDateStr
(dt, dates);
// Convert to strings
37
dt_toTimeStr
(dt, times);
38
cursor
(0, 0);
// Position cursor
39
oledprint
(
"%s%s"
, dates, times);
// Display date/time
40
pause
(100);
// Wait .1 s before repeating
41
42
if
(
button
(6) == 1)
// If OSH pressed...
43
{
44
menu();
// Display menu
45
pause
(1000);
// 1 s to let go of button
46
int
states = 0;
// States variable
47
while
(states == 0)
// Wait for button press
48
{
49
states =
buttons
();
// Keep checking
50
}
51
states = 0;
// Clear the states
52
while
(states != 0b1000000)
53
{
54
states =
buttons
();
// Check buttons
55
switch
(states)
// Handle each case
56
{
57
case
0b0100000:
// P17 set year
58
print
(
"year\n"
);
59
setYear();
60
break
;
61
case
0b0010000:
// P16 set month
62
setMonth();
63
break
;
64
case
0b0001000:
// P15 set day
65
setDay();
66
break
;
67
case
0b0000100:
// P25 set hour
68
setHour();
69
break
;
70
case
0b0000010:
// P26 set minute
71
setMinute();
72
break
;
73
case
0b0000001:
// P27 set second
74
setSecond();
75
break
;
76
case
0b1000000:
// OSH save and exit
77
dt_set
(dt);
78
break
;
79
}
80
}
81
}
82
}
83
}
84
85
86
void
menu(
void
)
// Display buttons menu
87
{
88
clear
();
89
text_size
(
SMALL
);
90
cursor
(0, 0);
91
oledprint
(
"P17-Yr"
);
92
cursor
(0, 3);
93
oledprint
(
"P16-Mon"
);
94
cursor
(0, 6);
95
oledprint
(
"P15-Day"
);
96
cursor
(10, 6);
97
oledprint
(
"P25-Hr"
);
98
cursor
(9, 3);
99
oledprint
(
"P26-Min"
);
100
cursor
(9, 0);
101
oledprint
(
"P17-Sec"
);
102
cursor
(4, 7);
103
oledprint
(
"OSH-Done"
);
104
text_size
(
LARGE
);
105
}
106
107
void
submenu(
void
)
// Display time set menu
108
{
109
text_size
(
SMALL
);
110
cursor
(9, 0);
111
oledprint
(
"P27-UP"
);
112
cursor
(12, 3);
113
oledprint
(
"P26"
);
114
cursor
(11, 4);
115
oledprint
(
"NEXT"
);
116
cursor
(9, 7);
117
oledprint
(
"P25-DN"
);
118
text_size
(
LARGE
);
119
}
120
121
void
setYear(
void
)
// Year setting function
122
{
123
clear
();
// Clear display
124
oledprint
(
"YEAR"
);
// Display year
125
submenu();
// Display button submenu
126
127
int
y = dt.y;
// Temp copy of dt.y to y
128
129
cursor
(0, 1);
// Cursor -> row 0, col 1
130
oledprint
(
"%d"
, y);
// Display current year
131
pause
(1000);
// 1 s for letting go of
132
// previous button
133
while
(1)
// Setting loop
134
{
135
int
states =
buttons
();
// Check buttons
136
if
(states == 0b0000001)
// If P27
137
{
138
y++;
// Add 1 to year
139
}
140
else
if
(states == 0b0000100)
// If P25
141
{
142
y--;
// Subtract 1 from year
143
}
144
else
if
(states == 0b0000010)
// If P26
145
{
146
dt.y = y;
// Copy y back to dt.y
147
break
;
// Break from while loop
148
}
149
text_size
(
LARGE
);
// Back to large text
150
cursor
(0, 1);
// Cursor at bottom-left
151
oledprint
(
"%d"
, y);
// Update year display
152
pause
(100);
// Wait .1 s
153
}
154
menu();
// Back to menu
155
return
;
// Return from function
156
}
157
158
void
setMonth(
void
)
// Similar to setYear
159
{
// See setYear for comments
160
clear
();
161
text_size
(
LARGE
);
162
oledprint
(
"MON"
);
163
submenu();
164
165
int
mo = dt.mo;
166
167
cursor
(0, 1);
168
oledprint
(
"%02d"
, mo);
169
pause
(1000);
170
while
(1)
171
{
172
int
states =
buttons
();
173
if
(states == 0b0000001)
174
{
175
mo++;
176
if
(mo > 12) mo = 1;
177
}
178
else
if
(states == 0b0000100)
179
{
180
mo--;
181
if
(mo < 1) mo = 12;
182
}
183
else
if
(states == 0b0000010)
184
{
185
dt.mo = mo;
186
break
;
187
}
188
text_size
(
LARGE
);
189
cursor
(0, 1);
190
oledprint
(
"%02d"
, mo);
191
pause
(100);
192
}
193
menu();
194
return
;
195
}
196
197
void
setDay(
void
)
// Similar to setYear
198
{
// See setYear for comments
199
clear
();
200
text_size
(
LARGE
);
201
cursor
(0, 0);
202
oledprint
(
"DAY"
);
203
submenu();
204
205
int
d = dt.d;
206
207
cursor
(0, 1);
208
oledprint
(
"%02d"
, d);
209
while
(1)
210
{
211
int
states =
buttons
();
212
if
(states == 0b0000001)
213
{
214
d++;
215
if
(d > 31) d = 1;
216
}
217
else
if
(states == 0b0000100)
218
{
219
d--;
220
if
(d < 1) d = 31;
221
}
222
else
if
(states == 0b0000010)
223
{
224
dt.d = d;
225
break
;
226
}
227
text_size
(
LARGE
);
228
cursor
(0, 1);
229
oledprint
(
"%02d"
, d);
230
pause
(100);
231
}
232
menu();
233
return
;
234
}
235
236
void
setHour(
void
)
// Similar to setYear
237
{
// See setYear for comments
238
clear
();
239
text_size
(
LARGE
);
240
oledprint
(
"HOUR"
);
241
submenu();
242
243
int
h = dt.h;
244
245
cursor
(0, 1);
246
oledprint
(
"%02d"
, h);
247
pause
(1000);
248
while
(1)
249
{
250
int
states =
buttons
();
251
if
(states == 0b0000001)
252
{
253
h++;
254
if
(h > 23) h = 0;
255
}
256
else
if
(states == 0b0000100)
257
{
258
h--;
259
if
(h < 0) h = 23;
260
}
261
else
if
(states == 0b0000010)
262
{
263
dt.h = h;
264
break
;
265
}
266
text_size
(
LARGE
);
267
cursor
(0, 1);
268
oledprint
(
"%02d"
, h);
269
pause
(100);
270
}
271
menu();
272
return
;
273
}
274
275
void
setMinute(
void
)
// Similar to setYear
276
{
// See setYear for comments
277
clear
();
278
text_size
(
LARGE
);
279
oledprint
(
"MIN"
);
280
submenu();
281
282
int
m = dt.m;
283
284
cursor
(0, 1);
285
oledprint
(
"%02d"
, m);
286
pause
(1000);
287
while
(1)
288
{
289
int
states =
buttons
();
290
if
(states == 0b0000001)
291
{
292
m++;
293
if
(m > 59) m = 0;
294
}
295
else
if
(states == 0b0000100)
296
{
297
m--;
298
if
(m < 0) m = 59;
299
}
300
else
if
(states == 0b0000010)
301
{
302
dt.m = m;
303
break
;
304
}
305
text_size
(
LARGE
);
306
cursor
(0, 1);
307
oledprint
(
"%02d"
, m);
308
pause
(100);
309
}
310
menu();
311
return
;
312
}
313
314
void
setSecond(
void
)
// Similar to setYear
315
{
// See setYear for comments
316
clear
();
317
text_size
(
LARGE
);
318
oledprint
(
"SEC"
);
319
submenu();
320
321
int
s = dt.s;
322
323
cursor
(0, 1);
324
oledprint
(
"%02d"
, s);
325
pause
(1000);
326
while
(1)
327
{
328
int
states =
buttons
();
329
if
(states == 0b0000001)
330
{
331
s++;
332
if
(s > 59) s = 0;
333
}
334
else
if
(states == 0b0000100)
335
{
336
s--;
337
if
(s < 0) s = 59;
338
}
339
else
if
(states == 0b0000010)
340
{
341
dt.s = s;
342
break
;
343
}
344
text_size
(
LARGE
);
345
cursor
(0, 1);
346
oledprint
(
"%02d"
, s);
347
pause
(100);
348
}
349
menu();
350
return
;
351
}
LARGE
#define LARGE
For setting oLED character size to 32x16 pixels. Example: text_size(LARGE).
Definition:
badgetools.h:192
dt_toTimeStr
void dt_toTimeStr(datetime dt, char *s)
Populates a string (minimum 9 characters) with the hh:mm:ss representation of a datetime type's time.
Definition:
dt_toTimeStr.c:11
clear
int clear(void)
Clear the display.
Definition:
oled_clear.c:7
pause
void pause(int time)
Delay cog from moving on to the next statement for a certain length of time.
Definition:
libws2812.c:125
buttons
int buttons(void)
Gets the states of all seven touch buttons, and returns them in a value with 1s and 0s that correspon...
Definition:
jm_touchpads.c:90
cursor
void cursor(int col, int row)
Position the cursor to a certain column and row for printing text on the oLED display....
Definition:
oled_cursor.c:7
dt_run
void dt_run(datetime dt)
datetime Type definition of datetime_st structure.
Definition:
datetime.c:42
simpletools.h
This library provides convenient functions for a variety of microcontroller I/O, timing,...
print
int print(const char *format,...) __attribute__((format(printf
Print format "..." args to the default simple terminal device. The output is limited to 256 bytes.
main
int main(void)
Definition:
GraphicsTest.c:20
oledprint
int oledprint(const char *fmt,...)
Use to display strings on the oLED display in a manner similar to displaying combinations of strings ...
Definition:
peb_text.c:4
badge_setup
int badge_setup(void)
Set up all available badge drivers. Call this function at the start of any given program to allow acc...
Definition:
badgealpha.c:29
dt_toDateStr
void dt_toDateStr(datetime dt, char *s)
Populates a string (minimum 9 characters) with the mm/dd/yy representation of a datetime type's date.
Definition:
dt_toDateStr.c:11
datetime.h
This library provides convenient functions for a variety of timekeeping operations....
datetime_st
datetime_st Structure containing y, mo, h, m, and s elements.
Definition:
datetime.h:56
badgetools.h
This library provides convenient functions for a variety of Parallax eBadge operations.
dt_set
void dt_set(datetime dt)
Set the system date and time. This can be used to change the system's current date/time....
Definition:
datetime.c:37
dt_get
datetime dt_get()
Get the current system time. To find the current system time (as a datetime type),...
Definition:
datetime.c:30
text_size
void text_size(int size)
Set the text size to either 32x16 pixel (LARGE) or 7x5 (SMALL) characters. Examples: text_size(LARGE)...
Definition:
oled_text_size.c:7
SMALL
#define SMALL
For setting oLED character size to 7x5 pixels. Example: text_size(SMALL).
Definition:
badgetools.h:200
button
int button(int pad)
Gets the state of a touch button (1) pressed, (0) not pressed. Numbering {6, 5, 4,...
Definition:
jm_touchpads.c:70
Generated on Fri May 20 2022 16:48:04 for PropWare by
1.8.17