![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Projekt-Alarmclock
Dependencies: LCD RTC8563 Wecker mbed
main.cpp@1:b71a6c225c2b, 2015-05-29 (annotated)
- Committer:
- wolpra98
- Date:
- Fri May 29 12:01:00 2015 +0000
- Revision:
- 1:b71a6c225c2b
- Parent:
- 0:bb9c3f242f5a
- Child:
- 2:d3708e92660f
Completed Version of the Alarm Clock with LCD Output
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wolpra98 | 0:bb9c3f242f5a | 1 | #include "mbed.h" |
wolpra98 | 0:bb9c3f242f5a | 2 | #include "LCD.h" |
wolpra98 | 0:bb9c3f242f5a | 3 | #include "const.h" |
wolpra98 | 0:bb9c3f242f5a | 4 | #include "RTC8563.h" |
wolpra98 | 0:bb9c3f242f5a | 5 | #include "Wecker.h" |
wolpra98 | 0:bb9c3f242f5a | 6 | |
wolpra98 | 1:b71a6c225c2b | 7 | Wecker wecker; |
wolpra98 | 0:bb9c3f242f5a | 8 | |
wolpra98 | 1:b71a6c225c2b | 9 | void btnStdr(); |
wolpra98 | 1:b71a6c225c2b | 10 | void btnMinr(); |
wolpra98 | 1:b71a6c225c2b | 11 | void btnSlpr(); |
wolpra98 | 1:b71a6c225c2b | 12 | void btnSlpf(); |
wolpra98 | 1:b71a6c225c2b | 13 | void tickControll(); |
wolpra98 | 1:b71a6c225c2b | 14 | |
wolpra98 | 1:b71a6c225c2b | 15 | typedef enum {Normal, setAlarm, AlarmOn, Alarm, Sleep} state; |
wolpra98 | 1:b71a6c225c2b | 16 | state Mode=Normal; |
wolpra98 | 1:b71a6c225c2b | 17 | char sMode[2]; |
wolpra98 | 1:b71a6c225c2b | 18 | |
wolpra98 | 1:b71a6c225c2b | 19 | Ticker tick1; |
wolpra98 | 1:b71a6c225c2b | 20 | Timer tim1,tim2,tim3; |
wolpra98 | 1:b71a6c225c2b | 21 | |
wolpra98 | 1:b71a6c225c2b | 22 | InterruptIn swStd(P0_15); |
wolpra98 | 1:b71a6c225c2b | 23 | InterruptIn swMin(P0_23); |
wolpra98 | 1:b71a6c225c2b | 24 | InterruptIn swSlp(P0_10); |
wolpra98 | 1:b71a6c225c2b | 25 | DigitalIn alarm(P1_28); |
wolpra98 | 1:b71a6c225c2b | 26 | DigitalOut myled(LED1); |
wolpra98 | 1:b71a6c225c2b | 27 | |
wolpra98 | 0:bb9c3f242f5a | 28 | int main() |
wolpra98 | 0:bb9c3f242f5a | 29 | { |
wolpra98 | 0:bb9c3f242f5a | 30 | wecker.rtc_init(); |
wolpra98 | 1:b71a6c225c2b | 31 | swStd.rise(&btnStdr); |
wolpra98 | 1:b71a6c225c2b | 32 | swMin.rise(&btnMinr); |
wolpra98 | 1:b71a6c225c2b | 33 | swSlp.rise(&btnSlpr); |
wolpra98 | 1:b71a6c225c2b | 34 | swSlp.fall(&btnSlpf); |
wolpra98 | 1:b71a6c225c2b | 35 | tick1.attach(&tickControll,0.01); |
wolpra98 | 0:bb9c3f242f5a | 36 | while(1) { |
wolpra98 | 0:bb9c3f242f5a | 37 | wecker.printTime(); |
wolpra98 | 1:b71a6c225c2b | 38 | wecker.printState(sMode); |
wolpra98 | 0:bb9c3f242f5a | 39 | wecker.printAlarmTime(); |
wolpra98 | 0:bb9c3f242f5a | 40 | wait(0.1); |
wolpra98 | 0:bb9c3f242f5a | 41 | } |
wolpra98 | 1:b71a6c225c2b | 42 | } |
wolpra98 | 1:b71a6c225c2b | 43 | |
wolpra98 | 1:b71a6c225c2b | 44 | |
wolpra98 | 1:b71a6c225c2b | 45 | |
wolpra98 | 1:b71a6c225c2b | 46 | void btnSlpr() |
wolpra98 | 1:b71a6c225c2b | 47 | { |
wolpra98 | 1:b71a6c225c2b | 48 | wait_ms(20); |
wolpra98 | 1:b71a6c225c2b | 49 | switch (Mode) { |
wolpra98 | 1:b71a6c225c2b | 50 | case Normal: |
wolpra98 | 1:b71a6c225c2b | 51 | if(tim1.read()==0) |
wolpra98 | 1:b71a6c225c2b | 52 | tim1.start(); |
wolpra98 | 1:b71a6c225c2b | 53 | if (swStd==1 || swMin==1) |
wolpra98 | 1:b71a6c225c2b | 54 | Mode = setAlarm; |
wolpra98 | 1:b71a6c225c2b | 55 | break; |
wolpra98 | 1:b71a6c225c2b | 56 | case AlarmOn: |
wolpra98 | 1:b71a6c225c2b | 57 | if (tim1.read()==0) |
wolpra98 | 1:b71a6c225c2b | 58 | tim1.start(); |
wolpra98 | 1:b71a6c225c2b | 59 | break; |
wolpra98 | 1:b71a6c225c2b | 60 | case Sleep: |
wolpra98 | 1:b71a6c225c2b | 61 | if (tim1.read()==0) |
wolpra98 | 1:b71a6c225c2b | 62 | tim1.start(); |
wolpra98 | 1:b71a6c225c2b | 63 | break; |
wolpra98 | 1:b71a6c225c2b | 64 | case Alarm: |
wolpra98 | 1:b71a6c225c2b | 65 | Mode=Sleep; |
wolpra98 | 1:b71a6c225c2b | 66 | break; |
wolpra98 | 1:b71a6c225c2b | 67 | } |
wolpra98 | 1:b71a6c225c2b | 68 | } |
wolpra98 | 1:b71a6c225c2b | 69 | |
wolpra98 | 1:b71a6c225c2b | 70 | void btnStdr() |
wolpra98 | 1:b71a6c225c2b | 71 | { |
wolpra98 | 1:b71a6c225c2b | 72 | wait_ms(20); |
wolpra98 | 1:b71a6c225c2b | 73 | switch(Mode) { |
wolpra98 | 1:b71a6c225c2b | 74 | case Normal: |
wolpra98 | 1:b71a6c225c2b | 75 | int nextStd = wecker.unbcd(wecker.rtc_read(HOURS)); |
wolpra98 | 1:b71a6c225c2b | 76 | if (swSlp != 1) { |
wolpra98 | 1:b71a6c225c2b | 77 | if (nextStd>=23) |
wolpra98 | 1:b71a6c225c2b | 78 | nextStd=0; |
wolpra98 | 1:b71a6c225c2b | 79 | else |
wolpra98 | 1:b71a6c225c2b | 80 | nextStd++; |
wolpra98 | 1:b71a6c225c2b | 81 | wecker.rtc_write(HOURS, wecker.bcd(nextStd)); |
wolpra98 | 1:b71a6c225c2b | 82 | } |
wolpra98 | 1:b71a6c225c2b | 83 | break; |
wolpra98 | 1:b71a6c225c2b | 84 | case setAlarm: |
wolpra98 | 1:b71a6c225c2b | 85 | tim2.stop(); |
wolpra98 | 1:b71a6c225c2b | 86 | tim2.reset(); |
wolpra98 | 1:b71a6c225c2b | 87 | nextStd = wecker.unbcd(wecker.rtc_read(HOUR_ALARM)); |
wolpra98 | 1:b71a6c225c2b | 88 | if (nextStd>=23) |
wolpra98 | 1:b71a6c225c2b | 89 | nextStd=0; |
wolpra98 | 1:b71a6c225c2b | 90 | else |
wolpra98 | 1:b71a6c225c2b | 91 | nextStd++; |
wolpra98 | 1:b71a6c225c2b | 92 | wecker.rtc_write(HOUR_ALARM, wecker.bcd(nextStd)); |
wolpra98 | 1:b71a6c225c2b | 93 | break; |
wolpra98 | 1:b71a6c225c2b | 94 | case Alarm: |
wolpra98 | 1:b71a6c225c2b | 95 | Mode=Sleep; |
wolpra98 | 1:b71a6c225c2b | 96 | tim3.stop(); |
wolpra98 | 1:b71a6c225c2b | 97 | tim3.reset(); |
wolpra98 | 1:b71a6c225c2b | 98 | break; |
wolpra98 | 1:b71a6c225c2b | 99 | } |
wolpra98 | 1:b71a6c225c2b | 100 | } |
wolpra98 | 1:b71a6c225c2b | 101 | |
wolpra98 | 1:b71a6c225c2b | 102 | void btnMinr() |
wolpra98 | 1:b71a6c225c2b | 103 | { |
wolpra98 | 1:b71a6c225c2b | 104 | wait_ms(20); |
wolpra98 | 1:b71a6c225c2b | 105 | switch(Mode) { |
wolpra98 | 1:b71a6c225c2b | 106 | case Normal: |
wolpra98 | 1:b71a6c225c2b | 107 | int nextMin = wecker.unbcd(wecker.rtc_read(MINUTES)); |
wolpra98 | 1:b71a6c225c2b | 108 | if (swSlp != 1) { |
wolpra98 | 1:b71a6c225c2b | 109 | if (nextMin>=59) |
wolpra98 | 1:b71a6c225c2b | 110 | nextMin=0; |
wolpra98 | 1:b71a6c225c2b | 111 | else |
wolpra98 | 1:b71a6c225c2b | 112 | nextMin++; |
wolpra98 | 1:b71a6c225c2b | 113 | wecker.rtc_write(MINUTES, wecker.bcd(nextMin)); |
wolpra98 | 1:b71a6c225c2b | 114 | } |
wolpra98 | 1:b71a6c225c2b | 115 | break; |
wolpra98 | 1:b71a6c225c2b | 116 | case setAlarm: |
wolpra98 | 1:b71a6c225c2b | 117 | tim2.stop(); |
wolpra98 | 1:b71a6c225c2b | 118 | tim2.reset(); |
wolpra98 | 1:b71a6c225c2b | 119 | nextMin = wecker.unbcd(wecker.rtc_read(MINUTE_ALARM)); |
wolpra98 | 1:b71a6c225c2b | 120 | if (nextMin>=59) |
wolpra98 | 1:b71a6c225c2b | 121 | nextMin=0; |
wolpra98 | 1:b71a6c225c2b | 122 | else |
wolpra98 | 1:b71a6c225c2b | 123 | nextMin++; |
wolpra98 | 1:b71a6c225c2b | 124 | wecker.rtc_write(MINUTE_ALARM, wecker.bcd(nextMin)); |
wolpra98 | 1:b71a6c225c2b | 125 | break; |
wolpra98 | 1:b71a6c225c2b | 126 | case Alarm: |
wolpra98 | 1:b71a6c225c2b | 127 | tim3.stop(); |
wolpra98 | 1:b71a6c225c2b | 128 | tim3.reset(); |
wolpra98 | 1:b71a6c225c2b | 129 | Mode=Sleep; |
wolpra98 | 1:b71a6c225c2b | 130 | break; |
wolpra98 | 1:b71a6c225c2b | 131 | } |
wolpra98 | 1:b71a6c225c2b | 132 | } |
wolpra98 | 1:b71a6c225c2b | 133 | |
wolpra98 | 1:b71a6c225c2b | 134 | void tickControll() |
wolpra98 | 1:b71a6c225c2b | 135 | { |
wolpra98 | 1:b71a6c225c2b | 136 | switch(Mode) { |
wolpra98 | 1:b71a6c225c2b | 137 | case Normal: |
wolpra98 | 1:b71a6c225c2b | 138 | strcpy(sMode,"No"); |
wolpra98 | 1:b71a6c225c2b | 139 | break; |
wolpra98 | 1:b71a6c225c2b | 140 | case setAlarm: |
wolpra98 | 1:b71a6c225c2b | 141 | strcpy(sMode,"sA"); |
wolpra98 | 1:b71a6c225c2b | 142 | if(swStd==0 && swMin==0) |
wolpra98 | 1:b71a6c225c2b | 143 | tim2.start(); |
wolpra98 | 1:b71a6c225c2b | 144 | if(tim2.read()>=5.0) { |
wolpra98 | 1:b71a6c225c2b | 145 | Mode=Normal; |
wolpra98 | 1:b71a6c225c2b | 146 | tim2.stop(); |
wolpra98 | 1:b71a6c225c2b | 147 | tim2.reset(); |
wolpra98 | 1:b71a6c225c2b | 148 | } |
wolpra98 | 1:b71a6c225c2b | 149 | break; |
wolpra98 | 1:b71a6c225c2b | 150 | case AlarmOn: |
wolpra98 | 1:b71a6c225c2b | 151 | strcpy(sMode,"AO"); |
wolpra98 | 1:b71a6c225c2b | 152 | if(alarm==0) |
wolpra98 | 1:b71a6c225c2b | 153 | Mode=Alarm; |
wolpra98 | 1:b71a6c225c2b | 154 | break; |
wolpra98 | 1:b71a6c225c2b | 155 | case Sleep: |
wolpra98 | 1:b71a6c225c2b | 156 | if(tim3.read()==0) |
wolpra98 | 1:b71a6c225c2b | 157 | tim3.start(); |
wolpra98 | 1:b71a6c225c2b | 158 | if(tim3.read()>=300) { |
wolpra98 | 1:b71a6c225c2b | 159 | Mode=Alarm; |
wolpra98 | 1:b71a6c225c2b | 160 | tim3.stop(); |
wolpra98 | 1:b71a6c225c2b | 161 | tim3.reset(); |
wolpra98 | 1:b71a6c225c2b | 162 | } |
wolpra98 | 1:b71a6c225c2b | 163 | strcpy(sMode,"Sl"); |
wolpra98 | 1:b71a6c225c2b | 164 | myled=0; |
wolpra98 | 1:b71a6c225c2b | 165 | break; |
wolpra98 | 1:b71a6c225c2b | 166 | case Alarm: |
wolpra98 | 1:b71a6c225c2b | 167 | if(tim3.read()==0) |
wolpra98 | 1:b71a6c225c2b | 168 | tim3.start(); |
wolpra98 | 1:b71a6c225c2b | 169 | if(tim3.read()>=300) { |
wolpra98 | 1:b71a6c225c2b | 170 | Mode=Sleep; |
wolpra98 | 1:b71a6c225c2b | 171 | tim3.stop(); |
wolpra98 | 1:b71a6c225c2b | 172 | tim3.reset(); |
wolpra98 | 1:b71a6c225c2b | 173 | } |
wolpra98 | 1:b71a6c225c2b | 174 | strcpy(sMode,"Al"); |
wolpra98 | 1:b71a6c225c2b | 175 | myled=1; |
wolpra98 | 1:b71a6c225c2b | 176 | break; |
wolpra98 | 1:b71a6c225c2b | 177 | } |
wolpra98 | 1:b71a6c225c2b | 178 | } |
wolpra98 | 1:b71a6c225c2b | 179 | |
wolpra98 | 1:b71a6c225c2b | 180 | void btnSlpf() |
wolpra98 | 1:b71a6c225c2b | 181 | { |
wolpra98 | 1:b71a6c225c2b | 182 | switch(Mode) { |
wolpra98 | 1:b71a6c225c2b | 183 | case Normal: |
wolpra98 | 1:b71a6c225c2b | 184 | if (swStd==1 || swMin==1) |
wolpra98 | 1:b71a6c225c2b | 185 | Mode = setAlarm; |
wolpra98 | 1:b71a6c225c2b | 186 | if(tim1.read()!=0) { |
wolpra98 | 1:b71a6c225c2b | 187 | tim1.stop(); |
wolpra98 | 1:b71a6c225c2b | 188 | if (tim1.read()>=3.0) |
wolpra98 | 1:b71a6c225c2b | 189 | Mode = AlarmOn; |
wolpra98 | 1:b71a6c225c2b | 190 | wecker.rtc_write(CONTROL2, 0x02); |
wolpra98 | 1:b71a6c225c2b | 191 | tim1.reset(); |
wolpra98 | 1:b71a6c225c2b | 192 | break; |
wolpra98 | 1:b71a6c225c2b | 193 | case AlarmOn: |
wolpra98 | 1:b71a6c225c2b | 194 | tim1.stop(); |
wolpra98 | 1:b71a6c225c2b | 195 | if (tim1.read()>=3.0) |
wolpra98 | 1:b71a6c225c2b | 196 | Mode = Normal; |
wolpra98 | 1:b71a6c225c2b | 197 | wecker.rtc_write(CONTROL2, 0); |
wolpra98 | 1:b71a6c225c2b | 198 | tim1.reset(); |
wolpra98 | 1:b71a6c225c2b | 199 | break; |
wolpra98 | 1:b71a6c225c2b | 200 | case Sleep: |
wolpra98 | 1:b71a6c225c2b | 201 | tim1.stop(); |
wolpra98 | 1:b71a6c225c2b | 202 | if (tim1.read()>=3.0) { |
wolpra98 | 1:b71a6c225c2b | 203 | Mode = Normal; |
wolpra98 | 1:b71a6c225c2b | 204 | tim3.stop(); |
wolpra98 | 1:b71a6c225c2b | 205 | tim3.reset(); |
wolpra98 | 1:b71a6c225c2b | 206 | } |
wolpra98 | 1:b71a6c225c2b | 207 | wecker.rtc_write(CONTROL2, 0); |
wolpra98 | 1:b71a6c225c2b | 208 | tim1.reset(); |
wolpra98 | 1:b71a6c225c2b | 209 | break; |
wolpra98 | 1:b71a6c225c2b | 210 | } |
wolpra98 | 1:b71a6c225c2b | 211 | } |
wolpra98 | 0:bb9c3f242f5a | 212 | } |