Stap 4: Programmeren van het Project
Nu hebben we afgesloten van bedrading van ons project, het is tijd om te schrijven wat code. Ik ben met inbegrip van de onderstaande code, maar zal spreken over de theorie een beetje eerste.De code die ik heb verstrekt wordt gecompileerd tot 1560 bytes in grootte. De Arduino grepen programma's maximaal 14336 bytes in grootte. Dit kleine project neemt meer dan 10% van de capaciteit van de Arduino, maar dit is echt geen optimale code. Het is een tutorial, dus ik heb het geprobeerd duidelijk in plaats van efficiënt. Ik zou niet helemaal verrast om te vinden dat het in de helft van de ruimte kan worden herschreven of minder.
Elke Arduino "schets" heeft twee verplichte gebieden: setup en lus. Setup worden eenmaal uitgevoerd nadat het programma is gestart. Dit kunt u het configureren van de beginstaat van de board: welke pinnen zijn ingangen, uitgangen zijn, en of uitgangen beginnen hoog of laag. De lus is het gedeelte van het programma executived herhaaldelijk zodra setup is voltooid. Er is geen "end"- of "exit" naar een Arduino-programma--geen om af te sluiten om! Hebt u ervaring programmering, zult u onmiddellijk herkennen de taal die wordt gebruikt voor het programmeren van de Arduino is onze goede oude vriend C. Als dat niet het geval is, u kunt afhalen de basis gewoon door te gaan over mijn code en de andere voorbeelden in de development kit. Veel grote C tutorials zijn ook beschikbaar op het web.
U kunt kopiëren en plak de code in uw ontwikkelomgeving Arduino, dan controleren en uploaden. Als alles u moet krijgen van blinky lichten en kunnen variëren van de snelheid klopt door te drukken.
Nu een sectie-door-sectie uitsplitsing van de schets:
1) beginnen we door het definiëren van bepaalde variabelen. Veel van dit gebied is voor menselijke begrip en omwille van de efficiëntie kan worden overgeslagen. Ik heb bijvoorbeeld een variabele met de naam "ledPinRed" gedefinieerd en stel deze gelijk aan 13 (ik gebruikte drie kleuren van LEDs--de rode is aangesloten op de digitale pin 13). Ik zou kunnen hebben gebruikt "13" rechtstreeks in het programma, maar dat maakt het veel moeilijker te begrijpen. De opmerkingen naast de variabelen opmerking wat elk is voor.
2) setup. Hier heb ik de pin waarop de drukknop is aangesloten als een input pin ingesteld. De Arduino zal kijken voor het ontvangen van informatie (hoge of lage signalen) er. Ik heb het opzetten van de LED-verbindingen worden uitgangen waar de Raad van bestuur de spanning wordt ingesteld als hoog of laag (5V of 0V) zo nodig. Tot slot, ik draaide me op mijn groene geleid en zorgde ervoor dat de anderen werden uitgeschakeld.
3) getButton: een functie (slechts een container voor code voor elke niet-programmeurs dit leest) die kunnen worden aangeroepen vanuit de hoofdlus om erachter te komen als we de knop hebt ingedrukt. Houdt het spoor van de huidige status van de knop en de vorige status van de knop de laatste keer dat we keken naar het. Dit laat ons toe om alleen reageren op afzonderlijke knooppersen: Houd de knop ingedrukt alleen telt als één pers. Dit is belangrijk wanneer de lichten zeer snel veranderen opdat het zijn zelfs woesteling voor controle.
4) changeLights: een andere functie. Deze wordt aangeroepen wanneer we nodig om naar de volgende van één LED. Degene die aanstaat wordt uitgeschakeld en de volgende dia in de reeks wordt ingeschakeld. Het werkt ook de variabele "currentLED", zodat we kunnen bijhouden van die LED momenteel actief is.
5) lus: de hoofdlus. Hier maken we eerst een oproep om te controleren op de knop. Als we vinden was niet de knop wordt ingedrukt, maar nu is, voegen we aan de variabele "currentSpeed". Als we gaan echt snel, reset we currentSpeed terug naar 1--lus rond, dus kunnen we terug naar lage snelheden. Na dat...
... Nou, dan we een lelijke regel die bepaalt raken of het is tijd om te veranderen naar de volgende LED. Millis() is een ingebouwde Arduino-functie waarmee wordt bijgehouden hoe lang de Raad van bestuur loopt het huidige programma. Alles wat we hier doen is uitzoeken als genoeg tijd is voorbij dat we moeten veranderen aan het volgende licht. Zo ja, noemen we het "changeLights"-functie om dat te realiseren.
Tot slot, hier is de code (waarschuwing: het opmaak verloren gaat een beetje wanneer gepost hier, dus het is niet zo mooi als het zou kunnen zijn):
/*
- Kevin's Arduino tutorial Arduino Tutorial
*
- Deze software is ontworpen om te worden gebruikt met mijn Arduino all-in-One Getting Started Guide
- over ten
*
*/
Merk op dat deze variabelen alle GLOBAL in omvang, zijn zodat ze binnen onze functieaanroepen werken zullen
int ledPinRed = 13; Instellen van de digitale uitgangen voor LED 's
int ledPinYellow = 12;
int ledPinGreen = 11;
int switchPin = 2; Stel t/m de schakelaar staat van de digitale ingang 2 leest
int currentLED = 1; Groen = 1, geel = 2, rood = 3
int currentSpeed = 1; Hiermee bepaalt u hoe snel we schakelen tussen lichten.
int buttonWas = 0; De stand van de schakelaar (geduwd = 1, niet duwde = 0) laatste keer we keken
int buttonIs = 0; Huidige stand van de schakelaar
niet-ondertekende lange timer = 0; Een timer om bij te houden van waar we zijn.
VOID Setup / / loopt zodra, wanneer begint het programma ("schets")
{
pinMode (switchPin, INPUT); Vertelt de Arduino voor de behandeling van de switchPin als INPUT
pinMode (ledPinRed, OUTPUT); De Arduino vertelt dat de rode LED-pin voor uitvoer is
pinMode (ledPinYellow, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
digitalWrite (ledPinGreen, hoge); Groene LED brandt aan begin
digitalWrite (ledPinRed, laag); Rode LED is uit aan begin
digitalWrite (ledPinYellow, laag); Gele LED is uit aan begin
}
VOID getButton() {/ / laten we eens kijken wat de knop doet, zullen we?
buttonWas = buttonIs; De oude status van de knop om de huidige staat omdat we een nieuwe stand creëren instellen.
buttonIs = digitalRead(switchPin); Lees de knopstatus
}
VOID changeLights() {/ / schakelt u de momenteel verlichte LED en op volgende.
timer=Millis(); onze timer instellen op de huidige tijd
if(currentLED==1) {}
digitalWrite (ledPinGreen, laag);
digitalWrite (ledPinYellow, hoge);
}
if(currentLED==2) {}
digitalWrite (ledPinYellow, laag);
digitalWrite (ledPinRed, hoge);
}
if(currentLED==3) {}
digitalWrite (ledPinGreen, hoge);
digitalWrite (ledPinRed, laag);
}
currentLED ++; Toevoegen aan currentLED
Als (currentLED == 4) {currentLED = 1;}
}
void loop / / dit is onze "hoofdlus". Arduino programma's niet afsluiten--nergens om af te sluiten aan!
{
getButton();
if((buttonIs==1) & &(buttonWas==0)) {}
currentSpeed ++; Toevoegen aan de huidige vertraging omdat de knop werd ingedrukt.
if(currentSpeed==15) {currentSpeed = 1;} / / lus rond--dit onderscheidt ons terug naar een langzame draaiing.
}
Als (millis() > =timer+(1000/currentSpeed)) {/ / tijd om te veranderen van de verlichting!
changeLights();
}
}