Arduino: Input styr produktionen (3 / 4 steg)
Steg 3: Skriva koden
Med hjälp av Arduino IDE skapa en ny skiss.
Innan funktionen setup(), deklarera variabler för den analoga pin ansluten till fotomotstånd och digital pin ansluten till LED.
Fotomotstånd Pin
int analogPin = 0;
LED stift
int ledPin = 9;
För denna firmware behöver du inte sätta något i installationsmetoden. Normalt skulle du deklarera digital PIN-koden som utdata med funktionen pinMode(), men vi kommer att använda funktionen analogWrite() som inte kräver PIN-koden ska deklareras som utgång.
Funktionen loop() kommer du börja med behandlingen i ljusnivån från fotomotstånd använder samma kod från den sista lektionen.
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
läsa raw-data kommer in på analoga pin 0:
int lightLevel = analogRead(analogPin);
}
Härnäst kommer du konvertera inkommande ljusnivån till rätt intervall för LED. För att göra detta använder du två nya funktioner - map() och constrain().
Funktionen karta har fem indataargument - värdet, ett lågt värde och ett högt värde från det nuvarande utbudet, och ett lågt värde och ett högt värde för målintervallet.
int val = karta (värde, fromLow, fromHigh, toLow, laboratoriumtohighkobolt);
Allt detta gör är mappa ett värde från en rad till motsvarande värde i ett annat område. Till exempel karta (25, 50, 100, 0, 0) skulle återvända 50 (50 är motsvarande inom 0-100 utbud till 25 inom intervallet 0-50). I den här lektionen ska du mappa lightLevel (en 0-1023 utbud) till ett PWM (0-255). Ett annat sätt att accompishing samma mål i detta fall skulle vara att dela upp det lightLevel värdet av 4 (0-255 är den fjärde av 0-1023), men om du gjorde det, du skulle inte få lära sig funktionen map(). Dessutom, eftersom du inte vill att din nattlampan vara på när det finns lite ljus (t.ex. svagt ljus) kommer du att ändra intervallet lightLevel. Till exempel i mitt kontor lightLevel värdet är omkring 340 när lamporna är tända (det är inte ett mycket ljust kontor). Jag skulle vilja behandla detta som om det finns tillräckligt med ljus för att lampan inte tändas, så jag inte bränner LED när lamporna är tända. Det gör karta jag lightLevel spänna som 350-1023.
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
läsa raw-data kommer in på analoga pin 0:
int lightLevel = analogRead(analogPin);
mappa om värdet från det analoga stiftet till en mindre yta
Experimentera med den högra fromLow baserat på din miljö
int ljusstyrka = karta (lightLevel, 350, 1023, 0, 255);
}
Kommer ni att experimentera med detta för att hitta det bästa sortiment att använda (kom ihåg, seriell bildskärmen från föregående lektion kan du hitta raw värdet kommer från fotomotstånd).
Mappning av lightLevel spänna med ett lågt värde som är högre än ett värde som du kan mata in kan resultera i ett negativt tal (t.ex. i mitt exempel, lightLevel kan vara 340 trots att jag identifierat den lägre delen av intervallet på 350). Du kan använda funktionen constrain() för att skydda mot ställa ljusstyrka till ett negativt tal.
Funktionen constrain() tar i tre indataargument - värdet, ett lågt värde och ett högt värde.
int val = begränsa (värde, lowValue, highValue);
Om värdet är mellan lowValue och highValue, kommer sedan värdet att returneras. Om värdet är lägre kommer lowValue, då lowValue att returneras. Om värdet är högre än highValue, sedan returneras highValue.
Med funktionen constrain() kan du se till att du inte ställa in ljusstyrka till ett dåligt värde. Nu när du har en bra ljusstyrka funktionen analogWrite() kan du ange PWM för LED stift. Ljusstyrka värdet 0 är en 0% intermittens (off) och en ljusstyrka på 127 är en 50% intermittens, etc.
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
läsa raw-data kommer in på analoga pin 0:
int lightLevel = analogRead(analogPin);
mappa om värdet från det analoga stiftet till en mindre yta
Experimentera med den högra fromLow baserat på din miljö
int ljusstyrka = karta (lightLevel, 350, 1023, 0, 255);
använda begränsa för att undvika negativa tal och/eller nummer ovanför hög spänna
ljusstyrka = begränsa (ljusstyrka, 0, 255);
använda analogWrite för att skicka PWM data (en fyrkantsvåg)
analogWrite (ledPin, ljusstyrka);
}