/* ===================================
* Joystick (Sub)
*
* by computerarchiv-muenchen.de
*
* http://demo14.makercafe-muenchen.de
* ===================================
*/
#define SERVO_X 11 // PWM-Pin für Servo X
#define SERVO_Y 10 // PWM-Pin für Servo Y
#define JOYSTICK_X A0 // Pin für Joystick-X-Achse
#define JOYSTICK_Y A1 // Pin für Joystick-Y-Achse
#include <LiquidCrystal_I2C.h> // Funktionsbibliothek für I2C-LCD-Anzeige einbinden
LiquidCrystal_I2C LCD( 0x27, 16, 2 ); // LCD-Objekt aus Funktionsbibliothek für I2C-LCD-Anzeige erstellen
#include <Servo.h> // Funktionsbibliothek für Servo einbinden
Servo meinServoX; // erstes Servo-Objekt aus Funktionsbibliothek für Servo erstellen
Servo meinServoY; // zweites Servo-Objekt aus Funktionsbibliothek für Servo erstellen
void setup() {
LCD.init(); // LCD initialisieren
LCD.backlight(); // Hintergrundbeleuchtung an
LCD.print( "Hallo Welt !" ); // Text auf LCD ausgeben
meinServoX.attach( SERVO_X ); // ersten Servo initialisieren
meinServoY.attach( SERVO_Y ); // zweiten Servo initialisieren
}
void loop() {
bewege( 'X', JOYSTICK_X ); // Zahlenwert anzeigen
bewege( 'Y', JOYSTICK_Y ); // Zahlenwert anzeigen
}
void bewege( char achse, int anschluss ) {
int spalte; // Spalten-Variable deklarieren
char buchstabe; // Buchstaben-Variable deklarieren
int joystick = analogRead( anschluss ); // Potentiometer-Wert für X-Wert auslesen
int winkel = map( joystick, 0, 1023, 0, 180 ); // Servo-Position für ersten Servo aus X-Wert berechnen
if( achse == 'X' ) { // wenn Servo gleich meinServoX
spalte = 0; // dann Spalten-Inhalt mit 0 belegen
meinServoX.write( winkel ); // ersten Servo in Servo-Position bringen
}
else {
spalte = 9; // sonst Spalten-Inhalt mit 9 belegen
meinServoY.write( winkel ); // zweiten Servo in Servo-Position bringen
}
LCD.setCursor( spalte, 1 ); // Text-Position bestimmen
LCD.print( achse ); // Buchstaben ausgeben
LCD.print( ": " ); // Text ausgeben
LCD.print( winkel ); // Wert ausgeben
LCD.print( " " ); // alte, vorhandene Ziffern mit Leerzeichen überschreiben
}