Enhanted timer

Committer:
kwstasfane1
Date:
Tue Nov 24 15:25:42 2020 +0000
Revision:
0:7eacf3f1a1be
Solution for workshop 3(interrupt). Enhanced timer is implemented that shows up to 9 lap times that reset with the push of reset button. Also, the stopwatch is reset/started again by pressing the reset button. Lap times are not scrolled;

Who changed what in which revision?

UserRevisionLine numberNew 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 }