LED Kreis (12 LED´s)

Hallo zusammen,

habe heute den ganzen Tag an einer neue Idee gelötet und gebastelt. Nun komm ich zu (für mich eher ungünstigeren Part da anfänger) an die Programmierung.

Ich habe 12 LED´s im Kreis angeordnet, wie eine Uhr. Nun will ich die LED´s im Kreis nacheinander aufleuchten lassen. Also wenn die eine LED an war, soll die nächste angehen und die vorige LED dann natürlich aus. So soll jede LED an und aus gehen bis die "Uhr" sozusagen einmal im Kreis gelaufen ist, und dieser Vorgang soll unendlich fortgeführt werden. Mir fehlt hier aber jeder Ansatz und im Internet finde ich nichts nützliches, hat jemand ne Idee?

Vielen Dank und Grüße
Jesús

http://arduino.cc/forum/index.php/topic,30535.0.html

Hallo,

danke fuer die schnelle antwort. Habe mir das mal angeschaut (nix gecheckt). Habe das auf mein Board gehauen, drehen tut sich im moment noch nichts, die frage ist für mich ob das für mein vorhaben nicht "too much" ist? Gibt es auch eine einfachere variante?

so wie hier: http://vimeo.com/13733907

Alle LED brauchen einen Vorwiderstand.

Eine Idee für den Sketch:

array LED[12]={2,3,4,5,6,7,8,9,10, 11, 12, 13 }  // die Pins wo die LED dran sind.

setup(){
alle PINs auf Ausgang setzen
alle PINs auf low setzen
}

loop()
for (int i=0; i<12; i++)
{
if (i==0)
{
digitalwrite(LED[11],LOW);
digitalwrite(LED[i],HIGH);
}
else
{
digitalwrite(LED[i-1],LOW);
digitalwrite(LED[i],HIGH);
}
delay (500);
 }

Grüße Uwe

Hi,

ich habe das gestern Abend noch folgendermaßen programmiert:

 int ledPin0 =  13;    // LED connected to gnd digital pin 13

int ledPin1 =  1; // LED connected to vcc for digital pin 13
int ledPin3 =  2;
int ledPin5 =  3;
int ledPin7 =  4;
int ledPin9 =  5;
int ledPin11 =  6;
int ledPin13 =  7;
int ledPin15 = 8;
int ledPin16 = 9;
int ledPin17 = 10;
int ledPin18 = 11;
int ledPin19 = 12;
int ledPin20 = 13;

int vcc = 255;
int gnd = 0;

int spd = 200;

// The setup() method runs once, when the sketch starts

void setup()   {
  // initialize the digital pin as an output:

}

// the loop() method runs over and over again,
// as long as the Arduino has power

void loop()
{
  pinMode(ledPin0, OUTPUT);
  pinMode(ledPin1, OUTPUT);
  digitalWrite(ledPin0, LOW);   // set common ground for row 1 (pin 13)
  digitalWrite(ledPin1, HIGH);    // set the vcc to turn on 1,1 (pin 9)
  delay(0);	    // wait for a second
  digitalWrite(ledPin1, LOW);   // set the gnd to turn off 1,1 (pin 9)
  delay(spd);

  pinMode(ledPin3, OUTPUT);
  digitalWrite(ledPin3, HIGH);    // set the vcc for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin3, LOW); //
  delay(spd);

  pinMode(ledPin5, OUTPUT);
  digitalWrite(ledPin5, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin5, LOW);
  delay(spd);

  pinMode(ledPin7, OUTPUT);
  digitalWrite(ledPin7, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin7, LOW);
  delay(spd);

  pinMode(ledPin9, OUTPUT);
  analogWrite(ledPin9, vcc);    // set the  for the LED
  delay(spd);	    // wait for a second
  analogWrite(ledPin9, gnd);
  delay(spd);

  pinMode(ledPin11, OUTPUT);
  digitalWrite(ledPin11, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin11, LOW);
  delay(spd);

  pinMode(ledPin13, OUTPUT);
  digitalWrite(ledPin13, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin13, LOW);
  delay(spd);

  pinMode(ledPin15, OUTPUT);
  digitalWrite(ledPin15, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin15, LOW);
  delay(spd);
  
    pinMode(ledPin16, OUTPUT);
  digitalWrite(ledPin16, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin16, LOW);
  delay(spd);
  
    pinMode(ledPin17, OUTPUT);
  digitalWrite(ledPin17, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin17, LOW);
  delay(spd);

  pinMode(ledPin18, OUTPUT);
  digitalWrite(ledPin18, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin18, LOW);
  delay(spd);
  
    pinMode(ledPin19, OUTPUT);
  digitalWrite(ledPin19, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin19, LOW);
  delay(spd);
  
      pinMode(ledPin20, OUTPUT);
  digitalWrite(ledPin20, HIGH);    // set the Ground for the LED
  delay(spd);	    // wait for a second
  digitalWrite(ledPin20, LOW);
  delay(0);
}

