Sleep Cycle Alarm Clock met motiesensor (4 / 5 stap)

Stap 4: Programma de klok

Hoe te programmeren van elk onderdeel:

Real timerklok
Na het uitvoeren van de eerste SetTime, is het zeer makkelijk te gebruiken van de DS1307. Zorg ervoor dat de Time.h en de DS1307RTC.h bestanden omvatten en de instructie "tmElements_t tm;". Om te lezen de tijd van de klok, maken een indien verklaring zeggen "if(RTC.read(tm))" om te controleren als de RTC-tijd kan worden gelezen. Binnen dat als verklaring kunt u een drankje van de tijd door het schrijven van een van de volgende handelingen:
TM. Uur
TM. Minuut
TM. Dag
TM. Maand
TM. Jaar

Zoemer
De Arduino tone() functie gebruiken om notities van andere frequentie en duur spelen op mijn piëzo-zoemer. Pin 9 fungeert als een output naar de zoemer. De tone-functie moet als volgt worden geschreven:
Toon (pin, frequentie, duur);
Ik vond dat de beste manier om te spelen en het gehele nummer 3 om arrays te maken die waarvan afzonderlijke items werden gebruikt in een for-lus. Een array was voor de frequenties van elke noot, een voor de duur van elke noot was en de laatste was voor de pauzes tussen de noten. Ik vond al deze informatie voor de Super Mario theme song van de post door opnieuw op dit forum:
http://Arduino.CC/Forum/index.php/topic, 8409.0.html
Hij of zij gebruikt een aparte Tone library in zijn of haar code, zodat ik de frequenties, de duur en de pauzes gewoon in mijn eigen arrays gekopieerd. Ik voegde ook 100 milliseconden aan elke pauze en duur, omdat de melodie een beetje snel was.

LCD-Display
Download de Adafruit RGB LCD Shield bibliotheek vinden op de volgende link:
https://github.com/adafruit/Adafruit-RGB-LCD-Shield-Library
Opnemen in uw code, Adafruit_MCP23017.h en Adafruit_RGBLCDShield.h om te manipuleren het LCD schild.

Hoe het uiteindelijke product zou moeten werken:

Het eerste scherm op het LCD-scherm moet lezen "Druk op Select". Op de select knop te drukken gaat de klok van normale modus Set Alarm klok of terug naar de klok. Eenmaal in de alarmmodus instellen krijgt op de juiste knop te drukken u instellen het alarm in- of uitschakelen (gecontroleerd door de linkerknop), stelt u het uur van het alarm (gecontroleerd door de knop omhoog) of instellen van de minuut van het alarm (gecontroleerd door de knop omlaag). Geen zorgen als deze niet vrij nog zinvol. Elke stap heeft instructies op die knop druk langs de weg.

Zodra het alarm gaat af, kunt u het uitschakelen door simpelweg op de extra knop (gekoppeld aan de voorkant van mijn klok).

De volledige code:

Mijn lus is vrij gecompliceerd, maar de klok werkt! Hebt u suggesties over hoe om te vereenvoudigen van de code, laat het me weten. Ik vond het moeilijkst te programma die de knop indrukt als afzonderlijke acties en om de klok voor het afdrukken van de datum en tijd zodat het zou voortdurend bijwerken.
Hopelijk zult u kunnen begrijpen in geval u wil tweaks voor uw eigen aan de klok!

#include < DS1307RTC.h >
#include < Time.h >
#include < Wire.h >
#include < Adafruit_MCP23017.h >
#include < Adafruit_RGBLCDShield.h >

Code voor een slaap cyclus wekker
Maakt gebruik van PIR bewegingsmelder LCD schild, knop, piëzo-zoemer, Real timerklok

Deze #defines maken het gemakkelijk om de kleur van de achtergrondverlichting instellen
#define RED 0x1
#define gele 0x3
#define groen 0x2
#define TEAL 0x6 gemaakt
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

Frequenties van tonen gespeeld in alarm melodie
int melodie [] {660,660,510,660,770,380,510,380,320,440,480,450, =
430,380,660,760,860,700,760,660,520,580,480,510,380,320,440,480,
450,430,380,660,760,860,700,760,660,520,580,480,500,760,720,680,
620,650,380,430,500,430,500,570,500,760,720};

duur van tonen gespeeld in alarm melodie
int [van duur] = {200,200,200,200,200,200,200,200,200,200,180,200,
200,200,180,150,200,180,150,180,180,180,180,200,200,200,200,180,
200,200,200,180,150,200,180,150,180,180,180,180,200,200,200,200,
250,250,200,200,200,200,200,200,200,200,200};

