for loop

Arduino specifieke Software
Berichten: 1
Geregistreerd: 26 Feb 2013, 13:56

for loop

Berichtdoor thve25 » 26 Feb 2013, 14:00

hallo,

ik ben net nieuw met arduino.
Mijn bedoeling was om 2 paar disco lampen van 4 lampen op een bepaald patroon te laten knipperen met relais.
Nu wil ik de de helft van de discolampen een ander patroon laten knipperen als de andere helft.
De ene helft kan ik op de goede manier laten knipperen met een for loop.

Is er een mogelijkheid om een for loop uit te laten voeren en tegelijkertijd een ander stuk code te laten runnen?

Advertisement

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: for loop

Berichtdoor Karel » 26 Feb 2013, 14:13

Nee, dat gaat niet. Je zal het in 1 loop moeten uitvoeren.

Teken een tijdlijn, en zet op die lijn per lamp uit wanneer die aan en wanneer die uit moet zijn. Dan krijg je intervallen: zo lang aan, zo lang uit, per lamp.
Nu kan je vaststellen op welke momenten er wat moet gebeuren:
lamp 1 aan, lamp 2 aan
pauze 1
lamp 3 aan, lamp 4 aan
pauze 2
lamp 1 uit, lamp 2 uit
pauze 3
lamp 3 uit, lamp 4 uit
pauze 4
herhaal de loop.

Door te varieren met de 4 verschillende pauzes kan je verschillende ritmes maken.
If you think education is expensive, try ignorance! (Derek Bok)

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: for loop

Berichtdoor astrofrostbyte » 26 Feb 2013, 15:04

Zoals karel al aangeeft, je moet een soort 'events' maken , een moment waarop iets moet gebeuren

De onderstaande code loopt een tijd door van 1000x10ms (tijd x delay(10)) , bij iedere tijd kijkt ie of er een 'EventTime' bestaat , en zo ja voert hij die uit.
In de 10 sec van de loop voert hij 4 events uit.
Hij/zij dumpt het ook op de serial terminal

Code: Alles selecteren
const int nrEvents = 4;
int tijd = 0;

struct SensorData {                   
  int   EventTime;   // Timestamp
  int Lamp;        // uitgang pin voor Lamp
  int OnOff;       // of Pin Hoog/laag moet
} events[nrEvents] = {   // hoeven niet in volgorde te staan
  {100, 3 , LOW  },
  {200, 4 , HIGH },
  {550, 3 , LOW  },
  {600, 3 , HIGH }
  };

void setup() {
  Serial.begin(9600); 
}

void loop() {
  for (int k=0; k<nrEvents ; k++)
  { if (events[k].EventTime == tijd)
    { digitalWrite(events[k].Lamp , events[k].OnOff );     // analogWrite(events[k].Lamp,events[k].pwm)
      Serial.print(tijd)             ;Serial.print(" ");
      Serial.print(events[k].Lamp)   ;Serial.print(" ");
      Serial.println(events[k].OnOff);
    }
  }
  delay(10);
  if (++tijd > 1000) tijd = 0;
}//loop


ik heb de code niet getest, je moet in de setup ook nog ff de pinnen als uitgang zetten.
Nu kan je de event tabel (array) gewoon uitbreiden

Met een kleine aanpassing kan dit ook voor de digitale-out (PWM) pinnen gebruikt worden. dan kan je lekker faden enzo.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten