User | Revision | Line number | New contents of line |
kwstasfane1 |
0:7eacf3f1a1be
|
1
|
#include "mbed.h"
|
kwstasfane1 |
0:7eacf3f1a1be
|
2
|
#include "C12832.h"
|
kwstasfane1 |
0:7eacf3f1a1be
|
3
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
4
|
// LCD display
|
kwstasfane1 |
0:7eacf3f1a1be
|
5
|
C12832 lcd(p5, p7, p6, p8, p11);
|
kwstasfane1 |
0:7eacf3f1a1be
|
6
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
7
|
//Joystick
|
kwstasfane1 |
0:7eacf3f1a1be
|
8
|
//DigitalIn joyU(p13); // joystick 'DOWN' resets the stopwatch
|
kwstasfane1 |
0:7eacf3f1a1be
|
9
|
//DigitalIn joyC(p14); // joystick 'PUSH' starts and stops it
|
kwstasfane1 |
0:7eacf3f1a1be
|
10
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
11
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
12
|
InterruptIn joyD(p12); // joystick 'DOWN' resets the stopwatch
|
kwstasfane1 |
0:7eacf3f1a1be
|
13
|
InterruptIn joyC(p14); // joystick 'PUSH' starts and stops it
|
kwstasfane1 |
0:7eacf3f1a1be
|
14
|
InterruptIn joyU(p13); // joystick 'UP' toggle the display
|
kwstasfane1 |
0:7eacf3f1a1be
|
15
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
16
|
void joyC_isr();
|
kwstasfane1 |
0:7eacf3f1a1be
|
17
|
void joyD_isr();
|
kwstasfane1 |
0:7eacf3f1a1be
|
18
|
void joyU_isr();
|
kwstasfane1 |
0:7eacf3f1a1be
|
19
|
bool joyUflag = 0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
20
|
bool joyCflag = 0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
21
|
bool joyDflag = 0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
22
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
23
|
float saved_lap_times [8] = {0.0};
|
kwstasfane1 |
0:7eacf3f1a1be
|
24
|
int i= 0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
25
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
26
|
int main()
|
kwstasfane1 |
0:7eacf3f1a1be
|
27
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
28
|
float t = 0.0; // the timer a floating point counter
|
kwstasfane1 |
0:7eacf3f1a1be
|
29
|
bool run = 1; // the state of the stopwatch run stopped
|
kwstasfane1 |
0:7eacf3f1a1be
|
30
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
31
|
//At startup just print a few things on the lcd and then enter a loop until the user does something
|
kwstasfane1 |
0:7eacf3f1a1be
|
32
|
lcd.cls(); //clear screen
|
kwstasfane1 |
0:7eacf3f1a1be
|
33
|
lcd.locate(1,20);
|
kwstasfane1 |
0:7eacf3f1a1be
|
34
|
lcd.printf("ready push joystick to start");//ready to go
|
kwstasfane1 |
0:7eacf3f1a1be
|
35
|
lcd.locate(10,10);
|
kwstasfane1 |
0:7eacf3f1a1be
|
36
|
lcd.printf("Stopwatch time %4.1f",t);//display time on the stopwatch
|
kwstasfane1 |
0:7eacf3f1a1be
|
37
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
38
|
joyC.rise(&joyC_isr);
|
kwstasfane1 |
0:7eacf3f1a1be
|
39
|
joyD.rise(&joyD_isr);
|
kwstasfane1 |
0:7eacf3f1a1be
|
40
|
joyU.rise(&joyU_isr);
|
kwstasfane1 |
0:7eacf3f1a1be
|
41
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
42
|
while(1)
|
kwstasfane1 |
0:7eacf3f1a1be
|
43
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
44
|
//reset timer if the joystick is pressed 'DOWN'
|
kwstasfane1 |
0:7eacf3f1a1be
|
45
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
46
|
if (joyDflag)
|
kwstasfane1 |
0:7eacf3f1a1be
|
47
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
48
|
t = 0; // clear the timer
|
kwstasfane1 |
0:7eacf3f1a1be
|
49
|
run = !run; // and stop further operation
|
kwstasfane1 |
0:7eacf3f1a1be
|
50
|
lcd.cls(); //clear screen
|
kwstasfane1 |
0:7eacf3f1a1be
|
51
|
lcd.locate(40,20);
|
kwstasfane1 |
0:7eacf3f1a1be
|
52
|
lcd.printf("reset");//tell the user
|
kwstasfane1 |
0:7eacf3f1a1be
|
53
|
lcd.locate(10,10);
|
kwstasfane1 |
0:7eacf3f1a1be
|
54
|
lcd.printf("Stopwatch time %4.1f",t);//display time on the stopwatch
|
kwstasfane1 |
0:7eacf3f1a1be
|
55
|
for(int j=0; j<=8; j++)
|
kwstasfane1 |
0:7eacf3f1a1be
|
56
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
57
|
saved_lap_times[j] = 0.0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
58
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
59
|
i=0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
60
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
61
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
62
|
/*this is the bit that decides if the stopwatch is running
|
kwstasfane1 |
0:7eacf3f1a1be
|
63
|
i.e. run == 1, if so then increment the timer and print its value
|
kwstasfane1 |
0:7eacf3f1a1be
|
64
|
otherwise just wait*/
|
kwstasfane1 |
0:7eacf3f1a1be
|
65
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
66
|
//if (joyCflag)
|
kwstasfane1 |
0:7eacf3f1a1be
|
67
|
if(run == 1)
|
kwstasfane1 |
0:7eacf3f1a1be
|
68
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
69
|
t =t + 0.1;
|
kwstasfane1 |
0:7eacf3f1a1be
|
70
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
71
|
if(!joyUflag)
|
kwstasfane1 |
0:7eacf3f1a1be
|
72
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
73
|
wait(0.1);
|
kwstasfane1 |
0:7eacf3f1a1be
|
74
|
lcd.cls(); //clear screen
|
kwstasfane1 |
0:7eacf3f1a1be
|
75
|
lcd.locate(10,10);
|
kwstasfane1 |
0:7eacf3f1a1be
|
76
|
lcd.printf("Stopwatch time %4.1f",t);//display time
|
kwstasfane1 |
0:7eacf3f1a1be
|
77
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
78
|
else
|
kwstasfane1 |
0:7eacf3f1a1be
|
79
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
80
|
wait(0.01);
|
kwstasfane1 |
0:7eacf3f1a1be
|
81
|
lcd.cls(); //clear screen
|
kwstasfane1 |
0:7eacf3f1a1be
|
82
|
lcd.locate(1,1);
|
kwstasfane1 |
0:7eacf3f1a1be
|
83
|
lcd.printf("L1:");//display time
|
kwstasfane1 |
0:7eacf3f1a1be
|
84
|
lcd.locate(13,1);
|
kwstasfane1 |
0:7eacf3f1a1be
|
85
|
lcd.printf("%3.1f",saved_lap_times [0]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
86
|
lcd.locate(42,1);
|
kwstasfane1 |
0:7eacf3f1a1be
|
87
|
lcd.printf("L2:");//display
|
kwstasfane1 |
0:7eacf3f1a1be
|
88
|
lcd.locate(54,1);
|
kwstasfane1 |
0:7eacf3f1a1be
|
89
|
lcd.printf("%3.1f",saved_lap_times [1]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
90
|
lcd.locate(82,1);
|
kwstasfane1 |
0:7eacf3f1a1be
|
91
|
lcd.printf("L3:");//display time
|
kwstasfane1 |
0:7eacf3f1a1be
|
92
|
lcd.locate(95,1);
|
kwstasfane1 |
0:7eacf3f1a1be
|
93
|
lcd.printf("%3.1f",saved_lap_times [2]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
94
|
lcd.locate(1,11);
|
kwstasfane1 |
0:7eacf3f1a1be
|
95
|
lcd.printf("L4:");//display time
|
kwstasfane1 |
0:7eacf3f1a1be
|
96
|
lcd.locate(13,11);
|
kwstasfane1 |
0:7eacf3f1a1be
|
97
|
lcd.printf("%3.1f",saved_lap_times [3]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
98
|
lcd.locate(42,11);
|
kwstasfane1 |
0:7eacf3f1a1be
|
99
|
lcd.printf("L5:");//display
|
kwstasfane1 |
0:7eacf3f1a1be
|
100
|
lcd.locate(54,11);
|
kwstasfane1 |
0:7eacf3f1a1be
|
101
|
lcd.printf("%3.1f",saved_lap_times [4]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
102
|
lcd.locate(82,11);
|
kwstasfane1 |
0:7eacf3f1a1be
|
103
|
lcd.printf("L6:");//display time
|
kwstasfane1 |
0:7eacf3f1a1be
|
104
|
lcd.locate(95,11);
|
kwstasfane1 |
0:7eacf3f1a1be
|
105
|
lcd.printf("%3.1f",saved_lap_times [5]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
106
|
lcd.locate(1,22);
|
kwstasfane1 |
0:7eacf3f1a1be
|
107
|
lcd.printf("L7:");//display time
|
kwstasfane1 |
0:7eacf3f1a1be
|
108
|
lcd.locate(13,22);
|
kwstasfane1 |
0:7eacf3f1a1be
|
109
|
lcd.printf("%3.1f",saved_lap_times [6]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
110
|
lcd.locate(42,22);
|
kwstasfane1 |
0:7eacf3f1a1be
|
111
|
lcd.printf("L8:");//display
|
kwstasfane1 |
0:7eacf3f1a1be
|
112
|
lcd.locate(54,22);
|
kwstasfane1 |
0:7eacf3f1a1be
|
113
|
lcd.printf("%3.1f",saved_lap_times [7]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
114
|
lcd.locate(82,22);
|
kwstasfane1 |
0:7eacf3f1a1be
|
115
|
lcd.printf("L9:");//display time
|
kwstasfane1 |
0:7eacf3f1a1be
|
116
|
lcd.locate(95,22);
|
kwstasfane1 |
0:7eacf3f1a1be
|
117
|
lcd.printf("%3.1f",saved_lap_times [8]);
|
kwstasfane1 |
0:7eacf3f1a1be
|
118
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
119
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
120
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
121
|
//use it to save the current time with the push of centre button
|
kwstasfane1 |
0:7eacf3f1a1be
|
122
|
if(joyCflag)
|
kwstasfane1 |
0:7eacf3f1a1be
|
123
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
124
|
joyCflag=0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
125
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
126
|
if(i<=8)
|
kwstasfane1 |
0:7eacf3f1a1be
|
127
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
128
|
saved_lap_times[i]=t;
|
kwstasfane1 |
0:7eacf3f1a1be
|
129
|
i++;
|
kwstasfane1 |
0:7eacf3f1a1be
|
130
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
131
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
132
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
133
|
//toggle the display
|
kwstasfane1 |
0:7eacf3f1a1be
|
134
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
135
|
/* this bit toggles the run control between the run / stopped states
|
kwstasfane1 |
0:7eacf3f1a1be
|
136
|
when the joystick is pushed 'IN' */
|
kwstasfane1 |
0:7eacf3f1a1be
|
137
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
138
|
//if (run == 1)
|
kwstasfane1 |
0:7eacf3f1a1be
|
139
|
// {
|
kwstasfane1 |
0:7eacf3f1a1be
|
140
|
//if (!joyCflag)
|
kwstasfane1 |
0:7eacf3f1a1be
|
141
|
//{ // was running so stop it
|
kwstasfane1 |
0:7eacf3f1a1be
|
142
|
//run = 0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
143
|
//lcd.locate(40,20);
|
kwstasfane1 |
0:7eacf3f1a1be
|
144
|
//lcd.printf("stopped");//timer has stopped
|
kwstasfane1 |
0:7eacf3f1a1be
|
145
|
//}
|
kwstasfane1 |
0:7eacf3f1a1be
|
146
|
//}
|
kwstasfane1 |
0:7eacf3f1a1be
|
147
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
148
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
149
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
150
|
void joyC_isr()
|
kwstasfane1 |
0:7eacf3f1a1be
|
151
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
152
|
joyCflag = !joyCflag;
|
kwstasfane1 |
0:7eacf3f1a1be
|
153
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
154
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
155
|
void joyD_isr()
|
kwstasfane1 |
0:7eacf3f1a1be
|
156
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
157
|
joyDflag = !joyDflag;
|
kwstasfane1 |
0:7eacf3f1a1be
|
158
|
joyCflag = 0;
|
kwstasfane1 |
0:7eacf3f1a1be
|
159
|
}
|
kwstasfane1 |
0:7eacf3f1a1be
|
160
|
|
kwstasfane1 |
0:7eacf3f1a1be
|
161
|
void joyU_isr()
|
kwstasfane1 |
0:7eacf3f1a1be
|
162
|
{
|
kwstasfane1 |
0:7eacf3f1a1be
|
163
|
joyUflag = !joyUflag;
|
kwstasfane1 |
0:7eacf3f1a1be
|
164
|
}
|