Go Down

Topic: Sequenz ohne delay() / synchronisation (Read 1 time) previous topic - next topic

MaFu

Bei Deinem Code wird der Zähler permanent bei jedem Loop-Durchlauf inkrementiert, solange der Input LOW ist. Wenn Du es nur bei einem Wechsel von HIGH zu LOW haben willst, musst Du Dir den vorherigen Zustand merken.

Code: [Select]
int inPin12 =  12;

int state = LOW;
int lastState = LOW;       // Variable zum Speichern des letzten Zustandes
int count = 0;

void setup()  
{                
 pinMode(0, OUTPUT);    
 pinMode(1, OUTPUT);
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);    
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(inPin12, INPUT);
}

void loop()                    
{
 state = digitalRead(inPin12);

 if (state == HIGH)
 {
   digitalWrite(count, HIGH);
   lastState = HIGH;
 }
 else
 {
   digitalWrite(count, LOW);
   if (lastState == HIGH)
   {
     count++;
     if (count >= 8)
       count = 0;
     lastState = LOW;
   }
 }
}


Wenn die Inkrementierung auch beim Wechsel von LOW zu HIGH erfolgen soll, dann so:

Code: [Select]
int inPin12 =  12;

int state = LOW;
int lastState = LOW;       // Variable zum Speichern des letzten Zustandes
int count = 0;

void setup()  
{                
 pinMode(0, OUTPUT);    
 pinMode(1, OUTPUT);
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);    
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(inPin12, INPUT);
}

void loop()                    
{
 state = digitalRead(inPin12);

 if (state == HIGH)
 {
   digitalWrite(count, HIGH);
 }
 else
 {
   digitalWrite(count, LOW);
 }
 if (state != lastState)
 {
   count++;
   if (count >= 8)
     count = 0;
   lastState = state;
 }
}
_______
Manfred

a.xul

super. vielen dank! funktioniert genau so wie ich es haben wollte :)

Go Up