piątek, 29 marca
Shadow

Arduino – Knight Rider

Knight Rider czyli Nieustraszony serial z lat 1982–1986, kto wówczas nie chciał mieć takiego inteligentnego samochodu ? Kto nie zna charakterystycznego elementu tego samochodu czyli czerwonego pływającego światła z przodu. Dzięki układowi który opiszę będziecie mogli wykonać taki sam pasek LED we własnym domu. Co nam będzie potrzebne do wykonania wspomnianego układu ?

Potrzebne elementy:

  • Arduino np. uno lub nano,
  • diody LED czerwone,
  • rezystory 220Ω
  • płytka stykowa opcjonalnie

Zaczynamy od połączenia wszystkiego wg. schematu poniżej, diody podłączamy do wyjść Arduino (11,10,9,6,5,3) poprzez rezystor 220Ω, drugą nóżkę diody podłączamy do GND.

Schemat ideowy:

knight rider / nieustraszony schemat ideowy arduino
Kod programu:

// Pobrano z www.tranzystor.pl
int speedPin = 0;
int intenPin = 1;

#define NUMLIGHTS 6
int pins[NUMLIGHTS] = { 11, 10, 9, 6, 5, 3};

void setup()
{
int lightPin;

for (lightPin=0 ; lightPin < NUMLIGHTS ; lightPin++) {
pinMode(pins[lightPin], OUTPUT);
}
}

void loop()
{
static int pos = 0; // the position of the brightest light in the light array
static int direction = 1; // the direction the bright spot is travelling (1 or -1)
int light;
int speed = analogRead(speedPin); // how fast the light moves
int inten = analogRead(intenPin) >> 255; // read the value and divide by 4 to get range 0 .. 255

if (inten > 255) inten = 255;

for (light=0 ; light < NUMLIGHTS ; light++) {
if (light == pos) { // The light at this position is set bright
analogWrite(pins[light], inten);
} else if ( light == (pos+1) || light == (pos-1)) {
// This makes the two lights adjacent to the bright one glow at reduced intensity.
// It makes for a nicer effect
analogWrite(pins[light], inten>>4);
} else {
// Digital I/O pins 5 & 6 don’t seem to go dark if I do analogWrite(pins[light], 0)
// By doing digitalWrite it all looks correct
digitalWrite(pins[light], 0);
}
}

// move the light position
pos += direction;
// if we’ve reached the end, reverse directions
if (pos >= (NUMLIGHTS-1)) direction = -1;
if (pos <= 0) direction = 1;
delay(speed);
}

5/5 - (2 ocena/y)

1 Comment

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *


Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.