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();
}
}

Se Steg
Relaterade Ämnen

Arduino allt-i-ett-fjärrkontroll

Nu kan du ha alla fjärrkontroller av ditt hus i en enhet som passar i din hand med Arduino, aldrig slagsmål för vem har TV remote igen!För att göra det behöver du:Arduino (jag använde en billig kopia av arduino UNO).LCD knappsatsen sköld, (jag köpte...

Allt-i-ett raspberry Pi komma igång med

Raspberry Pi, en av de mest geniala uppfinningen för beslutsfattare och hackare. Innan vi börjar i de praktiska och tråkiga detaljerna för att få det setup, vi först måste fundera över frågan att vad Raspberry Pi faktiskt är?Raspberry Pi är en linux-...

Raspberry Pi allt-i-ett med pekskärm!

Efter min tidigare projekt, en bärbar dator baserad på en Raspberry Pi 2, som är denna: bestämde jag mig för att bygga inte klippte för mina dagliga syften. Och eftersom jag inte äger en tablett eller en laptop (jag använder alltid antingen pappas bä...

ANOLOUGE DIGITAL-B-I-N-A-R-Y-KLOCKA ALLT I ETT!?!?

Just det! Har du någonsin velat en allt-i-ett binärt, digitala, analoga klocka? Ja är detta vad du får när du låter en 13-årig program! Jag har denna klocka ner och programplaneringen fungerar! Denna klocka är något som du, anledning att vara är att...

Allt-i-ett hem mediacenter

Har du någonsin önskat att du kunde komma åt hela spel och film bibliotek på samma skärm? Tja, nu kan du! Detta projekt kommer att visa dig hur du förvandla en dator till din alldeles egna spel och film-tittande mediacenter.För att bygga ditt eget he...

HETA & kryddig allt-i-ett frukost

Hash brown potatis, knaperstekt bacon, jalapeno & habanero jack ost och färska ägg dammas med marken Chipotle peppar - alla bakade tillsammans i en muffin tenn. Bara 6 ingredienser (plus S & P efter smak).Steg 1: Ingredienser (för 2 portioner)Bara...

En allt-i-ett-komponent verktygslådan och Workstation

nuförtiden, många människor har tagit upp en hobby för elektronik. Samtidigt som det är en intressant och otroligt produktiv hobby, att hålla alla komponenter som resistorer, kondensatorer, är ICs etc prydligt i en plats en smärta.Naturligtvis kan ma...

Förvandla en gammal NES controller till en allt-i-ett USB-nav, minneskort och bärbara emulering station

det finns flera instruktioner guider för att förvandla gamla NES styrenheter till USB-nav eller blixt minne nyckel, och även några för att göra en plug-and-play emulator gadget. Som sådan, påstår jag inte originalitet för någon av komponenterna i det...

Gör din egen: Allt i ett akvarium anläggning mat

En kvalitet allt i ett akvarium gödselmedel innehåller allt en växt behöver för att frodas och tvärtemot vad många tror detta omfattar både nitrat och fosfat. Som många större tillverkare är fortfarande fast i förflutnan, det kan vara svårt för den i...

Festival ansikte fabriken - en allt-i-ett smink Kit

Festival ansikte fabrikenen mycket anpassningsbar, fickformat, allt-i-ett smink-kit!Utan att behöva släpa runt din hela makeup collection och avfall dyrbar utrymme i bagaget.Med detta kit, kan du ha alla dina beauty essentials i en fickformat lilla t...

Säng, bord och bänkar för camper van - allt i ett!

Efter användande van med enkel plattform för en säng, bord och plats för att umgås i ett år, vi bestämde att det var tid att gå till nästa nivå: bygga en allt-i-ett bed-tabell-bänkar-lagring! Vårt mål var att lägga till mer lagringsutrymme i det bebo...

Allt i ett-en Rose älskar Soda kan lock innehavaren

Detta är den ultimata presenten till dem som är i kärlek eller vill vara kär. Sin enkelhet får du cool poängoch ett datum om du inte har en valentine. Om du gör emellertid, kommer att hon älska din enkelhet och uppfinningsrikedom allt i ett.När Rosen...

Controll lysdioder med en Arduino från ett C# programmet

har du någonsin velat styra några lysdioder med din Arduino från ett program som du har skrivit? Tja är jag här att hjälpa dig med just detta. Detta är min första "kan så plz hjälpa mig ute om jag röra upp längs vägen. Och gärna lägga på och ändra ko...

Världens bästa allt-i-ett frukost

Efter noggrant övervägande bestämde jag mig att sätta den bästa någonsin allt-i-ett frukosten på instructables! Och efter mycket experimentera med matlagning (jag kan bara laga ägg!) Jag bestämde mig för att jag hittade det bästa receptet för en allt...

Driva din Arduino/AVR med ett Hand-Cranked batteri

om du någonsin velat driva din Arduino eller AVR från ett batteri för utveckling testning (batterierna har olika makt leverans kvaliteter än, säg, transformerad AC eller ens en reglerad vägg vårta i DC) testning men var trötta för att gå igenom batte...

Allt-i-ett solar Home Entertainment

det började ungefär ett år sedan på jobbet när min chef gick till kasta ut en perfekt bra batteribox av plast från sin bil. Jag tog hem och satt i garaget ett tag tills en dag mina två döttrar började slåss över en iPod-laddare. Sådant dagens moderna...

Allt-i-ett Outdoor ugn, spis, Grill och rökare

/ * formatmallsdefinitioner * / bord. MsoNormalTable {mso-stil-namn: "Tabell Normal"; mso-tstyle-rowband-storlek: 0; mso-tstyle-colband-storlek: 0; mso-stil-noshow:yes; mso-stil-förälder: ""; MSO-stoppning-alt: 0 i 5.4pt 0 i 5.4pt; MSO...

Ice Cream & sallad Scooper allt i ett!

Ibland har vi svårt att ösa glass jättefort, så vi har byggt en förbättrad ice scream scooper som faktiskt gör det lättare att skopa glass snabbt! Vi har också bildat en sallad scooper / gripet eftersom vem skulle inte vilja få två saker i ett! Det ä...

Allt-i-ett kid's Bee jacka & slöja

Det slutliga målet för våra hemman är att vara så nära självgående som möjligt. Vi är fortfarande långt borta, så när vi kan, vi försöker införa arter att utföra flera uppgifter eller att dra på andra djurart i vår näringsväv. Bin är ett perfekt exem...