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
15.09.2014, 11:10
Beitrag #9
RE: delay alternativen zum laufen bringen
Hallo Leute

Vielleicht hilft ja sowas hier? wegen dem seperaten Triggern, und delay´s

gruß

In unserer Gesellschaft ist das Gehirn am gerechtestesten Verteilt! Jeder glaubt, er habe genug davon.
Hardware: SainSmart Mega 2560 R3 + 3,2" LCD-Touch-Screen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.09.2014, 17:06 (Dieser Beitrag wurde zuletzt bearbeitet: 15.09.2014 17:17 von Zerebrator.)
Beitrag #10
RE: delay alternativen zum laufen bringen
@Corvus

Doch die sollen alle Gleichzeitig laufen. Immer hin werden so die Antriebe zu jeder Zeit aktiv gesteuert.
Oder meinst Du was anderes.
Ich werde es probieren die Variablen umzubenennen und mal sehen was er macht.

Gruß
Chris

könnte so einfach sein doch leider nix ist .

Keine Chance, alle Funktionen gleichzeitig war gemeint wirklich alle Bedingungen müssen erfüllt sein ... Dies ist so nicht gemeint nein das stimmt.
Also das zuweisen der unterschiedlichen Variablen pro Funktion bewirkt, dass er gar nicht mehr reagiert.

Soll ich alles evtl. in einer Switch Anweisung verschachteln ?

Gruß
Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.09.2014, 21:22
Beitrag #11
RE: delay alternativen zum laufen bringen
Ich werde nacher, wenn ich es nach dem Feierabend noch schaffe, das Ding mal umbauen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.09.2014, 21:33
Beitrag #12
RE: delay alternativen zum laufen bringen
Hi,
als erstes würde ich aus dem taskTrigger ein int oder byte machen und für jede der verschiedenen Aktionen eine Nummer vergeben. Ansonsten setzt Du ja fast immer taskTrigger und dann passiert im Prinzip alles zusammen.
Außerdem: Gewöhn' Dir folgendes ab.
Code:
if (millis()>=taskTimestamp+1000) {
Das gibt Probleme wenn die millis() überlaufen. Folgendermaßen ist es richtig:
Code:
if (millis() - taskTimestamp >= 1000) {
Rein mathematisch mag das das gleiche sein, aber da die ganzen Variablen endliche Wertebereiche haben ist es hier nicht das gleiche.
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
15.09.2014, 21:38
Beitrag #13
RE: delay alternativen zum laufen bringen
Gretchenfrage, da ich nun vom mitlesen her mal annehme das es sich da um einen selbstfahrendes Teil handelt das Hindernisse erkennen soll etc. ...warum machst du keinen Programmlauf so z.B. alle 40 mS wo dann alle Hebel neu gestellt werden ?
So macht man das in der Industrie z.B. auch....dann hat man auch immer das gleiche Reglerverhalten was ja in über die Zeit auch berücksichtigt werden muß.
Diese Taktung kannst du dann entweder über die millis() Funktion steuern oder auch per Timerinterrupt wozu es wieder mal ne Lib gibt, dann könntest im Hauptprogramm noch nebenher unwichtigers Zeugs erledigen wie Anzeige bespaßen etc.
nur mal so am Rande..
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2014, 00:17
Beitrag #14
RE: delay alternativen zum laufen bringen
(15.09.2014 21:33)Thorsten Pferdekämper schrieb:  Das gibt Probleme wenn die millis() überlaufen.
Guter Einwand, Danke!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2014, 08:32
Beitrag #15
RE: delay alternativen zum laufen bringen
Zitat:int taskTrigger=0;

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

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

if (!taskTrigger && (entfernungli <= 100) && (entfernungmitt <= 150) && (entfernungre <= 100) ) //wenn abstand kleiner als 200 dann volle fahrt zurueck
   taskTrigger=5;

if (taskTrigger==1) {
  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==2) {
  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==3) {
  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==4) {
  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 (taskTrigger==5) {
  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;        
      }
  }

   
if (!taskTrigger){
  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);
  }   
  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
  }
}

Hoffe, ich habe einigermaßen erraten können was hier passieren soll (und dabei nichts zerschossen)

gruß lorenz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2014, 17:08
Beitrag #16
RE: delay alternativen zum laufen bringen
@Corvus

PERFEKT !! Läuft genau wie ich es mir vorgestellt habe.

Danke Dir Mann !

Ich schulde Dir was

Gruß
Chris
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 451 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Kann ich in eine For Schleife einen delay einbauen JanGamer11 6 610 05.01.2016 12:34
Letzter Beitrag: Hilgi
  Rampe ohne Delay DC-Motor de_flexus 3 1.929 22.11.2015 13:07
Letzter Beitrag: frank2000
  Doppelblitz ohne Delay cleko 3 850 12.11.2015 08:02
Letzter Beitrag: Bitklopfer
  Langes delay - wie macht man das? Gelegenheitsbastler 17 2.410 02.09.2015 20:48
Letzter Beitrag: Gelegenheitsbastler
  Counter rückwärts laufen lassen???? Haustechno 6 909 10.08.2015 18:26
Letzter Beitrag: Haustechno
  mal wieder ein kleines Problem mit blinken ohne delay :) Sbbfreack 6 1.726 06.07.2015 15:59
Letzter Beitrag: Sbbfreack
  Blink ohne Delay - Merkwürdiger Fehler rave 7 1.826 11.05.2015 06:29
Letzter Beitrag: Bitklopfer
  Multitasking mit millis statt delay LEDstar 2 1.238 15.04.2015 11:25
Letzter Beitrag: Bitklopfer

Gehe zu:


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