Négy részből áll:
- Definíciók
- Inicializálás
- Fő program
- Szubrutinok
Definíciók
const int ledPin = 13; // The number of the LED pin, just for blinking
Itt mondjuk meg hogy a LED hová van kötve. (13-as kivezetés.) Mondjuk ez egyébként nem kell, csak arra jó, hogy lássuk működik-e egyáltalán az ARDUINO, a program letöltés, stb..
const int deprezPin = 9; // The number of the deprez pin, PWM out
Ide van kötve (9-es kivezetés) a Deprez műszer a korábban tárgyalt előtét ellenállással (és trimmerel). A műszer másik oldalra a testre (GND) van kötve.
const long int interval = 300000; // It is 5 minutes in miliseconds (5 x 60 x 1000)
Ez az 5 perc meghatározása, ezred másodpercekben. Mellesleg ezzel a konstanssal lehetőségünk van kalibrálni az óránkat. Ha siet, akkor megnöveljük, ha késik akkor csökkentjük az értékét. Ezzel kerülhetjük ki az a hátrányt, hogy az ARDUINO 16 MHz-es kvarc időalapját nem tudjuk (egyszerűen) trimmer kondenzátorral pontosan beállítani.
unsigned long previousMillis; // Stores the last time, when codedTime was updated, ie. the clock was stepped
unsigned long currentMillis; // This is the current time, from start up in ms.
Öszesen ez a két változónk van. Az előző idő és a mostani idő ezred másodpercekben. ARDUINO fejlesztői környezet megadja az indítás (értsd RESET) óta eltelt időt ezred másodpercekben a millis() függvénnyel.
int codedTime = 143; // It is 11:55. After reset is is started from 11:55 to be able to set the deprez to 11:55.
Ez pedig a kijelzett idő, 12 órás formátumban, 5 perces felbontásban. Egyben a végkitéséssel is indul és ott is marad 5 percig, amíg be lehet állítani a trimmerrel a 11:55-öt.
Inicializálás
void setup() {
//Az eljárás egyszer fut le, a RESET (vagy ami ugyanaz, a bekapcsolás) után.
pinMode(ledPin, OUTPUT); // Set the ledPin as output
pinMode(deprezPin, OUTPUT); // Set the deprezPin as output
//Itt beállítjuk hogy melyik kivezetés milyen üzemmódban legyen. A LED is és a Deprez is kimenetként működő port-ot kíván.
currentMillis = millis(); // This is just because of the delay due to the "blinking".
//Szépségtapasz, hogy az "villogás alatt eltelt idő" ne okozzon pontatlanságot. Egyébként úgysem látszana ekkora időfelbontásnál...
previousMillis = currentMillis;
//Most vagyunk a "most"-ban, avagy a megelőző időt egyenlővé tesszük a aktuális idővel.
blink (); // Just to see, it is really working
//Aztán villogunk, de ez ugye csak dekoráció.
}
Fő program
Ez hajtódik vége mindig és mindig (tulajdonképpen egy végtelen ciklus)...
void loop() {
currentMillis = millis();
//Most ennyi az idő, indulás óta.
analogWrite(deprezPin, codedTime);
//Kis is írjuk a Deprez műszerre (analog Write az PWM-et jelent).
if(currentMillis - previousMillis > interval) {
//Eldöntjük, hogy eltelt-e már 5 perc?
previousMillis = millis(); // Save the time when the clock stepped
//Igen eltelt.
if (codedTime == 143) {
//Akkor nézzük meg, hogy 12 óra is eltelt-e?
codedTime = 0;
}
//Igen, eltelt 12 óra, akkor most jön a 0. óra.
else {
previousMillis = currentMillis;
codedTime = codedTime + 1;
//Egyébként nem csinálunk semmit, csak növeljük a kijelzett időt a következő alkalomhoz.
}
}
}
Szubrutinok
Ide tesszük a kiemelt ismétlődő programrészeket (függvényeket). Én ide tenném például a több Deprez esetében az egyes óra, perc és másodperc kezeléseket. Itt és most csak villogunk.
void blink () {
digitalWrite(ledPin, HIGH); // turn the LED on
delay(100); // wait
digitalWrite(ledPin, LOW); // turn the LED off
delay(100); // wait
digitalWrite(ledPin, HIGH);
delay(300);
digitalWrite(ledPin, LOW);
delay(300);
digitalWrite(ledPin, HIGH);
delay(700);
digitalWrite(ledPin, LOW);
delay(700);
}
A cikk még nem ért véget, lapozz!
Értékeléshez bejelentkezés szükséges!