Components and supplies
Arduino UNO
Rotary Encoder with Push-Button
4 digital 7 segment display TM1637
Tactile Switch, Top Actuated
Jumper wires (generic)
Buzzer
Breadboard (generic)
Tools and machines
Hot glue gun (generic)
Apps and platforms
Arduino IDE
Project description
Code
Chess alarm clocks Code
c_cpp
1#include <TM1637Display.h> 2 3//encoder 4#define outputA 2 5#define outputB 3 6#define enSw 4 7 8// 4-digital display pins (Digital Pins) 9#define CLKA 5 10#define DIOA 6 11#define CLKB 7 12#define DIOB 8 13TM1637Display displayA(CLKA, DIOA); 14TM1637Display displayB(CLKB, DIOB); 15 16 17//button, led, buzzer 18#define btA 9 19#define btB 10 20#define buzz 11 21 22// 23uint8_t segOff[]={false,false}; 24// 25 int timerSet = 0; 26 int aState; 27 int aLastState; 28 int modeState=0; 29 int modeStateLast=0; 30 31unsigned long minSetA = 5; 32unsigned long secSetA = 0; 33unsigned long minSetB = 5; 34unsigned long secSetB = 0; 35unsigned long timeO = 0; 36unsigned long timeA = 0; 37unsigned long timeB = 0; 38int enSwStatus=1; 39int enSwStatusLast=1; 40int btAStatus=1; 41int btAStatusLast=1; 42int btBStatus=1; 43int btBStatusLast=1; 44 45void setup() { 46 Serial.begin(9600); 47 48 displayA.setBrightness(4); 49 displayA.clear(); 50 displayB.setBrightness(4); 51 displayB.clear(); 52 delay(1000); 53 54 pinMode(btA,INPUT_PULLUP); 55 pinMode(btB,INPUT_PULLUP); 56 pinMode(buzz,OUTPUT); 57 58 pinMode (outputA,INPUT); 59 pinMode (outputB,INPUT); 60 pinMode(enSw,INPUT_PULLUP); 61 aLastState = digitalRead(outputA); 62 digitalWrite(buzz,LOW); 63 64} 65 66void loop() { 67 switch(modeState){ 68 69 case 0: 70 digitalWrite(buzz,LOW); 71 displayA.showNumberDecEx(minSetA*100 + secSetA, 0b01000000, true, 4, 0); 72 displayB.showNumberDecEx(minSetB*100 + secSetB, 0b01000000, true, 4, 0); 73 enSwStatus=digitalRead(enSw); 74 btAStatus=digitalRead(btA); 75 btBStatus=digitalRead(btB); 76 if(enSwStatus==0&&enSwStatusLast==1){ 77 modeState=1; 78 } 79 if(btAStatus==0&&btAStatusLast==1){ 80 modeState=12; 81 timeO= millis(); 82 timeA=0; 83 timeB=0; 84 } 85 if(btBStatus==0&&btBStatusLast==1){ 86 modeState=11; 87 timeO= millis(); 88 timeA=0; 89 timeB=0; 90 } 91 btAStatusLast=btAStatus; 92 btBStatusLast=btBStatus; 93 enSwStatusLast=enSwStatus; 94 break; 95 96 case 1: 97 enSwStatus=digitalRead(enSw); 98 minSetA=setNum(minSetA); 99 displayBlink("A",0); 100 if(enSwStatus==0&&enSwStatusLast==1){ 101 modeState=2; 102 } 103 enSwStatusLast=enSwStatus; 104 break; 105 case 2: 106 enSwStatus=digitalRead(enSw); 107 secSetA=setNum(secSetA); 108 displayBlink("A",2); 109 if(enSwStatus==0&&enSwStatusLast==1){ 110 modeState=3; 111 } 112 enSwStatusLast=enSwStatus; 113 break; 114 case 3: 115 enSwStatus=digitalRead(enSw); 116 minSetB=setNum(minSetB); 117 displayBlink("B",0); 118 if(enSwStatus==0&&enSwStatusLast==1){ 119 modeState=4; 120 } 121 enSwStatusLast=enSwStatus; 122 break; 123 case 4: 124 enSwStatus=digitalRead(enSw); 125 secSetB=setNum(secSetB); 126 displayBlink("B",2); 127 if(enSwStatus==0&&enSwStatusLast==1){ 128 modeState=0; 129 } 130 enSwStatusLast=enSwStatus; 131 break; 132 133 case 11: 134 timeA = millis()-timeO-timeB; 135 if(timeOut()==1){ 136 modeState=13; 137 } 138 displayA.showNumberDecEx(timeDisplay(timeA,"A"), 0b01000000, true, 4, 0); 139 displayB.showNumberDecEx(timeDisplay(timeB,"B"), 0b01000000, true, 4, 0); 140 btAStatus=digitalRead(btA); 141 if(btAStatus==0&&btAStatusLast==1){ 142 modeState=12; 143 } 144 btAStatusLast=btAStatus; 145 enSwStatus=digitalRead(enSw); 146 if(enSwStatus==0&&enSwStatusLast==1){ 147 modeState=0; 148 } 149 enSwStatusLast=enSwStatus; 150 break; 151 152 case 12: 153 timeB = millis()-timeO-timeA; 154 if(timeOut()==1){ 155 modeState=13; 156 } 157 displayA.showNumberDecEx(timeDisplay(timeA,"A"), 0b01000000, true, 4, 0); 158 displayB.showNumberDecEx(timeDisplay(timeB,"B"), 0b01000000, true, 4, 0); 159 btBStatus=digitalRead(btB); 160 if(btBStatus==0&&btBStatusLast==1){ 161 modeState=11; 162 } 163 btBStatusLast=btBStatus; 164 enSwStatus=digitalRead(enSw); 165 if(enSwStatus==0&&enSwStatusLast==1){ 166 modeState=0; 167 } 168 enSwStatusLast=enSwStatus; 169 break; 170 case 13: 171 analogWrite(buzz,255); 172 delay(100); 173 analogWrite(buzz,0); 174 delay(100); 175 enSwStatus=digitalRead(enSw); 176 if(enSwStatus==0&&enSwStatusLast==1){ 177 modeState=0; 178 } 179 enSwStatusLast=enSwStatus; 180 break; 181 182 default: 183 184 break; 185 } 186} 187 188int setNum(int num) { 189 aState = digitalRead(outputA); 190 if (aState != aLastState){ 191 if (digitalRead(outputB) != aState) { 192 num ++; 193 } else { 194 if(num>0){ 195 num --; 196 } 197 } 198 } 199 aLastState = aState; 200 return num; 201 } 202 void displayBlink(String player, int pos){ 203 if(player=="A"){ 204 if ((millis()*5/1000)%2==0){ 205 displayA.setSegments(segOff, 2, pos); 206 } else displayA.showNumberDecEx(minSetA*100 + secSetA, 0b01000000, true, 4, 0); 207 } else if (player=="B"){ 208 if ((millis()*5/1000)%2==0){ 209 displayB.setSegments(segOff, 2, pos); 210 } else displayB.showNumberDecEx(minSetB*100 + secSetB, 0b01000000, true, 4, 0); 211 } 212 } 213 214 long timeDisplay(long timeRun, String player){ 215 long min_t=0; 216 long sec_t=0; 217 if (player=="A"){ 218 min_t= (minSetA*60+secSetA-timeRun/1000)/60; 219 sec_t = (minSetA*60+secSetA-timeRun/1000)%60; 220 } else if (player=="B"){ 221 min_t= (minSetB*60+secSetB-timeRun/1000)/60; 222 sec_t= (minSetB*60+secSetB-timeRun/1000)%60; 223 } 224 225 return min_t*100 + sec_t; 226 } 227 228 int timeOut(){ 229 int isTimeOut=0; 230 if (timeA>(minSetA*60+secSetA)*1000){ 231 isTimeOut=1; 232 } else if (timeB>(minSetB*60+secSetB)*1000){ 233 isTimeOut=1; 234 } 235 return isTimeOut; 236 } 237
Chess alarm clocks Code
c_cpp
1#include <TM1637Display.h> 2 3//encoder 4#define outputA 2 5#define 6 outputB 3 7#define enSw 4 8 9// 4-digital display pins (Digital Pins) 10#define 11 CLKA 5 12#define DIOA 6 13#define CLKB 7 14#define DIOB 8 15TM1637Display displayA(CLKA, 16 DIOA); 17TM1637Display displayB(CLKB, DIOB); 18 19 20//button, led, buzzer 21#define 22 btA 9 23#define btB 10 24#define buzz 11 25 26// 27uint8_t segOff[]={false,false}; 28// 29 30 int timerSet = 0; 31 int aState; 32 int aLastState; 33 int modeState=0; 34 35 int modeStateLast=0; 36 37unsigned long minSetA = 5; 38unsigned long secSetA 39 = 0; 40unsigned long minSetB = 5; 41unsigned long secSetB = 0; 42unsigned long 43 timeO = 0; 44unsigned long timeA = 0; 45unsigned long timeB = 0; 46int enSwStatus=1; 47int 48 enSwStatusLast=1; 49int btAStatus=1; 50int btAStatusLast=1; 51int btBStatus=1; 52int 53 btBStatusLast=1; 54 55void setup() { 56 Serial.begin(9600); 57 58 displayA.setBrightness(4); 59 60 displayA.clear(); 61 displayB.setBrightness(4); 62 displayB.clear(); 63 delay(1000); 64 65 66 pinMode(btA,INPUT_PULLUP); 67 pinMode(btB,INPUT_PULLUP); 68 pinMode(buzz,OUTPUT); 69 70 71 pinMode (outputA,INPUT); 72 pinMode (outputB,INPUT); 73 pinMode(enSw,INPUT_PULLUP); 74 75 aLastState = digitalRead(outputA); 76 digitalWrite(buzz,LOW); 77 78} 79 80void 81 loop() { 82 switch(modeState){ 83 84 case 0: 85 digitalWrite(buzz,LOW); 86 87 displayA.showNumberDecEx(minSetA*100 + secSetA, 0b01000000, true, 4, 0); 88 89 displayB.showNumberDecEx(minSetB*100 + secSetB, 0b01000000, true, 4, 0); 90 91 enSwStatus=digitalRead(enSw); 92 btAStatus=digitalRead(btA); 93 btBStatus=digitalRead(btB); 94 95 if(enSwStatus==0&&enSwStatusLast==1){ 96 modeState=1; 97 } 98 99 if(btAStatus==0&&btAStatusLast==1){ 100 modeState=12; 101 timeO= 102 millis(); 103 timeA=0; 104 timeB=0; 105 } 106 if(btBStatus==0&&btBStatusLast==1){ 107 108 modeState=11; 109 timeO= millis(); 110 timeA=0; 111 timeB=0; 112 113 } 114 btAStatusLast=btAStatus; 115 btBStatusLast=btBStatus; 116 117 enSwStatusLast=enSwStatus; 118 break; 119 120 case 1: 121 enSwStatus=digitalRead(enSw); 122 123 minSetA=setNum(minSetA); 124 displayBlink("A",0); 125 if(enSwStatus==0&&enSwStatusLast==1){ 126 127 modeState=2; 128 } 129 enSwStatusLast=enSwStatus; 130 break; 131 132 case 2: 133 enSwStatus=digitalRead(enSw); 134 secSetA=setNum(secSetA); 135 136 displayBlink("A",2); 137 if(enSwStatus==0&&enSwStatusLast==1){ 138 139 modeState=3; 140 } 141 enSwStatusLast=enSwStatus; 142 break; 143 144 case 3: 145 enSwStatus=digitalRead(enSw); 146 minSetB=setNum(minSetB); 147 148 displayBlink("B",0); 149 if(enSwStatus==0&&enSwStatusLast==1){ 150 151 modeState=4; 152 } 153 enSwStatusLast=enSwStatus; 154 break; 155 156 case 4: 157 enSwStatus=digitalRead(enSw); 158 secSetB=setNum(secSetB); 159 160 displayBlink("B",2); 161 if(enSwStatus==0&&enSwStatusLast==1){ 162 163 modeState=0; 164 } 165 enSwStatusLast=enSwStatus; 166 break; 167 168 169 case 11: 170 timeA = millis()-timeO-timeB; 171 if(timeOut()==1){ 172 173 modeState=13; 174 } 175 displayA.showNumberDecEx(timeDisplay(timeA,"A"), 176 0b01000000, true, 4, 0); 177 displayB.showNumberDecEx(timeDisplay(timeB,"B"), 178 0b01000000, true, 4, 0); 179 btAStatus=digitalRead(btA); 180 if(btAStatus==0&&btAStatusLast==1){ 181 182 modeState=12; 183 } 184 btAStatusLast=btAStatus; 185 enSwStatus=digitalRead(enSw); 186 187 if(enSwStatus==0&&enSwStatusLast==1){ 188 modeState=0; 189 } 190 191 enSwStatusLast=enSwStatus; 192 break; 193 194 case 12: 195 timeB 196 = millis()-timeO-timeA; 197 if(timeOut()==1){ 198 modeState=13; 199 200 } 201 displayA.showNumberDecEx(timeDisplay(timeA,"A"), 0b01000000, 202 true, 4, 0); 203 displayB.showNumberDecEx(timeDisplay(timeB,"B"), 0b01000000, 204 true, 4, 0); 205 btBStatus=digitalRead(btB); 206 if(btBStatus==0&&btBStatusLast==1){ 207 208 modeState=11; 209 } 210 btBStatusLast=btBStatus; 211 enSwStatus=digitalRead(enSw); 212 213 if(enSwStatus==0&&enSwStatusLast==1){ 214 modeState=0; 215 } 216 217 enSwStatusLast=enSwStatus; 218 break; 219 case 13: 220 analogWrite(buzz,255); 221 222 delay(100); 223 analogWrite(buzz,0); 224 delay(100); 225 enSwStatus=digitalRead(enSw); 226 227 if(enSwStatus==0&&enSwStatusLast==1){ 228 modeState=0; 229 } 230 231 enSwStatusLast=enSwStatus; 232 break; 233 234 default: 235 236 237 break; 238 } 239} 240 241int setNum(int num) { 242 aState = digitalRead(outputA); 243 244 if (aState != aLastState){ 245 if (digitalRead(outputB) != aState) { 246 247 num ++; 248 } else { 249 if(num>0){ 250 num --; 251 252 } 253 } 254 } 255 aLastState = aState; 256 return num; 257 } 258 259 void displayBlink(String player, int pos){ 260 if(player=="A"){ 261 if ((millis()*5/1000)%2==0){ 262 263 displayA.setSegments(segOff, 2, pos); 264 } else displayA.showNumberDecEx(minSetA*100 265 + secSetA, 0b01000000, true, 4, 0); 266 } else if (player=="B"){ 267 if 268 ((millis()*5/1000)%2==0){ 269 displayB.setSegments(segOff, 2, pos); 270 } 271 else displayB.showNumberDecEx(minSetB*100 + secSetB, 0b01000000, true, 4, 0); 272 273 } 274 } 275 276 long timeDisplay(long timeRun, String player){ 277 long min_t=0; 278 279 long sec_t=0; 280 if (player=="A"){ 281 min_t= (minSetA*60+secSetA-timeRun/1000)/60; 282 283 sec_t = (minSetA*60+secSetA-timeRun/1000)%60; 284 } else if (player=="B"){ 285 286 min_t= (minSetB*60+secSetB-timeRun/1000)/60; 287 sec_t= (minSetB*60+secSetB-timeRun/1000)%60; 288 289 } 290 291 return min_t*100 + sec_t; 292 } 293 294 int timeOut(){ 295 int 296 isTimeOut=0; 297 if (timeA>(minSetA*60+secSetA)*1000){ 298 isTimeOut=1; 299 300 } else if (timeB>(minSetB*60+secSetB)*1000){ 301 isTimeOut=1; 302 } 303 return 304 isTimeOut; 305 } 306
Downloadable files
Chess alarm clocks Schematics
Chess alarm clocks Schematics
Comments
Only logged in users can leave comments
herolivechannel
0 Followers
•0 Projects
Table of contents
Intro
8
0