Go Down

Topic: ? hat jemand das Buch: Arduino Schaltungsprojekte für Profis ?? (Read 751 times) previous topic - next topic

hannes77

Hallo,

bin gerade oben genanntes Buch am lesen, und die Beispiele am ausprobieren bzw. versuche zu verstehen wie das ganze funktioniert.
Falls jemand auch das Buch hat, und die Übungen auf Seite 57 schon gemacht hat.
Bitte helft mir mal auf die Sprünge wie das mit den zwei LED´s funktionieren soll.

Für alle die das Buch nicht haben, poste ich mal hier das Listing:
// LED Chaser

byte ledPin[] = {2,3,4,5,6,7,8,9,10,11};
int direction = 1;
int LED= 0;
void setup()
{// all LED pins as outputs and LEDs off
    for (int x=0; x<10; x++)
    { pinMode(ledPin
  • , OUTPUT);
        digitalWrite(ledPin
  • , LOW);
        }
    }

    void loop()
    { // turn on current LED
        digitalWrite(ledPin[LED], HIGH);
       
        delay(150);
        // turn off current LED
        digitalWrite (ledPin[LED], LOW);
        digitalWrite (ledPin[LED2], LOW);
        LED += direction;
       
        //change direction if we reach the end
        if (LED == 9) {direction = -1;}
        if (LED == 0) {direction = 1;}
    }
    die Aufgabe lautet:
    lassen sie statt einem einzelnen Lichtpunkt jeweils zwei LEDs direkt nebeneinander pendeln.

    Ich verstehe die Funktion des Programmes, und auch was es bewirkt, aber ich stehe auf dem Schlauch wie ich das mit den zwei LEDs hinbekommen soll....

michael__k

#1
Jan 04, 2013, 01:09 am Last Edit: Jan 04, 2013, 11:04 am by michael__k Reason: 1
Hallo!
Ich hab das Buch zusammen mit einem Arduino UNO zu Weihnachten bekommen und hab diese Übung schon gemacht.
Ich hab es so gelöst, dass wenn die leds von led 1 nach led 6 laufen immer die die nächst led auch mit aktiv ist und beim herunterlaufen ist immer die vorherige led mit aktiv.

Hier ist der Code:
Code: [Select]

byte ledPin[] = {2,3,4,5,6,7}; // ich hab nur 6 leds verwendet
int direction = 1;
int led = 0;
int i;

void setup()
{
  //all led pins as outputs and LEDs off
  for(i=0;i<=6;i++)
  {
    pinMode(ledPin[i],OUTPUT);
    digitalWrite(ledPin[i],LOW);
  }
}

void loop()
{
    //turn on current LED
    digitalWrite(ledPin[led],HIGH);
    digitalWrite(ledPin[led+1],HIGH);
    delay(1000);
    digitalWrite(ledPin[led],LOW);
    digitalWrite(ledPin[led+1],LOW);
    led += direction;

    if((led+2)==6) //da ich es nur mit 6 leds gemacht hab musst du die Zahle 6 hier ersetzen
      direction=-1;
     
    if(led==0)
      direction=1;
}


Hoffe ich konnte dir helfen.

mfg
Michael

MueThoS

Hmm,
bin ja selber noch nicht so bewandert aber das funktioniert?

Bei:
Code: [Select]
for(i=0;i<=6;i++)
  {
    pinMode(ledPin[led],OUTPUT);
    digitalWrite(ledPin[led],LOW);
  }

[led] wird hier doch garnicht durch gegangen sondern i

Bei Hannes:
Code: [Select]
for (int x=0; x<10; x++)
    { pinMode(ledPin
, OUTPUT);
    digitalWrite(ledPin
, LOW);
    }

Fehlt das [] gänzlich.

Bei Michael:
Code: [Select]
if((led1+2)==6)
led1 ist nirgens declariert und ändert sich auch nie

Bei Hannes:
Code: [Select]
digitalWrite (ledPin[LED2], LOW);
Hier ist LED2 nicht declariert und wird auch nie gesetzt

Hannes bitte die Code-Tags # verwenden.

Das ist zwar nicht die Lösung sind aber die Dinge die mir aufgefallen sind.
Ich hoffe ich liege da richtig

michael__k

#3
Jan 04, 2013, 11:02 am Last Edit: Jan 04, 2013, 11:06 am by michael__k Reason: 1
Ja. Da sind einige Fehler. Tut mir leid bevor ich fen Code hochgeladen hab hab ich ihn noch verändert und dann nicht mehr durchgelesen. Ich glaub es war 2 Uhr Früh.
Hab das jetzt bei meinen vorherigen Post geändert.
mfg
Michael

hannes77

danke schonmal für die schnellen Antworten,
werde es heute abend mal ausprobieren.

Go Up