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
delay alternativen zum laufen bringen
13.09.2014, 11:26
Beitrag #1
delay alternativen zum laufen bringen
Hallo

da ich mal wieder am ende meiner Geduld bin hoffe ich Ihr könnt mir Helfen.
Es geht um die Alternative zum delay wie Ihr wisst blockiert diese Funktion den weitern Programm Ablauf für die entsprechend eingestellte Zeit.
So nun möchte ich die millis sprich LED blinken ohne delay einbauen und komme an meine Grenzen.

ich habe innerhalb einer Bedingung 3 schritte.

Code:
if ( entfernungmitt < 200 && entfernungli > 350 ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
  {

    //Motor stopp
  digitalWrite(12, LOW);
  digitalWrite(9, HIGH);  


  //Motor B backward @ full speed
  digitalWrite(13, LOW);  
  digitalWrite(8, HIGH);  

  
delay (1000);

       //Motoren zurueck
  digitalWrite(12, LOW);
  digitalWrite(9, LOW);  



  digitalWrite(13, LOW);  
  digitalWrite(8, LOW);  

  delay (1500);

  
      //Motoren drehen nach links
  digitalWrite(12, HIGH);
  digitalWrite(9, LOW);  


  //Motor B backward @ full speed
  digitalWrite(13, LOW);  
  digitalWrite(8, LOW);  
  delay (2500);

  }

wie kann ich hier die millis Funktion einbinden dass in dieser Bedingung auch alle 3 unterschiedliche verzögerungs Zeiten möglich sind.

Ich gebe zu meine programmierkentnisse sind nicht die besten.
Aber ich probiere es schon seit einer Woche und bekomme es einfach nicht hin.

Ich hoffe Ihr könnt mir dabei helfen

Vielen Dank im voraus

Gruß
Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.09.2014, 12:06
Beitrag #2
RE: delay alternativen zum laufen bringen
Den Code musst Du einbauen damit das Delay nicht alles verzögert.

int ledPinBlink = 13; // Rote Blink-LED-Pin 13
int interval = 2000; // Intervalzeit (2 Sekunden)
unsigned long prev; // Zeit-Variable
int ledStatus = LOW; // Statusvariable für die Blink-LED


void loop(){
// Eine LED über den Timer blinken lassen
if((millis() - prev) > interval){
prev = millis();
ledStatus = !ledStatus; // LED an und ausschalten
digitalWrite(ledPinBlink, ledStatus); / /LED an und ausschalten
}





(13.09.2014 11:26)Zerebrator schrieb:  Hallo

da ich mal wieder am ende meiner Geduld bin hoffe ich Ihr könnt mir Helfen.
Es geht um die Alternative zum delay wie Ihr wisst blockiert diese Funktion den weitern Programm Ablauf für die entsprechend eingestellte Zeit.
So nun möchte ich die millis sprich LED blinken ohne delay einbauen und komme an meine Grenzen.

ich habe innerhalb einer Bedingung 3 schritte.

Code:
if ( entfernungmitt < 200 && entfernungli > 350 ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
  {

    //Motor stopp
  digitalWrite(12, LOW);
  digitalWrite(9, HIGH);  


  //Motor B backward @ full speed
  digitalWrite(13, LOW);  
  digitalWrite(8, HIGH);  

  
delay (1000);

       //Motoren zurueck
  digitalWrite(12, LOW);
  digitalWrite(9, LOW);  



  digitalWrite(13, LOW);  
  digitalWrite(8, LOW);  

  delay (1500);

  
      //Motoren drehen nach links
  digitalWrite(12, HIGH);
  digitalWrite(9, LOW);  


  //Motor B backward @ full speed
  digitalWrite(13, LOW);  
  digitalWrite(8, LOW);  
  delay (2500);

  }

wie kann ich hier die millis Funktion einbinden dass in dieser Bedingung auch alle 3 unterschiedliche verzögerungs Zeiten möglich sind.

Ich gebe zu meine programmierkentnisse sind nicht die besten.
Aber ich probiere es schon seit einer Woche und bekomme es einfach nicht hin.

Ich hoffe Ihr könnt mir dabei helfen

Vielen Dank im voraus

Gruß
Chris

Wenn der IC raucht wird viel Strom verbraucht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.09.2014, 05:57 (Dieser Beitrag wurde zuletzt bearbeitet: 14.09.2014 05:57 von Corvus.)
Beitrag #3
RE: delay alternativen zum laufen bringen
Diese Variablendeklarationen kommen dann vor die setup()-Routine:
Zitat:boolean taskTrigger=0;
int taskStep=0;
unsigned long taskTimestamp;

Zitat:if (!taskTrigger && entfernungmitt < 200 && entfernungli > 350 ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
  taskTrigger=1;

if (taskTrigger) {
  switch (taskStep) {
    case 0:
      //Motor stopp
      digitalWrite(12, LOW);
      digitalWrite(9, HIGH);
      
      //Motor B backward @ full speed
      digitalWrite(13, LOW);
      digitalWrite(8, HIGH);
      
      taskTimestamp=millis();
      taskStep++;
      break;
    case 1:
      if (millis()>=taskTimestamp+1000) {
        //Motoren zurueck
        digitalWrite(12, LOW);
        digitalWrite(9, LOW);
         
        digitalWrite(13, LOW);
        digitalWrite(8, LOW);
        
        taskTimestamp=millis();
        taskStep++;
      }
      break;
    case 2:
      if (millis()>=taskTimestamp+1500) {
        //Motoren drehen nach links
        digitalWrite(12, HIGH);
        digitalWrite(9, LOW);
        
        //Motor B backward @ full speed
        digitalWrite(13, LOW);
        digitalWrite(8, LOW);
        
        taskTimestamp=millis();
        taskStep++;
      }
      break;
    case 3:
      if (millis()>=taskTimestamp+2500) {
        taskTrigger=0;
        taskStep=0;        
      }
  }
}

gruß lorenz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.09.2014, 10:50
Beitrag #4
RE: delay alternativen zum laufen bringen
@ Lorenz

1000 Dank für den Code !

Habe Dir inzwischen eine PM geschickt.

Super tolles Forum hier wird einen wirklich geholfen.

Gruß
Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.09.2014, 14:25
Beitrag #5
RE: delay alternativen zum laufen bringen
Hallo

Habe es hinbekommen, dass es läuft.
Läuft wirklich toll allerdings habe ich eine Art Programm Überschneidung.

Und zwar die Funktion für links soll auch für rechts gelten. Wenn ich die implementiere zuckt er nur rum d.h. nur mit der Funktion ( Bedingung LINKS ) läuft er wie er soll ( laut Programm)
Aktiviere ich die Bedingung für RECHTS zuckt er rum ...
(wenn die in der if Funktion angegebene Bedingungen für beide Richtungen erfüllt sind )
woran kann es liegen ??
Muss ich bzw. soll ich hier die Variablen anpassen ( für die Funktion explizit anders benennen ?? )

Danke für Eure grandiose Hilfe

Gruß
Chirs
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.09.2014, 16:29
Beitrag #6
RE: delay alternativen zum laufen bringen
poste mal deinen code
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.09.2014, 17:13 (Dieser Beitrag wurde zuletzt bearbeitet: 14.09.2014 17:14 von Zerebrator.)
Beitrag #7
RE: delay alternativen zum laufen bringen
(14.09.2014 16:29)Corvus schrieb:  poste mal deinen code

Hier mein Code ( nur die Funktionen )
Code:
if (!taskTrigger && entfernungmitt < 200 && entfernungli > 250 ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
   taskTrigger=1;

if (taskTrigger) {
   switch (taskStep) {
     case 0:
       //Motor stopp
       digitalWrite(12, LOW);
       digitalWrite(9, HIGH);
      
       //Motor B backward @ full speed
       digitalWrite(13, LOW);
       digitalWrite(8, HIGH);
      
       taskTimestamp=millis();
       taskStep++;
       break;
     case 1:
       if (millis()>=taskTimestamp+1000) {
         //Motoren zurueck
         digitalWrite(12, LOW);
         digitalWrite(9, LOW);
          
         digitalWrite(13, LOW);
         digitalWrite(8, LOW);
        
         taskTimestamp=millis();
         taskStep++;
       }
       break;
     case 2:
       if (millis()>=taskTimestamp+1500) {
         //Motoren drehen nach links
         digitalWrite(12, HIGH);
         digitalWrite(9, LOW);
        
         //Motor B backward @ full speed
         digitalWrite(13, LOW);
         digitalWrite(8, LOW);
        
         taskTimestamp=millis();
         taskStep++;
       }
       break;
     case 3:
       if (millis()>=taskTimestamp+2500) {
         taskTrigger=0;
         taskStep=0;        
       }
   }
}

  
    
if (!taskTrigger && entfernungmitt < 200 && entfernungre > 250 ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
   taskTrigger=1;

if (taskTrigger) {
   switch (taskStep) {
     case 0:
       //Motor stopp
       digitalWrite(12, LOW);
       digitalWrite(9, HIGH);
      
       //Motor B backward @ full speed
       digitalWrite(13, LOW);
       digitalWrite(8, HIGH);
      
       taskTimestamp=millis();
       taskStep++;
       break;
     case 1:
       if (millis()>=taskTimestamp+1001) {
         //Motoren zurueck
         digitalWrite(12, LOW);
         digitalWrite(9, LOW);
          
         digitalWrite(13, LOW);
         digitalWrite(8, LOW);
        
         taskTimestamp=millis();
         taskStep++;
       }
       break;
     case 2:
       if (millis()>=taskTimestamp+1501) {
         //Motoren drehen nach links
         digitalWrite(12, LOW);
         digitalWrite(9, LOW);
        
         //Motor B backward @ full speed
         digitalWrite(13, HIGH);
         digitalWrite(8, LOW);
        
         taskTimestamp=millis();
         taskStep++;
       }
       break;
     case 3:
       if (millis()>=taskTimestamp+2501) {
         taskTrigger=0;
         taskStep=0;        
       }
   }
}

if (!taskTrigger && entfernungli < 200 ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
   taskTrigger=1;

if (taskTrigger) {
   switch (taskStep) {
     case 0:
       //Motor stopp
       digitalWrite(12, LOW);
       digitalWrite(9, LOW);
      
       //Motor B backward @ full speed
       digitalWrite(13, HIGH);
       digitalWrite(8, LOW);
      
       taskTimestamp=millis();
       taskStep++;
       break;
     case 1:
       if (millis()>=taskTimestamp+500) {
         taskTrigger=0;
         taskStep=0;        
       }
   }
   }  

if (!taskTrigger && entfernungre < 200 ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
   taskTrigger=1;

if (taskTrigger) {
   switch (taskStep) {
     case 0:
       //Motor stopp
       digitalWrite(12, HIGH);
       digitalWrite(9, LOW);
      
       //Motor B backward @ full speed
       digitalWrite(13, LOW);
       digitalWrite(8, LOW);
      
       taskTimestamp=millis();
       taskStep++;
       break;
     case 1:
       if (millis()>=taskTimestamp+500) {
         taskTrigger=0;
         taskStep=0;        
       }
   }
   }
  


if (((entfernungre < 200) && (!entfernungre < 100)) && ((entfernungli < 200 )&& (!entfernungli < 100)))  //wenn der abstand kleiner gleich 300 dann langsam
     {                          
    
  //Motor A stop
  digitalWrite(12, HIGH); //Establishes forward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 200);

  //Motor B stop
  digitalWrite(13, HIGH);  //Establishes forward direction of Channel B
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
analogWrite(11, 200);
  }  
    
if (!taskTrigger && (entfernungli <= 100) && (entfernungmitt <= 150) && (entfernungre <= 100) ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
   taskTrigger=1;

if (taskTrigger) {
   switch (taskStep) {
     case 0:
       //Motor stopp
       digitalWrite(12, LOW);
       digitalWrite(9, LOW);
      
       //Motor B backward @ full speed
       digitalWrite(13, LOW);
       digitalWrite(8, LOW);
      
       taskTimestamp=millis();
       taskStep++;
       break;
     case 1:
       if (millis()>=taskTimestamp+2500) {
         taskTrigger=0;
         taskStep=0;        
       }
   }
   }
  
else //motoren vor
{
   //Motor A forward @ full speed
  digitalWrite(12, HIGH); //Establishes forward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 255);   //Spins the motor on Channel A at full speed

  //Motor B forward @ full speed
  digitalWrite(13, HIGH);  //Establishes backward direction of Channel B
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
  analogWrite(11, 255);    //Spins the motor on Channel B at full speed  
     }
    }
   }
  }
}

die Kommentare stimmen natürlich nicht ....
Gruß

Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.09.2014, 08:20
Beitrag #8
RE: delay alternativen zum laufen bringen
Du brauchst für vollständige parallele Verarbeitung der einzelnen Funktionen für jede dieser eine eigene Trigger-,Timestamp- und Step-Variable. Allerdings vermute ich mal, dass die Einzelnen Funktionen nicht Gleichzeitig aktiv sein sollen. Das wiederum würde einen anderen Aufbau erfordern.
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 220 10.07.2016 16:55
Letzter Beitrag: nurmili
  Problem mit Delay und Millis funnyzocker 1 461 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Kann ich in eine For Schleife einen delay einbauen JanGamer11 6 616 05.01.2016 12:34
Letzter Beitrag: Hilgi
  Rampe ohne Delay DC-Motor de_flexus 3 1.945 22.11.2015 13:07
Letzter Beitrag: frank2000
  Doppelblitz ohne Delay cleko 3 861 12.11.2015 08:02
Letzter Beitrag: Bitklopfer
  Langes delay - wie macht man das? Gelegenheitsbastler 17 2.442 02.09.2015 20:48
Letzter Beitrag: Gelegenheitsbastler
  Counter rückwärts laufen lassen???? Haustechno 6 916 10.08.2015 18:26
Letzter Beitrag: Haustechno
  mal wieder ein kleines Problem mit blinken ohne delay :) Sbbfreack 6 1.734 06.07.2015 15:59
Letzter Beitrag: Sbbfreack
  Blink ohne Delay - Merkwürdiger Fehler rave 7 1.836 11.05.2015 06:29
Letzter Beitrag: Bitklopfer
  Multitasking mit millis statt delay LEDstar 2 1.253 15.04.2015 11:25
Letzter Beitrag: Bitklopfer

Gehe zu:


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