Wobei ich mir fast sicher bin das man den Code abspecken kann, nur weiss ich nicht wie.
Einen Vorwiederstand benutze ich derzeit keinen, braucht jede LED einen? Und wenn ja wie errechnet sich dieser?

Ob die LEDs (nicht LED's) im Kreis oder hintereinander angeordnet sind ist für die Programmierung egal. Wie man mit 20 LEDs sowas hinbekommt findest Du in allen Varianten auf meiner Webseite. Abspecken auf 12 LEDs sollte ziemlich einfach sein. http://blog.blinkenlight.net/. Im Prinzip willst Du sowas wie das Knight Rider Beispiel ohne Richtungswechsel.

Hi,

habe jetzt einen Potentiometer angeschlossen um die Geschwindigkeit der Drehung zu steuern, jedoch fällt auf, das sich die Geschwindigkeit nach dem verstellen am Poti sehr stark verzögert. Also 2-3 Sekunden nach dem regeln am Poti ist die Veränderung bemerkbar, was kann ich tun um das zu verhindern oder zu minimieren?

int ledPin0 =  13;    // LED connected to gnd digital pin 13
int potPin = 0; // Fader Eingang an A0
int val = 0; // Variabel für Faderwert

int ledPin1 =  1; // LED connected to vcc for digital pin 13
int ledPin3 =  2;
int ledPin5 =  3;
int ledPin7 =  4;
int ledPin9 =  5;
int ledPin11 =  6;
int ledPin13 =  7;
int ledPin15 = 8;
int ledPin16 = 9;
int ledPin17 = 10;
int ledPin18 = 11;
int ledPin19 = 12;
int ledPin20 = 13;

int vcc = 255;
int gnd = 0;


// The setup() method runs once, when the sketch starts

void setup()   {
  // initialize the digital pin as an output:

}

// the loop() method runs over and over again,
// as long as the Arduino has power

void loop()
{
  val = analogRead(potPin);    // read the value from the sensor
  pinMode(ledPin0, OUTPUT);
  pinMode(ledPin1, OUTPUT);
  digitalWrite(ledPin0, LOW);   // set common ground for row 1 (pin 13)
  digitalWrite(ledPin1, HIGH);    // set the vcc to turn on 1,1 (pin 9)
  delay(0);	    // wait for a second
  digitalWrite(ledPin1, LOW);   // set the gnd to turn off 1,1 (pin 9)
  delay(val);

  pinMode(ledPin3, OUTPUT);
  digitalWrite(ledPin3, HIGH);    // set the vcc for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin3, LOW); //
  delay(val);

  pinMode(ledPin5, OUTPUT);
  digitalWrite(ledPin5, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin5, LOW);
  delay(val);

  pinMode(ledPin7, OUTPUT);
  digitalWrite(ledPin7, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin7, LOW);
  delay(val);

  pinMode(ledPin9, OUTPUT);
  analogWrite(ledPin9, vcc);    // set the  for the LED
  delay(val);	    // wait for a second
  analogWrite(ledPin9, gnd);
  delay(val);

  pinMode(ledPin11, OUTPUT);
  digitalWrite(ledPin11, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin11, LOW);
  delay(val);

  pinMode(ledPin13, OUTPUT);
  digitalWrite(ledPin13, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin13, LOW);
  delay(val);

  pinMode(ledPin15, OUTPUT);
  digitalWrite(ledPin15, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin15, LOW);
  delay(val);
  
    pinMode(ledPin16, OUTPUT);
  digitalWrite(ledPin16, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin16, LOW);
  delay(val);
  
    pinMode(ledPin17, OUTPUT);
  digitalWrite(ledPin17, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin17, LOW);
  delay(val);

  pinMode(ledPin18, OUTPUT);
  digitalWrite(ledPin18, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin18, LOW);
  delay(val);
  
    pinMode(ledPin19, OUTPUT);
  digitalWrite(ledPin19, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin19, LOW);
  delay(val);
  
      pinMode(ledPin20, OUTPUT);
  digitalWrite(ledPin20, HIGH);    // set the Ground for the LED
  delay(val);	    // wait for a second
  digitalWrite(ledPin20, LOW);
  delay(0);
}

Gib's zu: du hast keine Ahnung, was du gerade eigentlich tust.

Dass das Poti verzögert wird ist irgentwie klar, wenn er einmal den Wert einließt und dann 12(!) LEDs nacheinander inklusive dem Delay (12x eingestellte Zeit) abspulen muss, bevor er es wieder einließt.

hahaha ja das sage ich doch die ganze Zeit. Ich bin voll der Grünschnabel. :grin:

Ja das es daran liegt, habe ich mir schon gedacht, die Frage ist ob ich das irgendwie umgehen kann?

Ich könnte auch bei jeder LED den Wert auslesen, oder?

12 Leds sollen gesteuert werden, es sind aber 14 Ledpins definiert !

WIe den nun ?

Stimmt, das ist mir nicht aufgefallen...das prüfe ich ma schnell...!

Eine kleine Adaption von Uwe seinem Sketch !

byte LED_pin[12]={2,3,4,5,6,7,8,9,10, 11, 12, 13 };  // Die digital Pins wo die LED dran sind.
byte LED_Nr;
int potPin = 0; // Fader Eingang an A0
int val = 0;    // Variabel für Faderwert


void setup(){
  for (LED_Nr = 0; LED_Nr <= 11; LED_Nr++)
  {
     pinMode(LED_pin[LED_Nr], OUTPUT);   // Alle PINs auf Ausgang setzen
     digitalWrite(LED_pin[LED_Nr], LOW); // Alle PINs auf low setzen
  }
}

void loop()
{
   for (LED_Nr = 0; LED_Nr <= 11; LED_Nr++)
   {
      val = analogRead(potPin); 
      if (LED_Nr == 0)
      {
         digitalWrite(LED_pin[11], LOW);
         digitalWrite(LED_pin[LED_Nr], HIGH);
      }
      else
         {
            digitalWrite(LED_pin[LED_Nr - 1], LOW);
            digitalWrite(LED_pin[LED_Nr], HIGH);
         }
      delay(val);
   }
}

Allerdings ungetestet, da ich die Schaltung nicht aufgebaut habe !

Hmmmm....ich bin zwar froh das das funktioniert, jedoch überwiegt bei mir gerade die ratlosigkeit wenn ich beide codes vergleiche. Meine ist ganz klar länger, schlechter und "dümmer"... :roll_eyes:

Denk einfach weiter über den Unterschied beider Sketches nach, die Erkenntnis wird noch kommen.

Dein Sketch ist zwar länger, weil nun die Aktionen für die einzelnen Leds in einer Schleife gepackt sind.

Allerdings ist dein Sketch nicht schlechter oder dümmer, er ist nur einfacher struktuiert.

Halt so wie man es bei seinen ersten Programmierversuchen macht, schlicht und einfach !

Und so ohne delay():

byte LED_pin[12] = {2,3,4,5,6,7,8,9,10, 11, 12, 13 };  // Die digital Pins wo die LED dran sind.
byte LED_Nr;
byte LED_Last_Nr;
int potPin = 0; // Fader Eingang an A0
int val = 0;    // Variabel für Faderwert
unsigned long lastTime;


void setup()
{
  for (LED_Nr = 0; LED_Nr <= 11; LED_Nr++)
  {
    pinMode(LED_pin[LED_Nr], OUTPUT);   // Alle PINs auf Ausgang setzen
    digitalWrite(LED_pin[LED_Nr], LOW); // Alle PINs auf low setzen
  }
  LED_Nr = 0;
  LED_Last_Nr = 11;
  lastTime = millis();
}

void loop()
{
  val = analogRead(potPin); 
  if (millis() - lastTime > val)
  {
    digitalWrite(LED_pin[LED_Last_Nr], LOW);
    digitalWrite(LED_pin[LED_Nr], HIGH);
    LED_Last_Nr = LED_Nr;
    LED_Nr = ++LED_Nr % 12;
    lastTime = millis();
  }
}

Okay für heute ist meine Birne voll, ich sehe nur kKlammern und Befehle vor meinen augen. Der beste Stoff um mir den Schlaf zu rauben. :slight_smile:

Ich bedanke mich recht herzlich für eure Hilfe, morgen poste ich meine Erleuchtung.

N8

Okay habe den Code noch nicht ganz geschnallt, aber ich komme langsam dahinter....danke fr eure Hilfe.

Nun komm ich zum eher schwierugen Teil des ganzen, ich habe eine Box ans Arduino angeschlossen und will das bei jedem Aufleuchten einer LED ein Ton aus der Box kommt. Es soll am Ende ein spezieller Metronom werden für Flamenco Gitarre, der Grund warum ich das baue ist weil es ein solches Metronom für 270€ gibt, aber wer soll das bezahlen???

Hat jemand einen Ansatz, ich habe in den Arduino Tutorials auf jedenfall gesehen das man eine Box anschliessen kann und das auch ausprobiert, jedoch weiss ich nicht wie ich im von euch genannten Code das trigger signal setzen muss damit bei jedem Aufleuchten ein Ton kommt. :frowning:

Es soll nur ein Ton ausgegeben werden, ich brauche da keine super Melodie, ein Ton reicht.

Ich weiss ich verlange viel, aber ich habe keinen Plan und weiss net wie ich anfangen soll...

Grüße
AK-NAK47

Schau dir mal das an:
http://arduino.cc/en/Reference/Tone
Ich weiß nicht ob das so einfach geht.
Könnte mir vorstellen das solange der Ton läuft die Abarbeitung des Sketchs stoppt.
Vielleicht wenn der Ton extrem kurz ist.

Einsetzen müsstest du es an der stelle wo die LEDs ein bzw aus geschaltet werden.

Wenn ich mich nicht irre

Hi,

der Ton muss auch nur ganz kurz kommen, also nicht länger als die LED leuchtet.
Ich schau mal schnell in den Link, moment...!

Ja so in etwa sollte es gehen wie die das beschreiben, jedoch bin ich mir nicht im klaren wie ich das einbinden muss und ob ich einen "Untersketch" für den Ton machen muss?