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