Stap 2: De Trinket programmeren
Om de Trinket program, volgde ik de Adafruit help guide op https://learn.adafruit.com/introducing-trinket
De taal is hetzelfde als de Arduino, maar de setup voor de programmeur is anders.
Ik schreef de code wilt bijhouden van de tijd, de macht inschakelen van 7 PM -11:59 AM en in het weekend, en schakel de stroom uit vanaf 's middags -6:59 PM. Er is een complicatie met de Trinket van tijd te houden, dus je eigenlijk moet dubbel check it en het zo dicht mogelijk te krijgen. Telkens crystal gebruikt kan dus gewoon zeggen 1000 millis variëren = een tweede mogelijk niet nauwkeurig. Het nummer dat werkte voor mijn Trinket 30235 millis was = één minuut. Ik denk dat de snelheid van de processor wordt uitgevoerd op de helft van wat het is ontworpen om zo 1 minuut = 30000 milliseconden eerder dan 60000, plus 235 extra account voor de fout die ik gevonden.
Zie mijn code hieronder, en verbonden:
Op dit moment geprogrammeerd te worden aangesloten op zaterdag om 10u00.
Wijzigen wijzigen dit dag en/of uur onder int dagen = 7; 1 = zondag... 7 = zaterdag int uur = 10; vereist plug in op middag / / / int relayPinoff = 1; het nummer van de LED-pin, INA int relayPin = 0; het nummer van de Relais-pin, INB //OUTA naar linksonder, OUTB tot juiste int minuut = 0; int macht = 1; 0 = uit 1=on(NC) relay wordt gestart in NC modus, macht op unsigned long previousMillis = 0; de follow-variabelen is een Long-waarde, omdat de tijd die, gemeten in miliseconden, / / zal snel uitgegroeid tot een groter aantal dan kan worden opgeslagen in een int. lange interval = 30235; interval van één minuut. Millis niet erg nauwkeurig
void setup {/ / set de digitale pinnen als uitgang: pinMode (relayPinoff, OUTPUT); pinMode (relayPin, OUTPUT); digitalWrite (relayPinoff, laag); digitalWrite (relayPin, hoge); de estafette naar NC (kachel op) delay(25) //switch; //for estafette tijd van 7ms digitalWrite (relayPin, laag);} void loop {//rollover op 4,294,967,295ms = 4,294,967s = 71582.78 m = 1193.046 h = 49.7 dag //even als na rollover huidige - vorige zal het juiste verschil berekenen / / 7302-4,294,967,255 = 7342ms //1hr=60min=3600s=3600000ms , 1 m = 60s = 60000ms / / check om te zien als het is tijd om over te schakelen van de estafette; dat wil zeggen, als de tijd / / is tussen de middag of 1900 uur de relay/voeding naar kachel moet uitgeschakeld zijn. Als het verschil tussen de huidige tijd en de laatste keer dat u bijgewerkt / / de minuut is groter dan het interval, d.w.z. het is een andere minuut / / update dan de minuut item, en uur prestatiemeteritem indien nodig. unsigned long currentMillis = millis(); Als (currentMillis - previousMillis > interval) {//this sectie draait elke minuut als (minuut == 59) {minuut = 0; als (uur == 23) {uur = 0; //midnight als (dag < 7) {dag = dag + 1;} anders {dag = 1;}} anders {uur = uur + 1;}} anders {minute = minuut + 1;} previousMillis = currentMillis;
Als (dag > = 2 & & dag < = 6) {//weekdays als (uur > = 12 & & uur < 19 & & macht == 1) {//power uitschakelen tijdens piek uren middag - 7 pm digitalWrite (relayPinoff, hoge); //switch de estafette naar geen (kachel uit) //digitalWrite (LEDPin, laag); //mark die kachel uitstaat delay(25); //for estafette tijd van 7ms digitalWrite (relayPinoff, laag); //latching estafette vereist geen macht nadat u bent overgeschakeld van macht = 0;} anders als (uur > = 19 || uur < 12 & & macht == 0) {digitalWrite (relayPin HOGE); het Relais schakelen naar NC (kachel op) //digitalWrite (LEDPin, hoge); Mark die kachel is op delay(25); voor relay tijd van 7ms digitalWrite (relayPin, laag); macht = 1; {}} anders als (dag == 1 || dag 7 == & & macht == 0) {//unnecessary elseif, maar toont punt digitalWrite(relayPin, HIGH); //switch de estafette naar NC (kachel op) //digitalWrite (LEDPin, hoge); //mark die kachel brandt delay(25); //for estafette tijd van 7ms digitalWrite (relayPin, laag); macht = 1;}} }