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
Steuerung von mehreren Programmabläufen
04.11.2015, 17:27 (Dieser Beitrag wurde zuletzt bearbeitet: 04.11.2015 17:28 von hotsystems.)
Beitrag #9
RE: Steuerung von mehreren Programmabläufen
Da fragst du vor der Anweisung "if (data == '1')" eine Variable (LOW) per if-Anweisung ab, die zu Anfang gleich auf HIGH gesetzt wird und am Ende des Durchlaufes wieder zurück auf LOW gesetzt wird. So prüft er die Anweisung "if (data == '1')" erst wieder wenn er durch ist.

Ich hoffe, das war so verständlich.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 19:58
Beitrag #10
RE: Steuerung von mehreren Programmabläufen
Ja das Prinzip habe ich verstanden aber irgendwie scheine ich noch einen Denkfehler zu haben...
Code:
#include <AFMotor.h>

AF_Stepper motor(200, 2);
int x;

void setup()

{
  motor.setSpeed (30);
  Serial.begin(9600);

}

void loop()
{

  if (Serial.available());
  { char data = Serial.read();
  x=1;                                                        //Setzen der weiteren Startbedingung
    if (x==1)                                                //Abfrage Startbedingung
    {
     if (data =='1')
      { x=0;                                                  //Blockieren
        Serial.println("Programm1");
        motor.step (400,FORWARD,DOUBLE);
        motor.step (400,BACKWARD,DOUBLE);
        x =1;                                                 //Freigeben
      }
  
     if (data =='2')
      { x=0;
        Serial.println("Programm2");
        motor.step (100,FORWARD,DOUBLE);
        motor.step (100,BACKWARD,DOUBLE);
        x=1;
      }
       }
  }    
}
Habe das jetzt einfach mal mit der Variable x versucht umzusetzen und sozusagen eine weiter Startbedingung eingefügt aber so ganz will das nicht funktionieren. Ich bekomme zwar keinen Fehler aber trotzdem kann ich im Programmablauf weiter Befehle geben...
Könnte mir vlt einer ein Beispiel geben wie das genau gemeint war?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 20:14
Beitrag #11
RE: Steuerung von mehreren Programmabläufen
Ich glaube das es ein Gedankenfehler war, da die Eingabe aus dem SerialMonitor ja noch gelesen wird, dann muss das verhindert werden, indem die Anweisung for dem Einlesen gesetzt wird.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 21:40
Beitrag #12
RE: Steuerung von mehreren Programmabläufen
Wenn ich die Abfrage noch vor dem Einlesen setze funktioniert es auch irgendwie nicht. Ich kann zwar verhindern das der Ablauf startet aber nicht unterbrechen. Ich habe fast das Gefühl, als ob das Programm sobald es die erste "Hürde" genommen hat sich nicht mehr unterbrechen lässt, da es ohne Unterbrechung die Daten vom PC einließt. Gibt es keine Einstellung oder Befehl der dem Programm so etwas wie:
"1 Eingabe annehmen-->Durchführen und Eingabemöglichkeit unterbrechen " sagt?
Vlt stehe ich aber auch einfach nur gewaltig auf dem Schlauch..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 21:57
Beitrag #13
RE: Steuerung von mehreren Programmabläufen
Hallo,

solange keine neuen Daten von "Serial.read()" kommen bleibt der Inhalt von "data" unverändert der alte Wert. Deshalb werden auch immer wieder die entsprechenden Anweisungen ausgeführt. Du musst also "data" rücksetzen wenn die gewollten Anweisungen einmal ausgeführt wurden.

Versuche es bitte mal damit:
Code:
#include <AFMotor.h>

AF_Stepper motor(200, 2);
int x;

void setup()

{
  motor.setSpeed (30);
  Serial.begin(9600);

}

void loop()
{

  if (Serial.available());
  { char data = Serial.read();
  x=1;                                                        //Setzen der weiteren Startbedingung
    if (x==1)                                                //Abfrage Startbedingung
    {
     if (data =='1')
      { x=0;                                                  //Blockieren
        Serial.println("Programm1");
        motor.step (400,FORWARD,DOUBLE);
        motor.step (400,BACKWARD,DOUBLE);
        x =1;                                                 //Freigeben
        data = '0';
      }
  
     if (data =='2')
      { x=0;
        Serial.println("Programm2");
        motor.step (100,FORWARD,DOUBLE);
        motor.step (100,BACKWARD,DOUBLE);
        x=1;
        data = '0';
      }
       }
  }    
}

Gruß
Arne

p.s. Sinn und Zwecke der Variablen "x" verstehe ich leider nicht. Confused

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 22:22
Beitrag #14
RE: Steuerung von mehreren Programmabläufen
Funktioniert leider auch nicht...
hier nochmal der Code ohne die Variable X. Das war lediglich ein Versuch eine weitere Startbedingung einzubringen.
Code:
#include <AFMotor.h>

