Stap 4: Wat doet van de schets
De schets is vrij eenvoudig, maar het illustreert nog verschillende programmeer concepten.
Ten eerste, de schets initialiseert meerdere variabelen, die later in de tekening worden gebruikt. Samen met de pinnen die we gonna gebruiken, initialiseren we de variabele voor de minimale en maximale knipperen tarieven, twee tijdwaarden winkel, en één voor of de LED moet worden in- of uitschakelen.
Omdat deze variabelen zijn geïnitialiseerd buiten elke functie, zijn ze in de globale scope. Dit betekent dat ze kunnen worden gebruikt en overal in de code gewijzigd en de wijzigingen zullen blijven bestaan. Dit zal later belangrijk geworden.
Vervolgens is de Setup-functie. Hier gebruiken we pinMode() om in te stellen van de pinnen, één voor de input (de schuifknop) en één voor uitvoer (de LED). Dan we de waarde lezen van de schuifregelaar... u niet moet wachten tot loop om te lezen een waarde zolang de pin in ingesteld.
Na Setup loopt over en loop totdat macht is verbroken. Wij initialiseren niet alle variabelen hier omdat alles wat die we nodig hebben is al in de globale scope.
Ten eerste, krijgen we de huidige tijd door het aanroepen van millis() en zetten dat in t.
Vervolgens lezen wij de waarde van de schuif-Dimmer in sldr_val. Ik moet hier opmerken dat de waarden die we hier krijgen 0 tot 1023, maar de schuif-Dimmer niet dit hoge waarden geven kan.
Nu controleren we als we iets moeten doen. We doen dit door het vergelijken van de tijd is verstreken sinds de vorige iteratie van loop te blink_val. Wanneer loop wordt uitgevoerd voor de eerste keer, hebben de vorige keer (l) en de blink_val al is ingesteld op 0, zodat dit nog steeds werkt. Als er voldoende tijd is verstreken, is het tijd om iets te doen, zodat we Voer de "als" blok en beginnen om dingen te doen.
De waarde van de schuif Dimmer (die we net gelezen) sturen we naar de seriële monitor.
Volgende update we de waarde van blink_val met behulp van een bilt in functie genaamd map() (Lees meer over het op http://arduino.cc/en/Reference/Map). Kaart neemt een variabele en kan prima overweg met het één bereik naar een ander bereik. Het eerste bereik is wat de dia Dimmer waarde zou kunnen zijn, en het tweede bereik is wat we willen; Wij zijn al geïnitialiseerd met de grenzen van dit bereik op de top van de schets als min_rate en max_rate.
Nu hebben we een bijgewerkte waarde voor blink_rate te vergelijken met de tijd die door deze herhaling van loop doorgegeven aan latere.
De volgende stap schrijft naar de pin dat de LED brandt, waardoor de LED draaien in- of uitschakelen. De syntaxis hiervoor gebruikt is zeer compact, dus ik zal het uitleggen.
Een aanroep naar digitalWrite() heeft twee argumenten: de pin en de waarde te schrijven. Hier onze eerste argument is de variabele voor de LED-pin, led_pin. Het tweede argument is niet een waarde, of zelfs een variabele... het is een expressie.
Omdat deze pin in een digitale modus is, begrijp het slechts twee waarden: true of false. De constanten die hoge en lage zijn aliassen van echte en valse, dus wanneer u hoog, je bent eigenlijk passeren waar.
Maar goed, terug naar onze uitdrukking. Het is een ternaire operator, die een soort is van steno voor if/else codeblokken. We hebben de ternaire operator verpakt in haakjes voor de duidelijkheid. Helaas zijn deze niet gedocumenteerd in de sectie van de Reference van de Arduino website, dus lees hier.
Een ternaire operator bestaat uit drie delen. Het eerste deel is een andere expressie die resulteert in de ternaire operator. Het wordt gevolgd door een vraagteken.
Het tweede deel is de resultaatwaarde van de ternaire operator als het eerste deel naar true evalueert. Het wordt gevolgd door een dubbele punt.
Het derde deel is de resultaatwaarde van de ternaire operator als het eerste deel niet evalueren om waar (met andere woorden, false).
Onze eerste deel is onze variabele o, die is het Booleaans dat we gedefinieerd bij de bovenkant van de schets. Onze tweede deel is hoog, en onze tweede deel is laag.
Dus als o klopt, hoge naar de PIN-code wordt geschreven, is anders laag geschreven.
Andere programmering veteranen zal waarschijnlijk zeggen "maar je kon gewoon doorgeven o direct en niet lastig vallen met een Ternair", en het zijn recht omdat o een Boolean-waarde is en het is gonna be onwaar (die hoge is een alias van) of ONWAAR (die laag is een alias van). Ik gebruikte het hier ter illustratie van wat een ternaire operator doet.
Na dat voorbereiden we de toekomst. Wij o omkeren (true wordt de waarde false, false waar wordt) dan de vorige keer l bijwerken naar de waarde van de huidige tijd t.
Maar er een ander ding hier aan de hand is. O deze door manier te gebruiken in combinatie met de LED, hebben we een statusmachine voor de LED. In de elektronica is een statusmachine
Een apparaat dat in een van een aantal stabiele omstandigheden afhankelijk van zijn vorige toestand en van de contante waarde van haar ingangen worden kan.
Onze statusmachine heeft slechts twee staten, in- en uitschakelen.