Pages: [1]   Go Down
Author Topic: Sequenz ohne delay() / synchronisation  (Read 932 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hallo,

auch auf die gefahr hin, dass das thema irgendwo schon behandelt wurde und ich mich zum doesbaddel mache, frage ich mal nach:

eine sequenz mit delay() funktioniert ohne probleme. so weit bin ich schon gekommen.

jetzt moechte ich gerne, dass wenn der input "HIGH" ist, die erste LED mit "HIGH" geschrieben wird. beim naechsten intervall soll dann die 2. LED mit "HIGH" geschrieben werden. das weitersteppen funktioniert in meinem programm nur per zufall bzw. mit einer zu schnellen geschwindigkeit.

die variable wird erst mit einem input "LOW" inkrementiert... gerne haette ich eine loesung, bei der ein zwischenwert von HIGH zu LOW den wert inkrementiert.

hier mein quellcode:

Quote
int inPin12 =  12;

int state = LOW;
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);
  count++;
  }
  
  if (count >= smiley-cool
  {
    count = 0;
}
}

ueber eine hilfestellung bin ich sehr dankbar.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 47
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich weiß jetzt noch nicht so richtig was du meinst und willst.
Wenn du in bestimmten Zeitabschnitten eine Aktion auslösen willst, dann kannst du ganz gut einen Timer verwenden http://www.arduino.cc/playground/Main/MsTimer2

Wenn du mehrer Aktionen zu verschiedenen Zeitpunkten durchführen möchtest, dann kannst du den Timer dazu verwenden, eine Funktion aufzurufen, in der Zähler hochgezählt werden.
Den Wert des Zählers kannst du mit einer if-Anweisung abfragen und eine Aktion durchführen lassen. Somit kannst du beliebige Aktionen zu verschiedenen Zeitpunkten (mehrere counter) ausführen.

Beachte, dass die Zähler nach einer Aktion wieder auf Null gesetzt werden müssen.
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 184
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gerade die "hohe" Geschwindigkeit gekoppelt mit Unregelmäßigkeit lässt darauf schliessen das Du vielleicht gar kein Software- sondern ein Hardwareproblem hast.

Thema Tastenprellen....

Ist das im Bereich des möglichen ??
Logged

Es gibt 10 Gruppen von Menschen:
Die einen können binär zählen, die anderen nicht.

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hallo,

sorry wenn etwas unverstaendlich.

hardwareproblem ist es nicht, da bei einem HIGH am input eine LED ja durchgaengig leuchtet.

bei einem LOW am input inkrementiert mein programm den counter permanent. das ist das problem.

ich moechte, dass das inkrementieren des counters beim dem tastendruck erfolgt.

1. tastendruck = 0
2. tastendruck = 1
2. tastendruck = 2
etc

verstaendlicher?  :-[
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 184
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Da ich selbst absoluter Anfänger bin ist mein Ratschlag eher naiver Natur sollte aber das Problem lösen können:

http://arduino.cc/en/Reference/If

damit sollte eine Lösung möglich sein.

Es bessere Antwort bekommst Du bestimmt von den Code-Königen
Logged

Es gibt 10 Gruppen von Menschen:
Die einen können binär zählen, die anderen nicht.

Munich/Germany
Offline Offline
God Member
*****
Karma: 9
Posts: 642
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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:
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;
  }
}
Logged

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

super. vielen dank! funktioniert genau so wie ich es haben wollte smiley
Logged

Pages: [1]   Go Up
Jump to: