12 leds als kit heen en terug werkt

Arduino specifieke Software
Berichten: 203
Geregistreerd: 11 Mei 2014, 11:22

12 leds als kit heen en terug werkt

Berichtdoor vanschagen » 29 Jun 2014, 10:31

hallo
ik heb dus op arduino UNO 12 leds draait al KIT heen en terug,dat werkt prima met de code die ik heb
maar nu wil ik dat hij van 2 naar 7 gaat
en dan gelijk van 13 naar 8
en zo heen en weer.
alles geprobeerd wat in mijn vermogen ligt,maar krijg het niet goed
deze code van 12 werkt wel,hoe pas ik dat aan met wat ik wil
void setup() {
// set up pins 2 to 13 as outputs
for (int i = 2; i < 14; i++) {
pinMode(i, OUTPUT);
}
}

// function to switch all LEDs off
void allLEDsOff(void)
{
for (int i = 2; i < 14; i++) {
digitalWrite(i, LOW);
}
}

void loop() {
// move on LED to the right
for (int i = 2; i < 14; i++) {
allLEDsOff();
digitalWrite(i, HIGH);
delay(100);
}
// move on LED to the left
for (int i = 14; i > 2; i--) {
allLEDsOff();
digitalWrite(i, HIGH);
delay(100);
}
}

Advertisement

Berichten: 163
Geregistreerd: 15 Dec 2012, 21:02
Woonplaats: Delfzijl

Re: 12 leds als kit heen en terug werkt

Berichtdoor FPCUser » 29 Jun 2014, 17:06

Onderstaand een codevoorbeeld uit een experimenteerkit.
Speel hier eens mee en probeer de code te begrijpen.
De regels zijn dacht ik voldoende gedocumenteerd.

Als je begrijpt wat er gebeurd, kan jezelf wel een code maken voor 12 LED's die doet wat je wilt.

Code: Alles selecteren
/*     ---------------------------------------------------------
 *     |  Arduino Experimentation Kit Example Code             |
 *     |  CIRC-02 .: 8 LED Fun :. (Multiple LEDs)   |
 *     ---------------------------------------------------------
 * 
 *  A few Simple LED animations
 *
 * For more information on this circuit http://tinyurl.com/d2hrud
 *
 */
 
//LED Pin Variables
int ledPins[] = {2,3,4,5,6,7,8,9}; //An array to hold the pin each LED is connected to
                                   //i.e. LED #0 is connected to pin 2, LED #1, 3 and so on
                                   //to address an array use ledPins[0] this would equal 2
                                   //and ledPins[7] would equal 9
 
/*
 * setup() - this function runs once when you turn your Arduino on
 * We the three control pins to outputs
 */
void setup()
{
 
  //Set each pin connected to an LED to output mode (pulling high (on) or low (off)
  for(int i = 0; i < 8; i++){         //this is a loop and will repeat eight times
      pinMode(ledPins[i],OUTPUT); //we use this to set each LED pin to output
  }                                   //the code this replaces is below
 
  /* (commented code will not run)
   * these are the lines replaced by the for loop above they do exactly the
   * same thing the one above just uses less typing
  pinMode(ledPins[0],OUTPUT);
  pinMode(ledPins[1],OUTPUT);
  pinMode(ledPins[2],OUTPUT);
  pinMode(ledPins[3],OUTPUT);
  pinMode(ledPins[4],OUTPUT);
  pinMode(ledPins[5],OUTPUT);
  pinMode(ledPins[6],OUTPUT);
  pinMode(ledPins[7],OUTPUT);
  (end of commented code)*/
}
 
 
/*
 * loop() - this function will start after setup finishes and then repeat
 * we call a function called oneAfterAnother(). if you would like a different behaviour
 * uncomment (delete the two slashes) one of the other lines
 */
void loop()                     // run over and over again
{
  oneAfterAnotherNoLoop();   //this will turn on each LED one by one then turn each off
  //oneAfterAnotherLoop();   //does the same as oneAfterAnotherNoLoop but with
                             //much less typing
  //oneOnAtATime();          //this will turn one LED on then turn the next one
                             //on turning the
                             //former off (one LED will look like it is scrolling
                             //along the line
  //inAndOut();              //lights the two middle LEDs then moves them out then back
                             //in again
}
 
/*
 * oneAfterAnotherNoLoop() - Will light one LED then delay for delayTime then light
 * the next LED until all LEDs are on it will then turn them off one after another
 *
 * this does it without using a loop which makes for a lot of typing.
 * oneOnAtATimeLoop() does exactly the same thing with less typing
 */
void oneAfterAnotherNoLoop(){
  int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                       //make smaller for quicker switching and larger for slower
  digitalWrite(ledPins[0], HIGH);  //Turns on LED #0 (connected to pin 2 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[1], HIGH);  //Turns on LED #1 (connected to pin 3 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[2], HIGH);  //Turns on LED #2 (connected to pin 4 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[3], HIGH);  //Turns on LED #3 (connected to pin 5 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[4], HIGH);  //Turns on LED #4 (connected to pin 6 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[5], HIGH);  //Turns on LED #5 (connected to pin 7 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[6], HIGH);  //Turns on LED #6 (connected to pin 8 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[7], HIGH);  //Turns on LED #7 (connected to pin 9 )
  delay(delayTime);                //waits delayTime milliseconds 
 
//Turns Each LED Off
  digitalWrite(ledPins[7], LOW);  //Turns on LED #0 (connected to pin 2 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[6], LOW);  //Turns on LED #1 (connected to pin 3 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[5], LOW);  //Turns on LED #2 (connected to pin 4 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[4], LOW);  //Turns on LED #3 (connected to pin 5 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[3], LOW);  //Turns on LED #4 (connected to pin 6 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[2], LOW);  //Turns on LED #5 (connected to pin 7 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[1], LOW);  //Turns on LED #6 (connected to pin 8 )
  delay(delayTime);                //waits delayTime milliseconds
  digitalWrite(ledPins[0], LOW);  //Turns on LED #7 (connected to pin 9 )
  delay(delayTime);                //waits delayTime milliseconds 
}
 
/*
 * oneAfterAnotherLoop() - Will light one LED then delay for delayTime then light
 * the next LED until all LEDs are on it will then turn them off one after another
 *
 * this does it using a loop which makes for a lot less typing.
 * than oneOnAtATimeNoLoop() does exactly the same thing with less typing
 */
void oneAfterAnotherLoop(){
  int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                       //make smaller for quicker switching and larger for slower
 
//Turn Each LED on one after another
  for(int i = 0; i <= 7; i++){
    digitalWrite(ledPins[i], HIGH);  //Turns on LED #i each time this runs i
    delay(delayTime);                //gets one added to it so this will repeat
  }                                  //8 times the first time i will = 0 the final
                                     //time i will equal 7;
 
//Turn Each LED off one after another
  for(int i = 7; i >= 0; i--){  //same as above but rather than starting at 0 and counting up
                                //we start at seven and count down
    digitalWrite(ledPins[i], LOW);  //Turns off LED #i each time this runs i
    delay(delayTime);                //gets one subtracted from it so this will repeat
  }                                  //8 times the first time i will = 7 the final
                                     //time it will equal 0
                                     
                                     
}
 
/*
 * oneOnAtATime() - Will light one LED then the next turning off all the others
 */
void oneOnAtATime(){
  int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                       //make smaller for quicker switching and larger for slower
 
  for(int i = 0; i <= 7; i++){
    int offLED = i - 1;  //Calculate which LED was turned on last time through
    if(i == 0) {         //for i = 1 to 7 this is i minus 1 (i.e. if i = 2 we will
      offLED = 7;        //turn on LED 2 and off LED 1)
    }                    //however if i = 0 we don't want to turn of led -1 (doesn't exist)
                         //instead we turn off LED 7, (looping around)
    digitalWrite(ledPins[i], HIGH);     //turn on LED #i
    digitalWrite(ledPins[offLED], LOW); //turn off the LED we turned on last time
    delay(delayTime);
  }
}
 
/*
 * inAndOut() - This will turn on the two middle LEDs then the next two out
 * making an in and out look
 */
void inAndOut(){
  int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                       //make smaller for quicker switching and larger for slower
 
  //runs the LEDs out from the middle
  for(int i = 0; i <= 3; i++){
    int offLED = i - 1;  //Calculate which LED was turned on last time through
    if(i == 0) {         //for i = 1 to 7 this is i minus 1 (i.e. if i = 2 we will
      offLED = 3;        //turn on LED 2 and off LED 1)
    }                    //however if i = 0 we don't want to turn of led -1 (doesn't exist)
                         //instead we turn off LED 7, (looping around)
    int onLED1 = 3 - i;       //this is the first LED to go on ie. LED #3 when i = 0 and LED
                             //#0 when i = 3
    int onLED2 = 4 + i;       //this is the first LED to go on ie. LED #4 when i = 0 and LED
                             //#7 when i = 3
    int offLED1 = 3 - offLED; //turns off the LED we turned on last time
    int offLED2 = 4 + offLED; //turns off the LED we turned on last time
   
    digitalWrite(ledPins[onLED1], HIGH);
    digitalWrite(ledPins[onLED2], HIGH);   
    digitalWrite(ledPins[offLED1], LOW);   
    digitalWrite(ledPins[offLED2], LOW);       
    delay(delayTime);
  }
 
  //runs the LEDs into the middle
  for(int i = 3; i >= 0; i--){
    int offLED = i + 1;  //Calculate which LED was turned on last time through
    if(i == 3) {         //for i = 1 to 7 this is i minus 1 (i.e. if i = 2 we will
      offLED = 0;        //turn on LED 2 and off LED 1)
    }                    //however if i = 0 we don't want to turn of led -1 (doesn't exist)
                         //instead we turn off LED 7, (looping around)
    int onLED1 = 3 - i;       //this is the first LED to go on ie. LED #3 when i = 0 and LED
                             //#0 when i = 3
    int onLED2 = 4 + i;       //this is the first LED to go on ie. LED #4 when i = 0 and LED
                             //#7 when i = 3
    int offLED1 = 3 - offLED; //turns off the LED we turned on last time
    int offLED2 = 4 + offLED; //turns off the LED we turned on last time
   
    digitalWrite(ledPins[onLED1], HIGH);
    digitalWrite(ledPins[onLED2], HIGH);   
    digitalWrite(ledPins[offLED1], LOW);   
    digitalWrite(ledPins[offLED2], LOW);       
    delay(delayTime);
  }
}

Berichten: 20
Geregistreerd: 25 Jun 2014, 10:49

Re: 12 leds als kit heen en terug werkt

Berichtdoor Levi Z » 29 Jun 2014, 19:44

Zoiets?

Code: Alles selecteren
void loop(){
// move on LED to the right
for (int i = 2; i < 8; i++) {
allLEDsOff();
digitalWrite(i, HIGH);
delay(100);
}
// move on LED to the left
for (int i = 14; i > 7; i--) {
allLEDsOff();
digitalWrite(i, HIGH);
Delay(100);
}
}

Berichten: 203
Geregistreerd: 11 Mei 2014, 11:22

Re: 12 leds als kit heen en terug werkt

Berichtdoor vanschagen » 29 Jun 2014, 20:23

heel hartelijk dank
we gaan het proberen

Berichten: 4068
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: 12 leds als kit heen en terug werkt

Berichtdoor shooter » 29 Jun 2014, 20:37

Code: Alles selecteren
void setup() {
// set up pins 2 to 13 as outputs
for (int i = 2; i < 14; i++) {
pinMode(i, OUTPUT);
}
}

// function to switch all LEDs off
void allLEDsOff(void)
{
for (int i = 2; i < 14; i++)
{
digitalWrite(i, LOW);
}
}

void loop() {
// move on LED to the right
for (int i = 2; i < 14; i++) {
allLEDsOff(); // ipv kun je ook onder de delay de leds weer uitzetten
digitalWrite(i, HIGH);
digitalWrite(14-i,HIGH); // misschien een ander getal maar je snapt het wel denk ik gewoon led 14-2 is 12 wordt aangezet.
delay(100);
}
// move on LED to the left
for (int i = 14; i > 2; i--) {
allLEDsOff();
digitalWrite(i, HIGH);

digitalWrite(14-i,HIGH);
delay(100);
}
}
paul deelen
shooter@home.nl

Berichten: 203
Geregistreerd: 11 Mei 2014, 11:22

Re: 12 leds als kit heen en terug werkt

Berichtdoor vanschagen » 30 Jun 2014, 09:00

@Levi Z
gedaan wat je aangaf,is het zelfde effect,als de sketch die ik gaf
ik wil dus,dat beide helften van binnen naar buiten gaan,en zo heen en terug
maar bedankt

Berichten: 163
Geregistreerd: 15 Dec 2012, 21:02
Woonplaats: Delfzijl

Re: 12 leds als kit heen en terug werkt

Berichtdoor FPCUser » 30 Jun 2014, 10:50

Probeer dit eens...

Code: Alles selecteren
/*
  12 LED's, op pin 2 t/m 13
  looplicht van buiten naar binnen,
  en weer terug naar buiten, enz
 */


#define pauzetijd 100

void setup() {
  for(int i = 2; i < 14; i++) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  buitenNaarBinnen();
  binnenNaarBuiten();
}

void buitenNaarBinnen() {
  for(int i = 1; i < 7; i++) {
    digitalWrite(1 + i, HIGH);
    digitalWrite(14 - i, HIGH);
    delay(pauzetijd);
    digitalWrite(1 + i, LOW);
    digitalWrite(14 - i, LOW);
    delay(pauzetijd);   
  }
}

void binnenNaarBuiten() {
  for(int i = 1; i < 5; i++) {
    digitalWrite(8 + i, HIGH);
    digitalWrite(7 - i, HIGH);
    delay(pauzetijd);
    digitalWrite(8 + i, LOW);
    digitalWrite(7 - i, LOW);
    delay(pauzetijd);       
  }
}

Berichten: 203
Geregistreerd: 11 Mei 2014, 11:22

Re: 12 leds als kit heen en terug werkt

Berichtdoor vanschagen » 30 Jun 2014, 11:33

bedankt ga ik van middag proberen
harstikken bedankt he

gelijk geprobeerd ,FANTASTICH dit werkt zoals ik wil
HARSTIKKEN BEDANKT

Berichten: 20
Geregistreerd: 25 Jun 2014, 10:49

Re: 12 leds als kit heen en terug werkt

Berichtdoor Levi Z » 30 Jun 2014, 14:14

Mooie oplossing!

Had t verkeerd begrepen ja..

Berichten: 163
Geregistreerd: 15 Dec 2012, 21:02
Woonplaats: Delfzijl

Re: 12 leds als kit heen en terug werkt

Berichtdoor FPCUser » 30 Jun 2014, 18:17

Toch nog iets te snel op verzenden gedrukt....

Je kan n.l. de laatste delay() van beide functies verwijderen.
Voor alle duidelijkheid staat hieronder nogmaals de listing.



Korte uitleg voor zover je er naar geinteresseerd bent...

De LED's zijn aangesloten op de pinnen 2 t/m 13.
Als je van buiten naar binnen en weer terug wilt gaan krijg je de volgende reeks:

pinnr. 2 en 13
3 en 12
4 en 11
5 en 10
6 en 9
7 en 8
keerpunt
6 en 9
5 en 10
4 en 11
3 en 12
weer naar het begin

Je ziet een reeks van 6 en een reeks van 4.
Omdat je de keerpunten 2 en 13, 7 en 8 niet tweemaal wilt hebben is de 2e reeks dus korter.

Bj een reeks denk je aan een FOR/NEXT Loop.

De eerste lus wordt 6 maal doorlopen, daarom krijg je de volgende constructie:

for(int i = 1; i < 7; i++)

Bij de eerste omloop (i is dan 1) moeten de pinnen 2 en 13 aangestuurd worden:

digitalWrite(1 + i, HIGH) = digitalWrite( 1 + 1, HIGH) = digitalWrite(2, HIGH) en
dgitalWrite(14 - i, HIGH) = digitalWrite( 14 - 1, HIGH) = digitalWrite(13, HIGH)

Bij de 2e omloop (i = 2):

digitalWrite( 1 + 2, HIGH) = digitalWrite(3, HIGH) en
digitalWrite( 14 - 2, HIGH) = digitalWrite(12, HIGH)

enz, enz

Een dergelijke constructie zie je ook bj de 2e lus, alleen loopt deze dus slechts 4 maal.


m.v.g.


Code: Alles selecteren
/*
  12 LED's, op pin 2 t/m 13
  looplicht van buiten naar binnen,
  en weer terug naar buiten, enz
 */


#define pauzetijd 100

void setup() {
  for(int i = 2; i < 14; i++) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  buitenNaarBinnen();
  binnenNaarBuiten();
}

void buitenNaarBinnen() {
  for(int i = 1; i < 7; i++) {
    digitalWrite(1 + i, HIGH);
    digitalWrite(14 - i, HIGH);
    delay(pauzetijd);
    digitalWrite(1 + i, LOW);
    digitalWrite(14 - i, LOW);   
  }
}

void binnenNaarBuiten() {
  for(int i = 1; i < 5; i++) {
    digitalWrite(8 + i, HIGH);
    digitalWrite(7 - i, HIGH);
    delay(pauzetijd);
    digitalWrite(8 + i, LOW);
    digitalWrite(7 - i, LOW);
  }
}

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: flooldlaf, ioyukofuje en 6 gasten