-
        

Ergebnis 1 bis 4 von 4

Thema: W-A-S-D Steuerung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2013
    Beiträge
    7

    W-A-S-D Steuerung

    Anzeige

    Hey,

    ich würde gerne meinen Roboter per Bluetooth mit 'W' 'A' 'S' 'D' steuern können.
    Das funktioniert auch bereits allerdings nicht so ganz wie ich mir das vorstelle.

    Ich drücke 'W' und der Robo rattert los, allerdings sollte er nur so lange fahren, wie auch die Taste 'W' gedrückt ist.

    if 'W' - go forward - else stop : funktioniert nicht so ganz weil 'kein Tasten druck' nicht unter else fällt.

    if else
    Code:
    #include <AFMotor.h>
    
     char value;
    
     AF_DCMotor motorL(1);
     AF_DCMotor motorR(2);
    
    
    void setup(){
      Serial1.begin(19200);
      motorR.setSpeed(255);
      motorL.setSpeed(245);
      motorR.run(RELEASE);
      motorL.run(RELEASE);
    }
    
    
    void loop(){
      
    if (Serial1.available() >0){
       value = Serial1.read();
    }
    if (value == 'w'){
       motorR.run(FORWARD);
       motorL.run(FORWARD);
       }
    
    else if (value == 'a'){
       motorR.run(FORWARD);   
       motorL.run(BACKWARD);
       }
    
    else if (value == 's'){
       motorR.run(BACKWARD);   
       motorL.run(BACKWARD);
       }
    
    else if (value == 'd'){
       motorR.run(BACKWARD);   
       motorL.run(FORWARD);
       }
    
    else{
       motorR.run(RELEASE);
       motorL.run(RELEASE);
       }
    
    }
    Switch Case
    Code:
    #include <AFMotor.h>
    
     char value;
    
     AF_DCMotor motorL(1);
     AF_DCMotor motorR(2);
    
    
    void setup(){
      Serial1.begin(19200);
      motorR.setSpeed(255);
      motorL.setSpeed(245);
      motorR.run(RELEASE);
      motorL.run(RELEASE);
    }
    
    
    void loop(){
      
    if (Serial1.available()){
      value = Serial1.read();
    }
    
    switch(value){
       case 'w':
       motorR.run(FORWARD);
       motorL.run(FORWARD);
       break;
    
       case 'a':
       motorR.run(FORWARD);
       motorL.run(BACKWARD);
       break;
    
       case 's':
       motorR.run(BACKWARD);
       motorL.run(BACKWARD);
       break;
       
       case 'd':
       motorR.run(BACKWARD);
       motorL.run(FORWARD);
       break;
       
       default:
       motorR.run(RELEASE);
       motorL.run(RELEASE);
       }
    }
    Wenn keine Eingabe erfolgt dürfte doch diese if Bedingung false sein oder?
    Allerdings kommt er hier nur ins stockern.
    Code:
    if (Serial1.available() >0){
       value = Serial1.read();
    }
    else{
       motorR.run(RELEASE);
       motorL.run(RELEASE);
    }


    Bitte um Rat

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265
    Ich würde vorschlagen du passt dein Computer programm (auf der PC seite) so an, dass wenn z.B. die W Taste losgelassen wurde, der Stopbefehl gesendet wird.

    Ansonsten könnte man sich so ne Art Timeout einbauen, dass nicht jedes Mal wenn keine Daten vorhanden sind (Was ziemlich oft vorkommen kann) sofort angehalten wird, wodurch das ruckeln entsteht.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2013
    Beiträge
    7
    Hey shedepe,
    vielen Dank für die beiden Tipps, werde das mal probieren.
    Zuerst die Timeout Funktion, da mein Computer Programm auf der Pc-Seite aktuell nur ein Terminal Programm ist.

    Das mit dem Timeout verstehe ich so:
    Er überprüft in bestimmten Abständen, ob noch Daten vorhanden sind, wenn nicht dann bricht er nach der bestimmten Zeit ab.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.01.2005
    Ort
    Baden-Württemberg
    Alter
    37
    Beiträge
    127
    Ich verwende die Arduino Motor Shield R3

    Code:
    #define PWM_RECHTS 3
    #define BREMSE_LINKS 8
    #define BREMSE_RECHTS 9
    #define PWM_LINKS 11
    #define MOTOR_RECHTS 12
    #define MOTOR_LINKS 13
    
    void setup() {
      Serial.begin(9600);
      pinMode(PWM_RECHTS, OUTPUT);
      pinMode(BREMSE_LINKS, OUTPUT);
      pinMode(BREMSE_RECHTS, OUTPUT);
      pinMode(PWM_LINKS, OUTPUT);
      pinMode(MOTOR_RECHTS, OUTPUT);
      pinMode(MOTOR_LINKS, OUTPUT);
    }
    
    void loop() {
      while(Serial.available()){
        char getData = Serial.read();
        {
          if (getData == 'w') {
            Vorwaerts();
          }
          else {
            Bremsen();
          }
        }
      }
    }
    
    
    void Vorwaerts() {
      digitalWrite(MOTOR_RECHTS, HIGH);
      digitalWrite(BREMSE_RECHTS, LOW);
      analogWrite(PWM_RECHTS, 255);
      
      digitalWrite(MOTOR_LINKS, HIGH);
      digitalWrite(BREMSE_LINKS, LOW);
      analogWrite(PWM_LINKS, 255);
    }
    
    void Bremsen() {
      digitalWrite(BREMSE_RECHTS, HIGH);
      analogWrite(PWM_RECHTS, 0);
      
      digitalWrite(BREMSE_LINKS, HIGH);
      analogWrite(PWM_LINKS, 0);
    }

Ähnliche Themen

  1. PC- Steuerung
    Von Andrew7 im Forum Asuro
    Antworten: 19
    Letzter Beitrag: 18.11.2006, 17:46
  2. IP Steuerung
    Von continental_gt im Forum Elektronik
    Antworten: 16
    Letzter Beitrag: 11.04.2006, 14:33
  3. Steuerung des Bots über Graupner RC-Steuerung
    Von Toastbrot im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 23.12.2004, 14:18
  4. IR-Steuerung
    Von Sahaquiel im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 27.07.2004, 20:55
  5. Pc Steuerung
    Von Albanac im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 15
    Letzter Beitrag: 04.04.2004, 17:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •