Go Down

Topic: 10 Led's verschillende programma's geven Error! (Read 1 time) previous topic - next topic

Hugo2642

Dec 14, 2019, 06:15 pm Last Edit: Dec 14, 2019, 06:17 pm by Hugo2642
Hallo,

Ik heb een Arduino Uno en ik wil met 10 LED's verschillende programma's laten draaien. Laten knipperen oplichten enz. Ik wil dat elk programma 5 x zich herhaald en daarna de volgende 5x en zo door. Als ik de tijd wijzig in mijn programmering dan blijft programma 2 continu draaien..

Ik gebruik 10 LED's - PIN 2 t/m 11, wat veel gebeurd is dat op pin 8 (Led 7) zo maar ineens uit blijft en bij het andere programma wel weer aanspringt.

zie hieronder de programmering:

Code: [Select]

#include <stdlib.h>
#include <unistd.h>

int SequentialRunCount = 0;
int FollowUpRunCount = 0;
int FlashyRunCount = 0;

int pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int odd[] = {3, 5, 7, 9, 11};
int even[] = {2, 4, 6, 8, 10};

void setup() {
  for(int i = 0; i < sizeof(pinArray); i++) {
    pinMode(pinArray[i], OUTPUT);
  }
}

void sequential() {
  for(int i = 0; i < sizeof(pinArray); i++) {
    digitalWrite(pinArray[i], HIGH);
    delay(50);
  }
  for(int i = 10; i >= 0; i--) {
    digitalWrite(pinArray[i], LOW);
    delay(50);
  }
  delay(50);
}

void first() {
  for(int i = 10; i >= 0; i--) {
    digitalWrite(pinArray[i], HIGH);
    delay(50);
  }
  for(int i = 0; i < sizeof(pinArray); i++) {
    digitalWrite(pinArray[i], LOW);
    delay(50);
  }
  delay(50);
}

void follow() {
  for(int i = 0; i < sizeof(pinArray); i++) {
    if(i > 1 && i <= 10) {
      digitalWrite(pinArray[i], HIGH);
      digitalWrite(pinArray[i - 2], LOW);
      delay(100);
    } else if(i == 0 || i == 1) {
      digitalWrite(pinArray[i], HIGH);
      delay(100);
    }
  }

  for(int i = 0; i < sizeof(pinArray); i++){
    digitalWrite(pinArray[i], LOW);
  }
}

void followReverse() {
  for(int i = sizeof(pinArray) - 1; i >= 0; i--) {
    if(i < 9 && i >= 0) {
      digitalWrite(pinArray[i], HIGH);
      digitalWrite(pinArray[i + 2], LOW);
      delay(100);
    } else if(i == 10 || i == 9) {
      digitalWrite(pinArray[i], HIGH);
      delay(100);
    }
  }

  for(int i = 0; i < sizeof(pinArray); i++){
    digitalWrite(pinArray[i], LOW);
  }
}

void followUp() {
  digitalWrite(odd[0], HIGH);
  digitalWrite(odd[1], HIGH);
  digitalWrite(odd[2], HIGH);
  digitalWrite(odd[3], HIGH);
  digitalWrite(odd[4], HIGH);
  delay(500);
  digitalWrite(odd[0], LOW);
  digitalWrite(odd[1], LOW);
  digitalWrite(odd[2], LOW);
  digitalWrite(odd[3], LOW);
  digitalWrite(odd[4], LOW);
  digitalWrite(even[0], HIGH);
  digitalWrite(even[1], HIGH);
  digitalWrite(even[2], HIGH);
  digitalWrite(even[3], HIGH);
  digitalWrite(even[4], HIGH);
  delay(500);
  digitalWrite(even[0], LOW);
  digitalWrite(even[1], LOW);
  digitalWrite(even[2], LOW);
  digitalWrite(even[3], LOW);
  digitalWrite(even[4], LOW);
}

void endSequence() {
  delay(400);
  for(int i = 0; i < sizeof(pinArray); i++){
    digitalWrite(pinArray[i], HIGH);
  }
  delay(400);
  for(int i = 0; i < sizeof(pinArray); i++){
    digitalWrite(pinArray[i], LOW);
  }
}

void loop() {
  delay(200);
  for(int i = 0; i < 3; i++) {
    follow();
  }
  for(int i = 0; i < 3; i++) {
    first();
  }
  for(int i = 0; i < 3; i++) {
    followUp();
  }
  for(int i = 0; i < 3; i++) {
    sequential();
  }
  for(int i = 0; i < 3; i++) {
    followReverse();
  }
  for(int i = 0; i < 4; i++) {
    endSequence();
  }
  asm volatile ("  jmp 0"); 
  }




Voor mij is Arduino programmeren aardig nieuw dus er zal wellicht fouten in zitten, maar het rare is dus dat led 7 en led 10 vaak het bij 5 herhalingen soms wel of niet doen in 1 programma en in het ander het soms helemaal niet doen..

graag een oplossing gezocht of aanpassingen

zie bijgevoegde foto voor de setup,


nicoverduin

#1
Dec 14, 2019, 10:11 pm Last Edit: Dec 15, 2019, 05:18 pm by nicoverduin
Overal waar je for (i=10.... etc is fout. Indexen in C/C++ beginnen bij 0. Je hebt 10 pinnen. Dus van 0..9. Of 9...0
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

shooter

dat van nico is dus wel even opletten.
en jouw tellen is ook maar een letter de I als je nu dus loop1 en loop2 gebruikt ben je daar ook vanaf.
die asm routine moet eruit
de loop begint vanzelf al weer vooraan.
(dat wordt opgelost in de compiler.)
zet erook eens wat commentaar in, en jekunt met serial.print prima volgen wat je doet of niet.
voor een eerste probeersel is het wel goed geschreven hoor.
en vooral niet in paniek raken maar gewoon hier op het forum vragen.



paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

sterretje

Puntje van commentaar

sizeof(pinArray) geeft je niet wat je denkt. Print het maar eens naar de serial monitor.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

Go Up