Turing larm för Arduino (8 / 13 steg)
Steg 8: Del 2 - koden
När alarmtiden är inställd, kontrollerar slingan ständigt om alarmtiden är lika med realtid med denna kodrad:
om (alarmSetting == 1 & & alarmSecond == now.second() & & alarmMinute == now.minute() & & alarmHour == now.hour() )
Problemet med detta är att det inte kontrollera datum, så larmet går bort inom 24 timmar. För min ansökan som är tillräckligt, men om du behöver ställa in larm för mer än en dag senare lägga till en uppsättning datum funktion.
När larmet går av, körs denna kodrad:
alarmNoiseOn(); moveLineTwo(); IF(debounceIncrease == High) {
realAnswer = mathValOne * mathValTwo + mathValThree;
moveLineOne();
Serial.Print ("Hej!"); Wakeup meddelande
Serial.Print(mathValOne);
Serial.Print("*");
Serial.Print(mathValTwo);
Serial.Print("+");
Serial.Print(mathValThree);
Serial.Print ("=");
Serial.Print(inputAnswer);
Serial.Print("?");
Delay(100);
inputAnswer ++;
}
IF(debounceDecrease == High) {
inputAnswer--;
}
AlarmNoise på är en Testton -funktionen som loopar summern i ett bekant "alarm " mönster. realAnswer lagrar det faktiska svaret som stänger av larmet. De två sista funktionerna check om den upp eller ner-knapparna har pressats, som i sin tur ändrar indatavärdet.
När du trycker på OK kontrolleras i koden om input svaret är lika med det faktiska svaret:
if(digitalRead(buttonOK) == hög & & inputAnswer == realAnswer)
Om det är, noTone kallas (stänger av summern) och alla variabler återställs till 0. Ett wakeup meddelande visas i fem sekunder sedan larmet återgår till menyn huvudsakliga tid.
Delay(500);
noTone(9);
clearLCD();
alarmSetting = 0;
moveLineOne();
Serial.Print ("god morgon!");
Delay(5000);
MenuPosition = 0;
mathValOne = 0;
mathValTwo = 0;
mathValThree = 0;
alarmSecond = 0;
alarmMinute = 0;
alarmHour = 0;
Om det ingående svaret inte är lika (! =) till det faktiska svaret, sedan de matematiska värdena återställs till ett annat random värde, vilket ger användaren ett annat problem att lösa.