/******************************************************* Tento program otestuje Merkurino 01 s potenciometrem a modelářským servem Ladislav Vohralik 2014, MerkurRobot.cz ********************************************************/ #include // připojení knihovny LiquidCrystal #include // připojení knihovny Servo Servo myservo; // vytvoření objektu servo pro ovládání serva // použité piny pro Merkurino 01 LCD panel LiquidCrystal lcd(13, 12, 8, 7, 4, 2); // definice proměnných int lcd_key = 0; int adc_key_in = 0; int val; // proměnná pro hodnotu serva int pot; // proměnná pro hodnotu potenciometru int pot1; // proměnná pro hodnotu potenciometru int potpin = 2; // analog pin (A2) použitý pro připojení potenciometru #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnENTER 4 #define btnESC 5 #define btnNONE 6 int read_LCD_buttons() // procedura pro čtení tlačítek --------------- { adc_key_in = analogRead(0); // přečti klávesnici na A0 if (adc_key_in > 1000) return btnNONE; // žádné tlačítko není stisknuto // pro Merkurino 01 plati tyto hodnoty: if (adc_key_in < 40) return btnESC; if (adc_key_in < 110) return btnLEFT; if (adc_key_in < 300) return btnDOWN; if (adc_key_in < 450) return btnUP; if (adc_key_in < 700) return btnRIGHT; if (adc_key_in < 850) return btnENTER; return btnNONE; // žádné tlačítko není stisknuto } // konec procedura pro čtení tlačítek --------------- void setup() // procedura setup --------------- { Serial.begin(9600); pinMode(A1, OUTPUT); // nastavení "vstupu" A1 jako "výstup" myservo.attach(A1); // servo je připojeno na "vstup" A1 lcd.begin(16, 2); // start LCD library lcd.setCursor(0,0); // nastavení pozice kurzoru lcd.print("Stiskni tlacitko"); } // konec procedura setup --------------- void loop() // začátek nekonečné smyčky --------------- { lcd.setCursor(8,1); // nastavení pozice kurzoru lcd.print(millis()/1000); // zobraz sekundy od zapnutí lcd.setCursor(0,1); // nastavení pozice kurzoru lcd_key = read_LCD_buttons(); // read the buttons val = adc_key_in; val = map(val, 0, 1023, 0, 179); // změní měřítko hodnoty z potenciometru na servo (rozsah 0-1023 na 0-179) switch (lcd_key) // podle stisknutého tlačítka zobrazí text a natočí servo: { case btnRIGHT: { lcd.print("vpravo "); myservo.write(val); // natočí servo podle tlačítka vpravo break; } case btnLEFT: { lcd.print("vlevo "); myservo.write(val); // natočí servo podle tlačítka vlevo break; } case btnUP: { lcd.print("nahoru "); myservo.write(val); // natočí servo podle tlačítka nahoru break; } case btnDOWN: { lcd.print("dolu "); myservo.write(val); // natočí servo podle tlačítka dolu break; } case btnENTER: { lcd.print("potvrd "); myservo.write(val); // natočí servo podle tlačítka potvrd break; } case btnESC: { lcd.print("zpet "); myservo.write(val); // natočí servo podle tlačítka zpet break; } case btnNONE: // když není stisknuto žádné tlačítko, natočí servo podle potenciometru: { lcd.print("nic "); pot = analogRead(potpin); // přečti potenciometr na A2 pot = map(pot, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180) myservo.write(pot); // sets the servo position according to the scaled value if ( pot!= pot1 ){ // uložení stávající hodnoty potenciometru pot1 = pot; // aby se posílala pouze změna (pootočení) Serial.println(pot); } break; } } } // konec nekonečné smyčky ---------------