de wachttijd tussen de tonen
int delayTime [] {175,250,250,150,250,375,387,325,300,350,250,265, =
175,250,200,200,175,250,175,275,250,175,175,275,375,300,350,250,265,
175,250,200,200,275,250,175,275,250,175,175,350,250,150,175,175,250,
250,175,175,250,175,150,210,250,150};

int switchPin = 5;
int pirPin = 6;
int buzzerPin = 9;

Hiermee selecteert u alarm ofwel set of klok modus
int modeSelect;
geheel getal kiezen welk deel van het alarm instellen
int alarmSelect;
Geheel getal voor het instellen van het alarm op of af
int alarmSetOnInt;
Geheel getal voor de instelling uur voor alarm
int alarmHourSet;
Geheel getal voor minuten voor alarm instellen
int alarmMinSet;
Geheel getal dat aangeeft of de knop is ingedrukt
int buttonVal;
Geheel getal tracking gedetecteerd motion
int motionDetected;

Ongeacht of het alarm is ingeschakeld
Boole alarmOn = false;
Wel of niet het alam is momenteel afgaan
Boole alarmGoingOff = false;
Boolean-waarde die geldt zodra de alarmtijd is verstreken
Boole alarmCanGoOff = false;

tmElements_t tm;
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

VOID Setup {}

Wire.begin();
Serial.begin(9600);
LCD.begin(16,2);

set achtergrondverlichting en een eerste bericht
lcd.setBacklight(VIOLET);
lcd.setCursor(1,1);
LCD.Print ("druk op selecteren");

pinMode (pirPin, INPUT);
modeSelect = 0;
alarmSelect = 0;
alarmSetOnInt = 0;
alarmHourSet = -1;
alarmMinSet = -1;
motionDetected = 0;
alarmGoingOff = false;

uint8_t ik = 0;

}

void loop {}
uint8_t knoppen = lcd.readButtons();

buttonVal = digitalRead(switchPin);
if(buttonVal == High) {}
LCD.Clear();
alarmOn = false;
alarmCanGoOff = false;
alarmGoingOff = false;
}

Als de wekker gaat niet af, de normale datum en tijd afdrukken
if(!alarmGoingOff) {}
printDateTime();
}

Als het alarm gaat af en het is niet de alarmtijd, blijven het alarm
Als (alarmGoingOff & tm. Minuut! = alarmMinSet) {}
LCD.Clear();
alarmOn =! alarmOn;
alarmGoingOff =! alarmGoingOff;
}

if(buttons) {}
Als de select-knop wordt ingedrukt, kies een modus
if(Buttons & BUTTON_SELECT) {}
if(modeSelect>1) {}
modeSelect = 0;
}
LCD.Clear();
modeSelect = modeSelect + 1;
alarmSelect = 0;
delay(1000);
if(modeSelect == 1) {}
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Set Alarm");
lcd.setCursor(1,1);
LCD.Print ("druk op rechts");
delay(1000);
}

}
Als modus hebt geselecteerd, is alarm set, waarmee u kunt alarm instellen
if(modeSelect == 1) {}
if(Buttons & BUTTON_RIGHT) {}
if(alarmSelect>2) {}
alarmSelect = 0;
}
alarmSelect = alarmSelect + 1;
delay(1000);
Tonen of alarm in- of uitschakelen
if(alarmSelect == 1) {}
LCD.Clear();
if(!alarmOn) {}
lcd.setCursor(1,0);
LCD.Print ("Alarm uitschakelen");
lcd.setCursor(1,1);
LCD.Print ("pers links");
delay(1000);
} else if(alarmOn) {}
lcd.setCursor(1,0);
LCD.Print ("Alarm op");
print2digits(alarmHourSet,10,0);
lcd.setCursor(12,0);
LCD.Print(":");
print2digits(alarmMinSet,13,0);
}
} else if(alarmSelect == 2) {}
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Set Hour");
lcd.setCursor(1,1);
LCD.Print ("druk op UP");
} else if(alarmSelect == 3) {}
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Set Minutes");
lcd.setCursor(1,1);
LCD.Print ("press DOWN");
}
}
}

Instellen of alarm in- of uitschakelen is
if(alarmSelect == 1) {}
if(Buttons & BUTTON_LEFT) {}
alarmOn =! alarmOn;
LCD.Clear();
delay(1000);
if(alarmOn) {}
LCD.Print ("Alarm op");
} else if(!alarmOn) {}
LCD.Print ("Alarm Off");
}
}
}

