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ß

"It is better to make a good copy, than to have a bad original"

Hardware: SainSmart Mega 2560 R3 + 3,2" LCD-Touch-Screen/Arduino Duemilanove
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
  Leds dimmen ohne delay jennerlein 9 676 20.04.2018 02:04
Letzter Beitrag: Corvus
  2 Schrittmotoren laufen lassen Reinhard112 20 1.436 09.04.2018 19:16
Letzter Beitrag: Tommy56
  sensordaten auf OLED bringen Klawino 20 1.160 12.03.2018 12:00
Letzter Beitrag: Tommy56
  Delay summiert sich auf Moe 7 568 26.02.2018 22:50
Letzter Beitrag: hotsystems
  Buzzer ohne Delay Harry 9 858 23.01.2018 12:30
Letzter Beitrag: Tommy56
  Arduino Software Serial - Delay notwendig? Zipfel1 18 1.468 02.01.2018 11:59
Letzter Beitrag: Tommy56
  NeoPixels: Sketch will nicht - Problem mit delay? Zabsi 5 921 22.08.2017 15:17
Letzter Beitrag: Tommy56
  2 Servos ohne delay steuern Ratlos 27 3.950 26.07.2017 20:43
Letzter Beitrag: MicroBahner
  LEDs ansteuern ohne Delay mir MIDI abfrage OnkelPelle 11 1.611 20.07.2017 22:35
Letzter Beitrag: hotsystems
  delay(...) im Code ok? donut 4 891 08.06.2017 20:16
Letzter Beitrag: donut

Gehe zu:


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