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
Mehrere Wertabfragen
18.06.2016, 15:54
Beitrag #1
Mehrere Wertabfragen
Hi zusammen,

derzeit lese ich mich in die Programmierung des Arduino ein... erste Erfolge gab es schon.

Ich möchte einen Sketch programmieren, der meinen Servo und auch einen Motor steuert. Bislang habe ich zwei verschiedene Sketches dafür, bei denen ich jeweils per Serial-Monitor den Winkel/Geschwindigkeit eingebe.

Jetzt sollen aber beide Sketches zusammengefügt werden, wobei mir nicht klar ist, wie ich zwei verschiedene Werte (Geschwindigkeit, Winkel) in einem Sketch abfragen kann...

Code:
void loop() {
  if (neuer_winkel) {
    neuer_winkel = false;
    if (aktueller_winkel < MIN_WINKEL) {
      aktueller_winkel = MIN_WINKEL;
    } else if (aktueller_winkel > MAX_WINKEL) {
      aktueller_winkel = MAX_WINKEL;
    }

Zitat:void serialEvent() {
geschwindigkeit = Serial.parseInt();
if (Serial.read() == '\n') {
neue_geschwindigkeit = true;
}

Kann mir jemand verraten, wie ich die Eingaben unterscheiden kann ?
Oder kann man die einfach hintereinander einfügen ?

Im späteren Schritt soll das dann via Joystick steuerbar sein.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2016, 16:05
Beitrag #2
RE: Mehrere Wertabfragen
Du solltest dir angewöhnen, immer den kompletten Sketch zu posten.
Aus den Fragmenten kann man schwer erkennen wo es hin gehen soll.
Setup und Deklaration gehören immer dazu.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2016, 16:18 (Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2016 20:36 von blebbens.)
Beitrag #3
RE: Mehrere Wertabfragen
Hast Recht...

Code:
#include <Servo.h>

const unsigned long BAUD_RATE = 9600;
const unsigned int MOTOR_PIN = 3;
const unsigned int MAX_GESCHWINDIGKEIT = 255;
const unsigned int MOTOR_PAUSE = 15;
const unsigned int MIN_WINKEL = 2;
const unsigned int MAX_WINKEL = 179;
const unsigned char MOTOR_PIN1 = 9;
Servo servo;
bool neuer_winkel = false;
bool neue_geschwindigkeit = false;
unsigned int aktueller_winkel = 0;
int geschwindigkeit = 0;

void setup() {
  Serial.begin(BAUD_RATE);
  pinMode(MOTOR_PIN, OUTPUT);
  servo.attach(MOTOR_PIN1);
  delay(MOTOR_PAUSE);
  servo.write(1);
  delay(MOTOR_PAUSE);
}

void serialEvent1() {
  geschwindigkeit = Serial.parseInt();
  if (Serial.read() == '\n') {
    neue_geschwindigkeit = true;
  }
}

void serialEvent2() {
  aktueller_winkel = Serial.parseInt();
  if (Serial.read() == '\n') {
    neuer_winkel = true;
  }
}

void loop() {
  if (neue_geschwindigkeit) {
    neue_geschwindigkeit = false;
    geschwindigkeit = min(geschwindigkeit, MAX_GESCHWINDIGKEIT);
    Serial.print("Geschwindigkeit: ");
    Serial.println(geschwindigkeit);
    analogWrite(MOTOR_PIN, geschwindigkeit);    
    delay(1000);
  }
  if (neuer_winkel) {
    neuer_winkel = false;
    if (aktueller_winkel < MIN_WINKEL) {
      aktueller_winkel = MIN_WINKEL;
    } else if (aktueller_winkel > MAX_WINKEL) {
      aktueller_winkel = MAX_WINKEL;
    }
    Serial.print(aktueller_winkel);
    Serial.println(" Grad.");
    servo.write(aktueller_winkel);
    delay(MOTOR_PAUSE);
  }
}

Da sind sicherlich schwere Fehler drinnen...
Noch ist mir nicht klar, wie man mehrere Sketches zusammenfügt. Lese seit 2 Stunden bzw bastele vielmehr... macht Spass.

Keiner ?

Möchte nur per Tastatur die Geschwindigkeit des DC-Motors und den Winkel des Servos eingeben können.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2016, 22:31
Beitrag #4
RE: Mehrere Wertabfragen
Hey!

Wenn du alles über einen seriellen Monitor steuern willst musst du entweder:
- Kennzeichen für Servo & Motor bei der Eingabe setzten (z.B. "S30" = Servo 30°, "M200" = Motor mit 200er-PWM-Signal)
- oder immer zwischen Servoeingabe und Motoreingabe wechseln, sobald ein Wert eingegeben ist.

Bei 1. musst du immer den 1. Buchstaben auslesen und mit if's überprüfen, dann daraus schließend einen Wert zuteilen.
Bei 2. einfache eine Flag hinzufügen die dann nach jedem Einlesen ändern.

mfg Scheams Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2016, 22:34
Beitrag #5
RE: Mehrere Wertabfragen
Hm, als absoluter Newbie verstehe ich das noch nicht ganz...

Kannst Du den Code evtl anpassen, sodass ich das für die folgenden Sketches weiss?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2016, 22:58
Beitrag #6
RE: Mehrere Wertabfragen
Ok! Sorry dachte evtl. du könntest es schaffen. Blush

Also zu 1. sollte sowas hier funktionieren:

Code:
// sobald mehr als 1 Byte zur Verfügung steht, da das 1. als "Adresse" nötig ist
  if (Serial.available() > 1) {
    char firstChar = Serial.read(); // 1. char auslesen & mit if's auswerten
    if (firstChar == 'S') { // Servoansteuerung wenn z.B. S20
      aktueller_winkel = Serial.parseInt(); // nummer danach auswerten und speichern
      Serial.print("Servo (°): ");
      Serial.println(aktueller_winkel);
      neuer_winkel = true;
    }
    else if (firstChar == 'M') {
      geschwindigkeit = Serial.parseInt();
      Serial.print("Motor (PWM): ");
      Serial.println(geschwindigkeit);
      neue_geschwindigkeit = true;
    }
    else { // wenn nichts zutrifft
      while (Serial.available() > 0) {
        firstChar = Serial.read(); // Buffer leeren
      }
    }
  }

Zu 2.:

Code:
// oben Variable deklarieren:
bool flag = 0;

if (Serial.available() > 0) {
    if (flag == 0) {
      aktueller_winkel = Serial.parseInt();
      Serial.print("Servo (°): ");
      Serial.println(aktueller_winkel);
      neuer_winkel = true;
      flag = 1; // umschalten zu Motor-Auslesung
    }
    else if (flag == 1) {
      geschwindigkeit = Serial.parseInt();
      Serial.print("Motor (PWM): ");
      Serial.println(geschwindigkeit);
      neue_geschwindigkeit = true;
      flag = 0; // umschalten zu Servo-Auslesung
    }
  }

Wie und ob "void serialEvent(){}" funktioniert kann ich dir nicht sagen, da ich nie damit gearbeitet habe.
Die Codes hab ich kurz getestet und funktionieren auch, ich habe den Code aber im loop-Teil gehabt.

mfg Scheams Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  mehrere Taster entprellen Kitt 15 508 24.10.2016 21:17
Letzter Beitrag: georg01
  Taster für mehrere Funktionen matthias3579 5 345 16.08.2016 16:00
Letzter Beitrag: StephanBuerger
  2 und mehrere Led´s mit Fernbedienung AN / AUS + Blinkfunktion Golffahrer 22 939 07.06.2016 11:31
Letzter Beitrag: hotsystems
  Mehrere Abläufe gleichteitig mit "Millis" MarkusSpielt 3 659 11.04.2016 18:23
Letzter Beitrag: MarkusSpielt
  Mehrere MCP23017 dynamisch verwenden itsy 5 613 14.02.2016 13:22
Letzter Beitrag: itsy
  I ch brauche mehrere SDA und SCL am MEGA2560 arduinofan 5 753 10.01.2016 21:15
Letzter Beitrag: arduinofan
  Mehrere Geräte über eine IR Fernbedienung Respun 20 2.002 07.01.2016 23:51
Letzter Beitrag: hotsystems
  mehrere Analoge eingänge seriell ausgeben rieders 5 791 28.11.2015 09:55
Letzter Beitrag: Bitklopfer
  Wie frag ich mehrere Taster in einem Programm ab? blowingwater 7 1.126 02.06.2015 19:05
Letzter Beitrag: blowingwater
Question MEHRERE Vorgänge parallel ausführen? Much 3 909 26.05.2015 13:39
Letzter Beitrag: tito-t

Gehe zu:


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