Nybörjare Arduino (7 / 15 steg)
Steg 7: Blekna lysdioder med AnalogWrite
Ibland vi vill styra ljusstyrkan av en LED, i så fall kan vi använda ett kommando som kallas analogWrite(). analogWrite fungerar genom att vrida en LED på och av mycket snabbt, så snabbt att våra ögon inte uppfattar flimmer. Om en LED tillbringar halva sin ledighet och hälften av sin tid på, att så de visas hälften så ljusa. Denna teknik kallas puls bredd modulering (PWM), det används om och om igen i elektronik eftersom det tillåter oss att styra en komponent i en "analog" sätt med hjälp av en digital pin. Inte alla digitala stift på Arduino kan göra PWM, om du tittar noga på din Arduino, ser du att vissa stift har en "~" bredvid dem (stift 3, 5, 6, 9, 10, 11), dessa är PWM aktiverat stift.Binda upp en av dina LEDs till en PWM aktiverat pin använde jag stift 9. Försök att köra blink skissen från förr, men Använd analogWrite istället för digitalWrite för att vända på LED (se skiss nedan). analogWrite() tar två argument: pin-kod och nivån på ljusstyrkan (mellan 0 och 255).
LED blinkar (halv ljusstyrka)
int ledPin = 9; //the Arduino stift som är ansluten till LED
void setup() {
pinMode (ledPin, produktionen); / / initiera PIN-koden som en utgång
}
void loop() {
analogWrite (ledPin, 255); //turn ledde på på full ljusstyrka (255/255 = 1)
Delay(1000); / / vänta på 1000 millisekunder (en sekund)
digitalWrite (ledPin, låg); //turn LED av
fördröjning (1000); //wait en sekund
analogWrite (ledPin, 191); //turn ledde på på 3/4 ljusstyrka (191/255 ~ = 0,75)
Delay(1000); / / vänta på 1000 millisekunder (en sekund)
digitalWrite (ledPin, låg); //turn LED av
fördröjning (1000); //wait en sekund
analogWrite (ledPin, 127); //turn ledde på på halv ljusstyrka (127/255 ~ = 0,5)
Delay(1000); / / vänta på 1000 millisekunder (en sekund)
digitalWrite (ledPin, låg); //turn LED av
fördröjning (1000); //wait en sekund
analogWrite (ledPin, 63); //turn ledde på på en fjärdedel ljusstyrka (63/255 ~ = 0,25)
Delay(1000); / / vänta på 1000 millisekunder (en sekund)
digitalWrite (ledPin, låg); //turn LED av
fördröjning (1000); //wait en sekund
}
Prova att ändra ljusstyrkan i analogWrite kommandon att se hur det påverkar ljusstyrkan på din LED.
Nästa ska vi skriva koden så att ljusstyrkan ramper smidigt från hela vägen upp till full ljusstyrka. Vi kunde kopiera samma bit kod:
analogWrite (ledPin, ljusstyrka);
fördröjning (5), //short dröjsmål
ljusstyrka = ljusstyrka + 1;
Om och om igen (255 gånger), ökande ljusstyrka av en varje gång. Här är vad det skulle se ut:
LED blinkar (halv ljusstyrka)
int ledPin = 9; //the Arduino stift som är ansluten till LED
void setup() {
pinMode (ledPin, produktionen); / / initiera PIN-koden som en utgång
}
void loop() {
int ljusstyrka = 0;
analogWrite (ledPin, ljusstyrka), //brightness = 0
Delay(5); / / kort fördröjning
ljusstyrka + = 1;
analogWrite (ledPin, ljusstyrka), //brightness = 1
Delay(5); / / kort fördröjning
ljusstyrka + = 1;
analogWrite (ledPin, ljusstyrka), //brightness = 2
Delay(5); / / kort fördröjning
ljusstyrka + = 1;
analogWrite (ledPin, ljusstyrka), //brightness = 3
Delay(5); / / kort fördröjning
ljusstyrka + = 1;
analogWrite (ledPin, ljusstyrka), //brightness = 4
Delay(5); / / kort fördröjning
ljusstyrka + = 1;
analogWrite (ledPin, ljusstyrka); //brightness = 5
Delay(5); / / kort fördröjning
ljusstyrka + = 1;
analogWrite (ledPin, ljusstyrka); //brightness = 6
Delay(5); / / kort fördröjning
ljusstyrka + = 1;
hålla upprepa tills ljusstyrka = 255 (full ljusstyrka)
}
Eller kan vi använda en for-loop igen att göra koden mer koncis. Jag har två öglor, första ramperna LED upp från utanför (0) till full brightness(255) i följande skiss:
för (int ljusstyrka = 0; ljusstyrka < 256; ljusstyrka ++) {
analogWrite(ledPin,brightness);
Delay(5);
}Den andra för loop ramper ner från full ljusstyrka på off:
för (int ljusstyrka = 255, ljusstyrka > = 0; ljusstyrka--) {
analogWrite(ledPin,brightness);
Delay(5);
}
(delay(5) används för att bromsa vissna, så tar det 5 * 256 = 1280ms = 1.28seconds)
I den första raden, använder vi "brightness--" för att berätta det för loop minska värdet för ljusstyrka med 1 varje gång loopen upprepas. Lägg också märke till hur slingan kommer att pågå till ljusstyrka > = 0, med hjälp av > = istället för > vi ta siffran 0 i området.
LED fade
int ledPin = 9; //the Arduino stift som är ansluten till LED
void setup() {
pinMode (ledPin, produktionen); / / initiera PIN-koden som en utgång
}
void loop() {
ramp ledde till full ljusstyrka (0 till 255)
för (int ljusstyrka = 0; ljusstyrka < 256; ljusstyrka ++) {
analogWrite(ledPin,brightness);
Delay(5);
}
Delay(1000); / / vänta en sekund
ramp ledde ner till ingen ljusstyrka (255 till 0)
för (int ljusstyrka = 255, ljusstyrka > = 0; ljusstyrka--) {
analogWrite(ledPin,brightness);
Delay(5);
}
fördröjning (1000); //wait en sekund
}
Och här är hur det ska se ut (denna simulering är inte riktigt lika bra, men du får idén). Försök redigera förseningar för att se hur det påverkar hastigheten på ramperna.