AF_Stepper motor(200, 2);


void setup()

{
  motor.setSpeed (30);
  Serial.begin(9600);
}

void loop()
{
char data = Serial.read();

  if (Serial.available());
  {        
    if (data =='1')
     {
        Serial.println("Programm1");
        motor.step (400,FORWARD,DOUBLE);
        motor.step (400,BACKWARD,DOUBLE);
        data = '0';
     }
  
    if (data =='2')
      {
        Serial.println("Programm2");
        motor.step (100,FORWARD,DOUBLE);
        motor.step (100,BACKWARD,DOUBLE);
        data = '0';
      }

    }
}
Trotzdem läuft das Programm 1 z.B. 5 mal hintereinander ab wenn ich während dies läuft 5 mal die Eingabe 1 tätige.
Habe auch noch versucht eine weiter if-Bedingung für data = '0' einzufügen aber hat auch nichts gebracht. Kann man die Eingabe nicht irgendwie sperren?
Lg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 22:33 (Dieser Beitrag wurde zuletzt bearbeitet: 04.11.2015 22:45 von hotsystems.)
Beitrag #15
RE: Steuerung von mehreren Programmabläufen
(04.11.2015 22:22)TimF schrieb:  Funktioniert leider auch nicht...
hier nochmal der Code ohne die Variable X. Das war lediglich ein Versuch eine weitere Startbedingung einzubringen.

Trotzdem läuft das Programm 1 z.B. 5 mal hintereinander ab wenn ich während dies läuft 5 mal die Eingabe 1 tätige.
Habe auch noch versucht eine weiter if-Bedingung für data = '0' einzufügen aber hat auch nichts gebracht. Kann man die Eingabe nicht irgendwie sperren?
Lg

Du musst ihm beibringen, die Variable "data" nur einmal zu lesen. Auch wenn am Ende "data = 0" wird liest er es erneut ein und startet wieder durch weil "data" wieder einen anderen Wert hat.

Edit:
Ich denke, du kannst es so lösen:

Code:
if (data =='1')
  {
     for (int a = 0; a < 2; a++)
        {
         Serial.println("Programm1");
         motor.step (400,FORWARD,DOUBLE);
         motor.step (400,BACKWARD,DOUBLE);
         //data = '0';
      }
}

Das könnte so passen. Er läuft nur einmal durch.

Nur die Variable muss global deklariert werden.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 22:43
Beitrag #16
RE: Steuerung von mehreren Programmabläufen
Dann halt die Holzhammermethode: Tongue
Code:
#include <AFMotor.h>

AF_Stepper motor(200, 2);


void setup()

{
  motor.setSpeed (30);
  Serial.begin(9600);
}

void loop()
{
char data = Serial.read();

  if (Serial.available());
  {        
    if (data =='1')
     {
        Serial.println("Programm1");
        Serial.end();
        Serial.flush();
        motor.step (400,FORWARD,DOUBLE);
        motor.step (400,BACKWARD,DOUBLE);
        data = '0';
        Serial.begin(9600);
     }
  
    if (data =='2')
      {
        Serial.println("Programm2");
        Serial.end();
        Serial.flush();
        motor.step (100,FORWARD,DOUBLE);
        motor.step (100,BACKWARD,DOUBLE);
        data = '0';
        Serial.begin(9600);
      }

    }
}

Aber warum soll das Programm 1 nur einmal laufen wenn du 5 mal die 1 rüberschickst?
Wie oft soll es denn laufen wenn du 10 mal die 1 rüberschickst?

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Infrarot zu RS232 für Steuerung DG0JG 46 681 22.10.2016 11:35
Letzter Beitrag: hotsystems
  Slider Steuerung, Programmierung blueblack 21 604 16.10.2016 22:31
Letzter Beitrag: blueblack
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 116 14.10.2016 21:40
Letzter Beitrag: hotsystems
  Hilfe bei Servo-steuerung Innocence 7 800 23.02.2016 11:00
Letzter Beitrag: hotsystems
  Steuerung eines Remotekopfes mit Joystick, 2Stck DC Motore und Arduino max123 6 606 30.12.2015 14:56
Letzter Beitrag: max123
  Milight Openmili Steuerung gronph 22 3.404 23.12.2015 11:18
Letzter Beitrag: Phil333
  propleme beim programmieren einer steuerung für funksteckdosen purzele06 18 3.618 19.11.2015 11:06
Letzter Beitrag: Phil94
  Komplexer Kamera Timelaeps Steuerung (Gimbal/Slider Kombination) fknobel 6 814 25.10.2015 14:25
Letzter Beitrag: Klaus(i)
  Pendelbahn (Seilbahn) Steuerung K@mi 34 5.015 30.07.2015 08:15
Letzter Beitrag: fraju
  Modellauto mit Ir-Steuerung und Abstandssensor asd 1 774 09.03.2015 09:18
Letzter Beitrag: marcus

Gehe zu:


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