Hausaufgaben8 Lösung
Quelltext
/* Servo Bibliothek bereitstellen */ #include <Servo.h> Servo usServo; /* Globale Konstanten */ static const byte SERVO_PORT_u8 = 9; // Port des Servo Motors static const int COM_GESCHW_s16 = 9600; // Baude /* 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 /* Globale Variablen */ boolean JoystickFreigabe_bit = 1; // Entprellen des Joysticks int ServoPosition_s16 = 90; // Mittelstellung 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(COM_GESCHW_s16); // Start des seriellen Monitors e usServo.attach(SERVO_PORT_u8); // Servo einbinden usServo.write(ServoPosition_s16); // Der Servo soll sich an die Startposition drehen Serial.println("SETUP beendet"); Serial.println("Bitte Joystick bedienen (L, R, Eingabe)."); } void loop(void) /* Zyklische Abfrage */ { /* Abfrage des Joysticks */ delay(1); if((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_LINKS) == LOW) || (digitalRead(JOYSTICK_RECHTS) == LOW) || (digitalRead(JOYSTICK_EINGABE) == LOW)) { JoystickFreigabe_bit = false; if(digitalRead(JOYSTICK_LINKS) == LOW){ Serial.println("Joystick: LINKS gedrückt"); ServoPosition_s16=ServoPosition_s16+5; if (ServoPosition_s16>180){ ServoPosition_s16 = 180; // Oberes Limit erreicht } } else if(digitalRead(JOYSTICK_RECHTS) == LOW){ Serial.println("Joystick: RECHTS gedrückt"); ServoPosition_s16=ServoPosition_s16-5; if (ServoPosition_s16<0){ ServoPosition_s16 = 0; // Unteres Limit erreicht } } else if(digitalRead(JOYSTICK_EINGABE) == LOW){ Serial.println("Joystick: EINGABE gedrückt"); ServoPosition_s16 = 90; } usServo.write(ServoPosition_s16); Serial.print("ServoPosition_s16: "); Serial.println(ServoPosition_s16); } } } else { JoystickFreigabe_bit = true; // Taster wieder freigeben } }
→ zurück zum Hauptartikel: Termin 8: Joystick einlesen