Hur man gör en Arduino-kontrollerade cykel-ljus (6 / 7 steg)
Steg 6: Att utvidga koden
Koden visas här bör alla vara ganska enkelt om du har någon kännedom om koden.
Enkel metod för att aktivera alla lysdioder
void allOn() {
int i;
för (jag = 0; jag < NUMBER_OF_LEDS; i ++) {
digitalWrite (ledList [i], hög);
ledsOn [i] = 1;
}
}
Enkel metod för att inaktivera alla lysdioder
void allOff() {
int i;
för (jag = 0; jag < NUMBER_OF_LEDS; i ++) {
digitalWrite (ledList [i], låg);
ledsOn [i] = 0;
}
}
hjälpare funktion att sammanfatta en matris
int summering (int array[]) {
int summa = 0;
int längd = sizeof(array)/sizeof(int);
int i;
för (jag = 0; jag < längd; i ++) {
summa = summa + array [i];
}
returnera summan;
}
blinkar alla lysdioder. Om mer än 2 lysdioder för närvarande på startar cykeln stänger av dem alla
annars börjar cykeln genom att vrida dem alla på.
void allFlashing (int delayLength) {
om (summation(ledsOn) > 2) {
allOff();
Delay(delayLength);
allOn();
Delay(delayLength);
} annat {
allOn();
Delay(delayLength);
allOff();
Delay(delayLength);
}
}
en metod som används inte faktiskt, men kan vara användbara i framtiden. Denna metod kommer att växla beroende på vilket som LED är för närvarande
utvalda.
void toggleCurrentLed() {
om (ledsOn [currentLed] == 1) {
digitalWrite (ledList [currentLed], låg);
ledsOn [currentLed] = 0;
} else om (ledsOn [currentLed] == 0) {
digitalWrite (ledList [currentLed], hög);
ledsOn [currentLed] = 1;
}
}
vänder på nuvarande LED
void currentLedOn() {
digitalWrite (ledList [currentLed], hög);
ledsOn [currentLed] = 1;
}
stänger av den nuvarande LED
void currentLedOff() {
digitalWrite (ledList [currentLed], låg);
ledsOn [currentLed] = 0;
}
Detta är en studsande metod som verkar skicka ett ljus upp och ner
dina lampor. Ganska coolt om du frågar mig. Håller reda på en riktning variabel
och vad den nuvarande Led som lyser är att se till att switchen är alltid i den
rätt riktning.
void bounce (int delayLength) {
om (bounceDirection == 0) {
om (currentLed < NUMBER_OF_LEDS - 1) {
currentLedOff();
currentLed ++;
currentLedOn();
Delay(delayLength);
} else om (currentLed == NUMBER_OF_LEDS - 1) {
currentLedOff();
currentLed--;
bounceDirection = 1;
currentLedOn();
Delay(delayLength);
}
} else om (bounceDirection == 1) {
om (currentLed > 0) {
currentLedOff();
currentLed--;
currentLedOn();
Delay(delayLength);
} else om (currentLed == 0) {
currentLedOff();
currentLed ++;
currentLedOn();
bounceDirection = 0;
Delay(delayLength);
}
}
}
Denna metod är för närvarande tänkt att få dimmer som omgivningarna få dimmer.
Anledningen till detta är främst att minska inblandning, som i bakbord ställa in
ljuset från lamporna är mycket lätt att se av fotomotstånd, vilket skulle leda till
några konstiga beteende.
Dessa konstanter bör ändra lite för din specifika krets. Använd funktionen
Serial.println(analogRead(photoresistor)); att skriva ut det aktuella värdet, och
fastställa ungefärlig maxkapacitet och minimum.
void allFading() {
int ljusstyrka = map(analogRead(photoresistor), 100, 450, 0, 255);
int i;
för (jag = 0; jag < NUMBER_OF_LEDS; i ++) {
analogWrite (ledList [i], ljusstyrka);
}
}
Denna metod gör cykel ljuset till en mätenhet för ljusintensitet.
De lysdioder som lyser upp i en viss punkt är vägledande för hur ljust det är.
Konstanterna visas vanligtvis täcker standardrum alla 5 LED belysning
Dessa konstanter bör ändra lite för din specifika krets. Använd funktionen
Serial.println(analogRead(photoresistor)); att skriva ut det aktuella värdet, och
fastställa ungefärlig maxkapacitet och minimum.
void photometer() {
int ljusstyrka = map(analogRead(photoresistor), 75, 450, 0, NUMBER_OF_LEDS);
int i;
för (jag = 0; jag < NUMBER_OF_LEDS; i ++) {
om (jag < ljusstyrka) {
digitalWrite (ledList [i], hög);
} annat {
digitalWrite (ledList [i], låg);
}
}
}
void loop() {
om (currentProgram == 0) {
allOff();
} else om (currentProgram == 1) {
allOn();
} else om (currentProgram == 2) {
allFlashing(250);
} else om (currentProgram == 3) {
Bounce(100);
} else om (currentProgram == 4) {
allFading();
} else om (currentProgram == 5) {
photometer();
}
}