Vaste uren
if(alarmSelect == 2) {}
if(Buttons & BUTTON_UP) {}
LCD.Clear();
alarmHourSet = alarmHourSet + 1;
if(alarmHourSet>24) {}
alarmHourSet = 0;
}
delay(500);
}
print2digits(alarmHourSet,14,0);
}

Minuten in te stellen
if(alarmSelect == 3) {}
if(Buttons & BUTTON_DOWN) {}
LCD.Clear();
alarmMinSet = alarmMinSet + 1;
if(alarmMinSet>59) {}
alarmMinSet = 0;
}
delay(100);
}
print2digits(alarmMinSet,14,0);
}

}

Wekker kan afgaan zodra de alarmtijd gelijk aan de huidige tijd is
Als (alarmOn & alarmMinSet == tm. Minute & alarmHourSet == tm. Uur & modeSelect! = 1) {}
alarmCanGoOff = true;
Serial.println ("alarm kunt afgaan");
}

Als de wekker kan afgaan en de klok in de klok is, zal het alarm
na 3 opeenvolgende detecties voor motion afgaan
Als (alarmCanGoOff & modeSelect! = 1) {}
Serial.println(alarmCanGoOff);
int pirVal = digitalRead(pirPin);
if(pirVal == High) {}
motionDetected ++;
Serial.println ("bewegingsdetectie");
delay(1000);
}
if(pirVal == low) {}
motionDetected = 0;
}
if(alarmCanGoOff) {}
Als (motionDetected > 2 || tm. Uur == alarmHourSet + 1) {}
alarm();
motionDetected = 0;
}
}

}

}

Methode voor alarm. Verandert weergave en speelt de melodie
ongeldig alarm() {}
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("WAKE UPPPP!");
alarmGoingOff = true;
for (int i = 0; ik < 54; i ++) {}
buttonVal = digitalRead(switchPin);
if(buttonVal!=High) {}
delay(delayTime[i]);
Toon (buzzerPin, melody[i],duration[i]);
}
}

}

afdrukken van de datum en tijd
ongeldig printDateTime() {}
if(RTC.Read(TM) & modeSelect == 2) {}
print2digits(TM. Uur, 1, 0);
lcd.setCursor(3,0);
LCD.Print(":");
print2digits(TM. Minuut 4, 0);
lcd.setCursor(6,0);
LCD.Print(":");
print2digits(TM. Tweede, 7, 0);
print2digits(TM. Maand, 1, 1);
lcd.setCursor(3,1);
LCD.Print("/");
print2digits(TM. Dag 4, 1);
Serial.println (tm. Dag);
}
}

Print getallen in een locatie met behulp van twee cijfers (voor juiste kloknotatie)
VOID print2digits (int number, int-kolom, int rij) {}
Als (nummer > = 0 & & nummer < 10) {}
lcd.setCursor(column,row);
LCD.Print('0');
lcd.setCursor(column+1,row);
LCD.Print(Number);
}
anders als (nummer > = 10) {}
lcd.setCursor(column,row);
LCD.Print(Number);
}
}

Gerelateerde Artikelen

Bacon Alarm Clock

Bacon Alarm Clock

BAKON zijn een wekker die je wakker tot de geur van bacon en het geluid van een piggy. BAKON begint uw spek bij het koken tijd en wekt u tot de heerlijke kamer geur van bacon en de piggy geluid te vullen.Als een student die dit is de perfecte manier
Arduino All de dingen--S.M.A.R.T Alarm Clock-Setup voor vergaderingen, afspraken, herinneringen, en taken, deze klok maakt gebruik van een Arduino-Yún en uw Google agenda om automatisch alarm. en het ziet er ook Cool!

Arduino All de dingen--S.M.A.R.T Alarm Clock-Setup voor vergaderingen, afspraken, herinneringen, en taken, deze klok maakt gebruik van een Arduino-Yún en uw Google agenda om automatisch alarm. en het ziet er ook Cool!

S.M.A.R.T. wekkerSetup voor vergaderingen, afspraken, herinneringen en taken, deze klok automatisch instellen van alarmen maakt gebruik van een Arduino Yún en uw Google agenda. En het ziet er ook cool!Door Tony DiCola moeilijkheid: matigZou het niet
LED Dawn / Sunrise Alarm Clock, nachtlampje & veiligheid Light - Arduino compatibele

LED Dawn / Sunrise Alarm Clock, nachtlampje & veiligheid Light - Arduino compatibele

zoals de nachten geleidelijk verlengd in het najaar van 2011, ik ontdekte de geneugten van Arduino en dacht dat het zou een geweldige manier om iets dat ik voor een lange tijd wilde - een zachte manier om op een winter's ochtend wakker te worden.  He
Bacon Alarm Clock - Arduino

