INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Bei Led Lauflicht delay ersetzen
16.02.2015, 17:55
Beitrag #17
RE: Bei Led Lauflicht delay ersetzen
Hi,
sorry, war grad ne Weile weg.
Lass einfach das i sozusagen weiterlaufen, so dass Du damit alle 23 Zustände abbilden kannst. Dann noch ein paar geschickt platzierte ifs und j = i - 12 berechnen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.02.2015, 08:03
Beitrag #18
RE: Bei Led Lauflicht delay ersetzen
Hi Thorsten
Ich finde es super das du mir hilfst es zu verstehen. Und danke nochmal dafür.
Bin auch schon seit Tagen beruflich unterwegs und habe momentan nicht viel Zeit um mich mit dem Thema zu beschäftigen. Aber das Wochenende ist ja schon nach am Horizont.
Werde mich am Wochenende wieder hinsetzen und weiter machen.
Danke nochmal für deine Geduld und Mühe mit mir.

Gruß
Partizan0180

Ich bin kein Zauberer, ich lerne noch...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2015, 21:30
Beitrag #19
RE: Bei Led Lauflicht delay ersetzen
(16.02.2015 17:55)Thorsten Pferdekämper schrieb:  Hi,
sorry, war grad ne Weile weg.
Lass einfach das i sozusagen weiterlaufen, so dass Du damit alle 23 Zustände abbilden kannst. Dann noch ein paar geschickt platzierte ifs und j = i - 12 berechnen.
Gruß,
Thorsten

Hallo Thorsten,

Ich raffe es überhaupt nicht. Leider bin ich zu doof dafür um das mit dem millis() zu Verstehen.
Es ist ein Wahnsinn für einen Anfänger wie mich.AngryAngry

Wie oder was muss ich hier machen damit die LEDs wieder nach einander ausgehen? HuhHuh
Code:
void handleOben() {

  static int i = 0;   // wie oben beschrieben
  static unsigned long lastTime = 0;  // da wurde das letzte Mal was gemacht

  unsigned long now = millis();  // "jetzt"

  // eins nach dem Anderen einschalten
  // i sagt uns, wie weit wir das letzte mal gekommen sind
  if(i < 11) {  // die letzte ist noch nicht an
     if(now - lastTime < interval1)
           return;   // die Zeit ist noch nicht vergangen, also nichts tun
     lastTime = now;   // wir werden _jetzt_ was tun
     digitalWrite(i, LOW);        
     i++;   // damit das naechste Mal die naechste angeht
     return;  // das war's fuer diese Runde
  };  // oben ist ein return, da brauchen wir kein else

  // hier wissen wir, dass i >= 11 ist, also das letzte Mal ist die letzte angegangen
       if(now - lastTime < warten)
           return;   // die Zeit ist noch nicht vergangen, also nichts tun
     lastTime = now;   // wir werden _jetzt_ was tun
  // und alle wieder aus
  for (int j = 0; j < 11; j++)
  {
    digitalWrite(j, HIGH);        
  }
  // Jetzt sind alle wieder aus. i muss jetzt zurueck gesetzt werden,
  // damit es das naechste Mal wieder von vorne anfaengt
  i = 0;
}

Danke noch mal für deine Hilfe.

Gruß
partizan0180

Ich bin kein Zauberer, ich lerne noch...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2015, 09:29
Beitrag #20
RE: Bei Led Lauflicht delay ersetzen
[quote='partizan0180' pid='12145' dateline='1423514867']
Hallo Leute
Ich stehe noch so ziemlich am Anfang in Sachen Arduino. Ich habe einen LED Lauflicht gebaut was durch einen Taster gesteuert oder angesteuert werden soll. Das heißt wenn der Taster ein mal gedrückt wird sollen 8 Leds mit ca. 1,5 Sekunden Intervall der Reihe nach aufleuchten und nach ca. 3 Sekunden Leuchtzeit in ca. 2,5 Sekunden Intervall wieder ausgehen.
Mit delay funktioniert das auch. Später will ich das Programm noch durch weitere Funktion wie Dauerlicht erweitern, und genau da habe ich das delay Problem.
Weil delay sperrt ja das Programm bis es durchläuft und der Taster wird in der Zeit nicht abgefragt.
Da habe ich an so einer Einstellung Möglichkeit gedacht:
[code]
// Einstellungen///////////////////////////////////////////

int warten = 2500; // Wartezeit bis wieder AUS
int interval1 = 350; // Schaltintervall für AN
int interval2 = 1000; // Schaltintervall für AUS

// Einstellungen ende////////////////////////////////

Hi,
ich habe hier ein delay-ersatz, sieh ihn Dir mal an.
Dieser code ist universell einsetzbar.
Du übergibst die Zeit an eine Funktion und nach Ablauf kommt ein entsprechender return-wert, den Du auswerten kannst.

Gruß norwa


.ino  milliZeitTEST.ino (Größe: 762 Bytes / Downloads: 39)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2015, 11:57
Beitrag #21
RE: Bei Led Lauflicht delay ersetzen
Versuch mal den ganzen Kram zu verstehen. Am besten, Du gehst das wissenschaftlich an. Schau Dir einen kleinen Teil an und wenn Du glaubst irgendein Fitzelchen verstanden zu haben, dann setz Dich hin und schreib einen Sketch, der genau dieses Fitzelchen verwendet.
Ansonsten: Es geht immer nach dem Schema: Für jede Stelle, an der Du das Gefühl hast, dass da ein delay() hingehört, muss der Zustand gespeichert werden. In Deinem Fall ist das einfach, da eine einzige Zahl ausreicht. (Für alle Zahlentheoretiker: Ich weiß, spätesten seit Gödel sind das Lügen für Kinder...)

Code:
void handleOben() {

  static int i = 0;   // wie oben beschrieben
  static unsigned long lastTime = 0;  // da wurde das letzte Mal was gemacht

  unsigned long now = millis();  // "jetzt"

  // eins nach dem Anderen einschalten
  // i sagt uns, wie weit wir das letzte mal gekommen sind
  if(i < 11) {  // die letzte ist noch nicht an
     if(now - lastTime < interval1)
           return;   // die Zeit ist noch nicht vergangen, also nichts tun
     lastTime = now;   // wir werden _jetzt_ was tun
     digitalWrite(i, LOW);        
     i++;   // damit das naechste Mal die naechste angeht
     return;  // das war's fuer diese Runde
  };  // oben ist ein return, da brauchen wir kein else

  // hier wissen wir, dass i >= 11 ist, also das letzte Mal ist die letzte angegangen
  // Der Zustand "11" bedeutet, dass alle an sind und wir jetzt warten müssen,
  // bis wieder ausgeschaltet werden darf
  if(i == 11) {      
     if(now - lastTime < warten)
           return;   // die Zeit ist noch nicht vergangen, also nichts tun
     lastTime = now;   // warten ist zu Ende, wir schalten jetzt in den neuen Zustand
     i++;
     return;  // beim nächsten Aufruf geht's weiter
  };

  // hier wissen wir, dass i > 11 ist, also mindestens 12
  // es sind wieder 11 Lampen, mit den Pins 0 bis 10
  // also geht i hier von 12 bis 22

  if(i < 23) {  // d.h. mindestens eine Lampe noch an
     if(now - lastTime < interval1)
           return;   // die Zeit ist noch nicht vergangen, also nichts tun
     lastTime = now;   // wir werden _jetzt_ was tun
     digitalWrite(i - 12, HIGH);  // im Zustand i wird die (i-12)te Lampe abgeschaltet        
     i++;   // damit das naechste Mal die naechste ausgeht
     return;  // das war's fuer diese Runde
  };  

  // wenn das Coding bis hier kommt, dann sind alle Lampen wieder aus
  // i ist jetzt 23, aber das müssen wir nicht prüfen
  // i muss jetzt zurueck gesetzt werden,
  // damit es das naechste Mal wieder von vorne anfaengt
  i = 0;
}
Das geht natürlich auch eleganter, aber dann ist es noch schwieriger zu verstehen. Simpler als so geht es glaube ich nicht wirklich. (Kürzer schon...)
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.03.2015, 10:00 (Dieser Beitrag wurde zuletzt bearbeitet: 07.03.2015 14:46 von partizan0180.)
Beitrag #22
RE: Bei Led Lauflicht delay ersetzen
Hallo Thorsten,
so langsam fange ich an das das ganze zu verstehen, aber nur langsam.... Jetzt habe ich dein Code mit einen Taster ausprobiert und musste feststellen das ich ca. 5 mal den Taster betätigen muss bis die erste Led angeht. Und dann bei jeder weitere Betätigung des Tasters wird je eine Led zugeschaltet. Die Frage ist warum ist das so??
Es sollte doch beim Taster Betätigung das " Lauflicht " aktiviert werden.
Taster -> Led 4 - 10 an Intervall 350 ms -> warten 2000 ms -> Led 4 -10 Intervall 1000 ms wieder aus.

Hallo norwa,
Danke für dein Code. Denn werde ich auch unter die Lupe nehmen.

Hier ist noch der Code wie ich das probiert habe:
Code:
int buttonPin1 = 2;    // Taster an Pin 2
int buttonPin2 = 3;    // Taster an Pin 3

// Einstellungen///////////////////////////////////////////
int warten = 2500;         // Wartezeit bis wieder AUS
int interval1 = 350;      // Schaltinterval für AN
int interval2 = 1000;    // Schaltinterval für AUS
// Einstellungen ende/////////////////////////////////////

int reading1;   // Wert des Eingangs
int reading2;
int previous1 = LOW;
int previous2 = LOW;

unsigned long time = 0;         // letzter Zeitwert bei dem der Ausgangzustand wechselte.
unsigned long debounce = 200;   // Entprellzeit

void setup()
{
// ButtonPins als eingang deklarieren
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  // Pins als Ausgang deklarieren und im Bootmodus auf aus stellen
  for (int i=4; i<11; i++)
  {  
  pinMode(i, OUTPUT);
  digitalWrite(i, HIGH);
  }

  ///////////////////////////////////////////////////////
  Serial.begin(9600);
  while(!Serial); // nur bei Leonardo nötig
  Serial.println("Programm start.....");
  
}
void loop()
{
  reading1 = digitalRead(buttonPin1);
  reading2 = digitalRead(buttonPin2);

// Beim Wechsel des Eingangs von LOW zu HIGH und nach der Entprellzeit:
  if (reading1 == HIGH && previous1 == LOW && millis() - time > debounce) {
    time = millis();    
    handleOben();  
       Serial.println("Taster 1 ");
    }
    
    
  if (reading2 == HIGH && previous2 == LOW && millis() - time > debounce) {
    time = millis();        
    digitalWrite(5,LOW);
    Serial.println("Taster 2 ");
    }  

  }



void handleOben() {
  Serial.println("Taster 1");
  
  static int i = 0;   // wie oben beschrieben
  static unsigned long lastTime = 0;  // da wurde das letzte Mal was gemacht

  unsigned long now = millis();  // "jetzt"

  // eins nach dem Anderen einschalten
  // i sagt uns, wie weit wir das letzte mal gekommen sind
  if(i < 11) {  // die letzte ist noch nicht an
     if(now - lastTime < interval1)
           return;   // die Zeit ist noch nicht vergangen, also nichts tun
     lastTime = now;   // wir werden _jetzt_ was tun
     digitalWrite(i, LOW);        
     i++;   // damit das naechste Mal die naechste angeht
     return;  // das war's fuer diese Runde
  };  // oben ist ein return, da brauchen wir kein else

  // hier wissen wir, dass i >= 11 ist, also das letzte Mal ist die letzte angegangen
  // Der Zustand "11" bedeutet, dass alle an sind und wir jetzt warten müssen,
  // bis wieder ausgeschaltet werden darf
  if(i == 11) {      
     if(now - lastTime < warten)
           return;   // die Zeit ist noch nicht vergangen, also nichts tun
     lastTime = now;   // warten ist zu Ende, wir schalten jetzt in den neuen Zustand
     i++;
     return;  // beim nächsten Aufruf geht's weiter
  };

  // hier wissen wir, dass i > 11 ist, also mindestens 12
  // es sind wieder 11 Lampen, mit den Pins 0 bis 10
  // also geht i hier von 12 bis 22

  if(i < 23) {  // d.h. mindestens eine Lampe noch an
     if(now - lastTime < interval2)
           return;   // die Zeit ist noch nicht vergangen, also nichts tun
     lastTime = now;   // wir werden _jetzt_ was tun
     digitalWrite(i - 12, HIGH);  // im Zustand i wird die (i-12)te Lampe abgeschaltet        
     i++;   // damit das naechste Mal die naechste ausgeht
     return;  // das war's fuer diese Runde
  };  

  // wenn das Coding bis hier kommt, dann sind alle Lampen wieder aus
  // i ist jetzt 23, aber das müssen wir nicht prüfen
  // i muss jetzt zurueck gesetzt werden,
  // damit es das naechste Mal wieder von vorne anfaengt
  i = 0;
}

Hier ist noch ein kleines Video. Das ist jetzt noch mit delay.





Gruß
partizan0180

Ich bin kein Zauberer, ich lerne noch...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2015, 12:12
Beitrag #23
RE: Bei Led Lauflicht delay ersetzen
Hi,
das handleOben musst Du immer aufrufen, so lange Du das An- und Ausgehen aktiv haben willst. Wenn Du es nur dann aufrufst, wenn der Taster eine Zustandsänderung erfährt, dann passiert natürlich auch nur dann etwas.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.03.2015, 12:08 (Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2015 12:09 von partizan0180.)
Beitrag #24
RE: Bei Led Lauflicht delay ersetzen
Hallo Thorsten
Wie mache ich es ihm begreiflich das bei Taster betätigen das Programm komplett durchläuft. Das muss doch möglich sein?
Habe es nicht gedacht das es so schwierig wird.

Danke und Beste Grüße
Partizan0180

Ich bin kein Zauberer, ich lerne noch...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Delay nurmili 2 218 10.07.2016 16:55
Letzter Beitrag: nurmili
  Problem mit Delay und Millis funnyzocker 1 458 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Kann ich in eine For Schleife einen delay einbauen JanGamer11 6 612 05.01.2016 12:34
Letzter Beitrag: Hilgi
  Rampe ohne Delay DC-Motor de_flexus 3 1.933 22.11.2015 13:07
Letzter Beitrag: frank2000
  Doppelblitz ohne Delay cleko 3 853 12.11.2015 08:02
Letzter Beitrag: Bitklopfer
  Langes delay - wie macht man das? Gelegenheitsbastler 17 2.423 02.09.2015 20:48
Letzter Beitrag: Gelegenheitsbastler
  mal wieder ein kleines Problem mit blinken ohne delay :) Sbbfreack 6 1.729 06.07.2015 15:59
Letzter Beitrag: Sbbfreack
  Blink ohne Delay - Merkwürdiger Fehler rave 7 1.830 11.05.2015 06:29
Letzter Beitrag: Bitklopfer
  Mal wieder ein Lauflicht Legolas085 7 3.652 05.05.2015 08:38
Letzter Beitrag: Thorsten Pferdekämper
  Multitasking mit millis statt delay LEDstar 2 1.246 15.04.2015 11:25
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste