Arduino allt-i-ett guiden komma igång (4 / 5 steg)
Steg 4: Programmering projektet
Nu när vi har slutfört är ledningar upp vårt projekt det dags att skriva någon kod. Jag är även alla koden nedan, men kommer att prata om teorin lite först.Koden jag har förutsatt sammanställer till 1560 byte i storlek. Arduino handtagen program upp till 14336 byte i storlek. Denna lilla projekt tar upp över 10% av den Arduino kapacitet, men detta är verkligen inte optimalt kod. Det är en handledning, så jag har försökt att vara tydlig snarare än effektiv. Jag skulle inte bli alls förvånad över att finna det kunde skrivas på halva utrymmet eller mindre.
Varje Arduino "skiss" har två obligatoriska områden: setup och loop. Installationsprogrammet körs en gång efter programmet startar. Detta kan du konfigurera starttillståndet för styrelsen: vilket stift är insatsvaror, som är utgångar och huruvida utgångar börjar hög eller låg. Slingan är avsnittet i programmet executived upprepade gånger så fort installationen är klar. Det finns ingen "slut" eller "exit" till en Arduino program - det finns ingenstans att gå ut till! Om du har erfarenhet programmering, du kommer genast känna igen det språk som används till att programmera Arduino är vår goda gamla kompis C. Om inte, du kan plocka upp grunderna bara genom att gå över min kod och andra exempel i development kit. Många bra C tutorials finns också på webben.
Du kan kopiera och klistra in koden i din Arduino utvecklingsmiljö, och sedan kontrollera och ladda upp den. Om allt är rätt bör du få blinkande lampor och kunna variera hastigheten genom att trycka på knappen.
Nu en sektionsvis-uppdelning av skissen:
1) först börjar vi genom att definiera vissa variabler. Mycket av detta område är för mänsklig förståelse och kunde bli hoppat för effektivitet. Jag har till exempel definieras en variabel som kallas "ledPinRed" och ange det till 13 (jag använde tre färger av lysdioderna--den röda en är anslutna till digitala stift 13). Jag kunde ha använt "13" direkt i hela programmet, men det gör det mycket svårare att förstå. Kommentarer bredvid variablerna Observera vad alla är för.
2) setup. Här har jag ange PIN-koden som tryckknappen är ansluten som en ingångsstift. Arduinoen kommer att titta för att få information (hög eller låg signaler) där. Jag har ställt LED anslutningarna vara utgångar där styrelsen kommer att ange spänningen som hög eller låg (5V eller 0V). Slutligen, jag vände på min gröna LED och såg till att de andra var avstängt.
3) getButton: en (bara en behållare för koden för någon icke-programmerare läser detta)-funktion som kan anropas från huvudloop att ta reda på om vi har tryckt på knappen. Det håller koll på det aktuella läget i knappen och det tidigare tillståndet knappen sista gången vi tittade på den. Detta tillåter oss att bara bemöta enskilda knapptryckningar: håll knappen nedtryckt endast räknas som en press. Detta är viktigt när ljuset växlar mycket snabbt så att det vara mycket svårt att kontrollera.
4) changeLights: en annan funktion. Denna anropas när vi behöver flytta från en LED till nästa. En som är på blir avstängd och nästa en i följd blir aktiverat. Även uppdateras variabeln "currentLED" så vi kan hålla reda på vilket LED är aktiva.
5) loop: huvudsakliga slingan. Här gör vi först en uppmaning att kolla på knappen. Om vi hittar knappen var inte pressas men nu är det, lägger vi till variabeln "currentSpeed". Om vi går verkligen fort, återställa vi currentSpeed till 1--looping runt så vi kan gå tillbaka till låga hastigheter. Efter det...
... Ja, då vi träffar en ful linje som avgör om det är dags att byta till nästa LED. Millis() är en inbyggd Arduino funktion som håller reda på hur lång tid i styrelsen har varit igång nuvarande program. Allt vi gör här är att ta reda om tillräckligt med tid har gått att vi ändrar till nästa ljuset. Så, kallar vi den "changeLights" funktionen för att få det att hända.
Slutligen, här är koden (Varning: det förlorar lite formatering när postat här, så det inte är så vackert som det kan vara):
/*
- Kevins Arduino Tutorial
*
- Denna programvara är utformad för att användas med min Arduino allt-i-ett guiden komma igång
- över på
*
*/
Observera att dessa variabler är alla GLOBAL omfattning, så att de ska arbeta inuti våra funktionsanrop
int ledPinRed = 13. Ställa in digitala utgångar för lysdioder
int ledPinYellow = 12;
int ledPinGreen = 11;
int switchPin = 2; Satte upp att läsa switch staten från digital ingång 2
int currentLED = 1; Grön = 1, gul = 2, röd = 3
int currentSpeed = 1; Avgör hur snabbt vi växla mellan lamporna.
int buttonWas = 0; Tillståndet i växeln (sköt = 1, inte drivit = 0) förra gången vi såg
int buttonIs = 0; Aktuell status för växeln
osignerade långa timer = 0; En timer för att hålla koll på var vi är.
void setup() / / kör en gång, när programmet ("skiss") börjar
{
pinMode (switchPin, ingång); Berättar Arduino att behandla switchPin som indata
pinMode (ledPinRed, produktionen); Berättar Arduino att röd lysdiod stift är för utdata
pinMode (ledPinYellow, produktionen);
pinMode (ledPinGreen, produktionen);
digitalWrite (ledPinGreen, hög); Grön LED är på början
digitalWrite (ledPinRed, låg); Röd lysdiod är från början
digitalWrite (ledPinYellow, låg); Gul lysdiod är från början
}
void getButton() {/ / Låt oss se vad knappen gör, skall vi?
buttonWas = buttonIs; Ange den gamla staten om knappen som det aktuella läget eftersom vi skapar ett nytt nuvarande tillstånd.
buttonIs = digitalRead(switchPin); Läs knappläge
}
void changeLights() {/ / stänga av den för närvarande upplysta LED och slå på Nästa.
timer=Millis(); återställa våra timer till aktuell tid
IF(currentLED==1) {
digitalWrite (ledPinGreen, låg);
digitalWrite (ledPinYellow, hög);
}
IF(currentLED==2) {
digitalWrite (ledPinYellow, låg);
digitalWrite (ledPinRed, hög);
}
IF(currentLED==3) {
digitalWrite (ledPinGreen, hög);
digitalWrite (ledPinRed, låg);
}
currentLED ++; Lägga till ett currentLED
om (currentLED == 4) {currentLED = 1;}
}
void loop() / / Detta är vårt "main" loop. Arduino program inte avsluta--ingenstans att avsluta till!
{
getButton();
IF((buttonIs==1) & &(buttonWas==0)) {
currentSpeed ++; Lägga till en till nuvarande förseningen eftersom knappen trycktes.
IF(currentSpeed==15) {currentSpeed = 1;} / / slinga runt - detta ställer oss tillbaka till en långsam rotation.
}
om (millis() > =timer+(1000/currentSpeed)) {/ / dags för att byta lamporna!
changeLights();
}
}