AlphaBot: Joystick einlesen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autor: Prof. Dr.-Ing. Schneider

Inhalt des 8. Termins

  • Wir lese den Joystick ein.
  • Wir entprellen die Joystick-Eingabe.
  • Wir geben den Werte im sereiellen Monitor aus.

Quelltext

/* Deklaration der Joystick Ports in Fahrtrichtung */
#define    JOYSTICK_RECHTS  A1
#define    JOYSTICK_UNTEN   A2
#define    JOYSTICK_OBEN    A3
#define    JOYSTICK_EINGABE A4
#define    JOYSTICK_LINKS   A5

boolean JoystickFreigabe_bit = 1; /* Entprellen des Joysticks */

void setup(void) /* Einmalig ausgeführt */
{
  /* Der Joystick wird initialisiert */
  pinMode(JOYSTICK_OBEN, INPUT);
  digitalWrite(JOYSTICK_OBEN, HIGH);
  pinMode(JOYSTICK_UNTEN, INPUT);
  digitalWrite(JOYSTICK_UNTEN, HIGH);
  pinMode(JOYSTICK_LINKS, INPUT);
  digitalWrite(JOYSTICK_LINKS, HIGH);
  pinMode(JOYSTICK_RECHTS, INPUT);
  digitalWrite(JOYSTICK_RECHTS, HIGH);
  pinMode(JOYSTICK_EINGABE, INPUT);
  digitalWrite(JOYSTICK_EINGABE, HIGH);
 
  Serial.begin(9600);   // Start des Seriellen Monitors mit 9600 Baude  
}

void loop(void) /* Zyklische Abfrage */
{
/* Abfrage des Joysticks */
  delay(1);

  if((digitalRead(JOYSTICK_OBEN) == LOW) || (digitalRead(JOYSTICK_UNTEN) == LOW) || (digitalRead(JOYSTICK_LINKS) == LOW) || (digitalRead(JOYSTICK_RECHTS) == LOW) || (digitalRead(JOYSTICK_EINGABE) == LOW))
  {  
    if(JoystickFreigabe_bit == true)
    {
      delay(10); //10 ms warten - Taster entprellen
      if((digitalRead(JOYSTICK_OBEN) == LOW) || (digitalRead(JOYSTICK_UNTEN) == LOW) || (digitalRead(JOYSTICK_LINKS) == LOW) || (digitalRead(JOYSTICK_RECHTS) == LOW) || (digitalRead(JOYSTICK_EINGABE) == LOW))
      {
        JoystickFreigabe_bit = false;
        if(digitalRead(JOYSTICK_OBEN) == LOW){
          Serial.println("Joystick: OBEN gedrückt");
        }
        else if(digitalRead(JOYSTICK_UNTEN) == LOW){
          Serial.println("Joystick: UNTEN gedrückt");
        }
        else if(digitalRead(JOYSTICK_LINKS) == LOW){
          Serial.println("Joystick: LINKS gedrückt"); 
        }
        else if(digitalRead(JOYSTICK_RECHTS) == LOW){
          Serial.println("Joystick: RECHTS gedrückt");
        }
        else if(digitalRead(JOYSTICK_EINGABE) == LOW){
          Serial.println("Joystick: EINGABE gedrückt");
        }
      }
    }
  }
  else {
    JoystickFreigabe_bit = true; // Taster wieder freigeben
  }
}

Hausaufgaben bis zum 9. Termin

  • Steuert den US-Servo mit dem Joystick im Bereich 0°-180° an.
  • LINKS: Drehung nach Links (180°).
  • RECHTS: Drehung nach Rechts (0°).
  • EINGABE: Grehung auf die Mitte (90°).

Hinweis: Ursprünglich war die Aufgabe die Antriebsmotoren zu steuern. Leider habe ich festgestellt, dass diese dieselben analogen IO-Pins nutzen (A1-A5). Das kann leider nicht zusammen funktionieren.

Musterlösung


→ zurück zum Hauptartikel: Projekt Alf