En blinkande lysdiod är kanske inte det mest spännande, men om man kan få den att pulsera istället vore det lite mer intressant. Gör kopplingen enligt nedan. I koden använder vi oss av en for-loop för att gradvis öka lysdiodens ljusstyrka och när vi nått max så använder vi en ny loop som sänker ljusstyrkan gradvis igen.
Kopplingen
Analoga värden i en digital värld
För att blinka med lysioden använde vi digitalWrite(), men med den funktionen kan vi bara ställa utgången till antingen 0 volt eller full matningsspänning dvs 5 volt. För att kunna ställa ljusstyrkan kan vi istället använda oss av analogWrite() som gör det möjligt att sätta en utgång till att till synes ge ut valfri spänning mellan 0 och 5 volt i 256 steg. Det är viktigt att notera att Arduino egentligen inte kan ge ut något annat än digtala signaler, dvs 0 eller 5 volt, men genom att snabbt pulsera utgången så kommer det att se ut som att man får ut en annan spänning. Detta kallas PWM – Pulse Width Modulation, eller pulsbreddsmodulering på svenska. För det här projektet med vår lysdiod spelar det ingen roll att strömmen pulserar eftersom pulserna är för snabba för våra ögon att se. Detsamma gäller om man vill styra en motor – pulserna är för snabba för att motorn ska vibrera utan kommer istället att rotera med en hastighet som motsvarar pulserna. Däremot finns det tillfällen när detta inte kommer att fungera så det är viktigt att undersöka om det man kopplar in till Arduino-kortet verkligen klarar av PWM-signaler eller kräver en riktig analog signal. För att skapa en riktig analog signal krävs en speciell krets eller modul som logiskt nog kallas ”digital-till-analog omvandlare” eller DAC (Digital to Analog Converter).
Koden
void setup() {
// Ställ om pinne 2 till till att vara en utgång.
pinMode(2, OUTPUT);
}
void loop() {
// Öka ljusstyrkan på lysdioden från helt släckt till helt tänd
for (int i = 0; i < 255; i++) {
// Ställ in lysdiodens ljusstyrka
analogWrite(2, i);
// Vänta 10ms
delay(10);
}
// Minska ljusstyrkan på lysdioden från helt tänd till helt släckt
for (int i = 255; i > 0; i--) {
// Ställ in lysdiodens ljusstyrka
analogWrite(2, i);
// Vänta 10ms
delay(10);
}
}