Bacon Alarm Clock - Arduino

Dit is een project dat ik kwam met dat werd geïnspireerd door mijn liefde voor spek!Dit is een wekker die is ontworpen om je wakker met de geur van bacon. Met behulp van een arduino die de wekker zal al het spek aroma vult de kamer om wakker wilt u u
Geluid Alarm Clock Light Sensing

Geluid Alarm Clock Light Sensing

Allereerst wil ik zeggen dat dit een cool project voor elk willekeurig bereik van vaardigheidsniveau. Als u een beginner met Arduino bent en nerveus over complexiteit zijn moedig ik u dit een poging geven zoals ik om zo behulpzaam proberen zal mogeli
Hoe maak je een Alarm systeem met behulp van een PicoBoard

Hoe maak je een Alarm systeem met behulp van een PicoBoard

dit Instructable is voor het maken van een alarmsysteem met behulp van kras, en een PicoBoard.De link naar het kras-programma dat gebruikt zal worden is https://scratch.mit.edu/projects/97054537/De link naar de video van het werken is https://m.youtu
Postbus Alarm draadloos met telefoon alert

Postbus Alarm draadloos met telefoon alert

1 x Alarm kit Auto-Dialer (ebay $10-$20)1 x deur/raamsensor (bij alarm kit inbegrepen)1 x toetsenbord/besturingseenheid met AC-adapter (meegeleverd in alarm kit)1 x telefoonkabel (bij alarm kit inbegrepen)2 x Kabelbinders (home depot of Lowes)Een een
Waterdicht Smart Alarm Clock

Waterdicht Smart Alarm Clock

Ooit wakker worden met je wekker alleen voor het uitgeschakeld, terug vast, sluit je ogen voor een paar seconden... en eindigen waking opwaarts veel later dan u had gewild? Dit project beoogt op te lossen dat probleem door het bouwen van een slimme w
Arduino/Android - BLUETOOTH stem paniek Alarm APP met SMS & oproep functies. SETUP 5 TELEFOONNUMMERS!

Arduino/Android - BLUETOOTH stem paniek Alarm APP met SMS & oproep functies. SETUP 5 TELEFOONNUMMERS!

Hello wereld! Vandaag en gisteren ik een paniek ALARM APP maakte, ik wilde maken van een stem app om te zetten in- en uitschakelen van een alarm met arduino, maar het resultaat werd deze paniek alarm app, hopelijk nuttig om sommige mensen te redden.5
Eetbare peperkoek Cuckoo Clock met interne versnellingen

Eetbare peperkoek Cuckoo Clock met interne versnellingen

vorig jaar voor Kerstmis maakte ik een Harry Potter peperkoek huis, dat was een heleboel plezier. In het afgelopen jaar heb ik brainstormen over wat ik zou doen dit jaar en wat ik kwam met was een peperkoek Koekoeksklok met werkende versnellingen. Ui
Alarm Clock wijziging

Alarm Clock wijziging

In dit instructable ga ik u tonen hoe te maken van een wekker met een beweegbare speaker. Ik deed dit zodat ik kan de klok op een plank echter de spreker dichtbij mijn hoofd hebben zodat het zal me wakker zonder anderen te storen.Ga naar de volgende
Arduino binaire Alarm Clock (pocket formaat)

Arduino binaire Alarm Clock (pocket formaat)

ooit wilde een binaire wekker? Ik ook van jou. Dus ik keek rond op Instructables, want er veel goeden rond zijn.Wat is nog beter: ze zijn gebaseerd op de Arduino, een van mijn favoriete speelgoed.Mijn favoriet is deze: Het inspireerde mij veel, en ja
Arduino - paniek Alarm, relais met ALARM. KY-019 voorbeeld

Arduino - paniek Alarm, relais met ALARM. KY-019 voorbeeld

Hallo mensen! Vandaag maakte ik een voorbeeld op de KY_019 estafette-module.In mijn video gebruik ik een Alarm met stroboscoop die eraan verbonden zijn, maar de flitser werkt niet omdat ik een 9 volt-batterij, gebruiken het alarm is 12v. Anyway... he
Met behulp van een kladje gewone huis alarm PIR met Arduino

Met behulp van een kladje gewone huis alarm PIR met Arduino

Als u als me bent en niet willen weggooien van ongewenste elektronische artikelen, moet u wellicht een oude PIR sensor van een gewone huis alarm aan de onderkant van uw junk vak.U kunt gemakkelijk sluit deze dan aan je arduino te detecteren verkeer d