Billiga programmerbara vatten värmare Timer (2 / 5 steg)
Steg 2: Programmering av fasad
För att programmera prydnadssak, följde jag Adafruit hjälp guiden på https://learn.adafruit.com/introducing-trinket
Språket är samma som Arduino, men inställningarna för programmeraren är annorlunda.
Jag skrev koden för att hålla koll på tiden, slå på strömmen från 7: 00 -11:59 AM och helgen, och slå av strömmen från lunch -6:59 PM. Det är en komplikation med den prydnadssak tidhållning, så att du i princip har dubbel kolla det och få det så nära som möjligt. Varje gång kristallen används kan variera så enkelt säga 1000 millis = en sekund kanske inte är korrekta. Det nummer som arbetade för min fasad var 30235 millis = en minut. Jag antar att den processor som körs på hälften av vad det är för att så 1 minut = 30000 millisekunder snarare än 60000, plus extra till konto för fel jag hittade 235.
Se min kod nedan, och bifogade:
För närvarande programmerade att vara inkopplad på lördag kl 10.
För att ändra detta ändra dag eller timme under int dag = 7. 1 = söndag... 7 = lördag int timme = 10. kräver plug på middagen / / / int relayPinoff = 1; antal LED stift, INA int relayPin = 0; numrera av relä stift, INB //OUTA till nedre vänstra, OUTB till rätt int minut = 0; int power = 1; 0 = off 1=on(NC) relä startar i NC-läge ström på osignerade långa previousMillis = 0; variablerna som följer är en lång eftersom tiden, i millisekunder, / / kommer snabbt att bli ett större antal än kan lagras i en int. långa intervall = 30235; mellanrum på en minut. Millis inte mycket exakt
void setup() {/ / ställa in digital stiften som resultat: pinMode (relayPinoff, produktionen); pinMode (relayPin, produktionen); digitalWrite (relayPinoff, låg), digitalWrite (relayPin, hög); //switch reläet till NC (värmare på) delay(25); //for relä tid på 7ms digitalWrite (relayPin, låg);} void loop() {//rollover på 4,294,967,295ms = 4,294,967s = 71582.78 m = 1193.046 h = 49,7 dag //even om efter rollover aktuell - föregående beräknar korrekt skillnaden / / 7302-4,294,967,255 = 7342ms //1hr=60min=3600s=3600000ms , 1 m = 60-talet = 60000ms / / kontrollera för att se om det är dags att växla reläet; det vill säga om tiden / / är mellan lunchtid eller 1900 timmar relä/makt att värmaren ska vara avstängd. om skillnaden mellan den aktuella tiden och sista gången du uppdaterat / / minut är större än intervallet, dvs det har varit ytterligare en minut / / sedan uppdatera minut counter och timräknare om det behövs. osignerade långa currentMillis = millis(); om (currentMillis - previousMillis > intervall) {//this avsnitt körs varje minut om (minut == 59) {minut = 0; om (timme == 23) {timme = 0; //midnight om (dagen < 7) {dag = dag + 1;} annat {dag = 1;}} annat {timme = timme + 1;}} annat {minut = minut + 1;} previousMillis = currentMillis;
om (dag > = 2 & & dag < = 6) {//weekdays om (timme > = 12 & & timme < 19 & & power == 1) {//power off under peak timmar kl noon - 7 digitalWrite (relayPinoff, hög); //switch reläet att ingen (värmare av) //digitalWrite (LEDPin, låg), //mark att värmaren är avstängd delay(25); //for relä tid på 7ms digitalWrite (relayPinoff, låg); //latching relä kräver ingen ström efter byte power = 0;} annars om (timme > = 19 || timme < 12 & & power == 0) {digitalWrite (relayPin HÖG); Växla reläet till NC (värmare på) //digitalWrite (LEDPin, hög); Markera att värmaren är på delay(25); för relay tiden av 7ms digitalWrite (relayPin, låg); Power = 1; {}} annars om (dag == 1 || dagen == 7 & & power == 0) {//unnecessary elseif, men visar punkt digitalWrite(relayPin, HIGH); //switch reläet till NC (värmare på) //digitalWrite (LEDPin, hög), //mark att värmaren är på delay(25); //for relä tid på 7ms digitalWrite (relayPin, låg), power = 1;}} }