#include //připojení knihovny pro LCD displej LiquidCrystal lcd(13, 12, 8, 7, 4, 2); // porty připojení displeje 16x2 k Merkurino 01 int adc_key_port = 0; // port připojení klávesnice Merkurina int adc_key_in = 0; // hodnota stisknutého tlačítka /* enkoderové kolečko */ int enc_A_port=A1; // kde je připojen encoder A int enc_B_port=A2; // kde je připojen encoder B int enc_A = 0; // svítí=1; nesvítí=0 int enc_A_old = 0; // jaké bylo minulé čtení int enc_A_state = 1; // fáze encoderu: 1=nesvítí, 2=z nesvítí do svítí, 3=svítí, 4=z svítí do nesvítí int enc_A_pos = 0; // kde se nachází vozík int enc_A_pos2go = 0; // kam vozík jede int motor_A_1=3; // h-můstek motor A vstup 1 int motor_A_2=5; // h-můstek motor A vstup 2 int x; int y; // pomocné proměnné #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnENTER 4 #define btnESC 5 #define btnNONE 6 void setup() // setup ---------------------------------- { /* Setup encoder pins as inputs */ pinMode(enc_A_port, INPUT); pinMode(enc_B_port, INPUT); lcd.begin(16, 2); // start LCD library lcd.setCursor(0,0); // nastavení pozice kurzoru lcd.print("kde: kam: stav:"); // kde se vozík nachází, kam se má dostat, stav encoderu Serial.begin (9600); Serial.println("Start"); // pošle na seriový port zprávu } // konec setup ---------------------------------- void loop() // hlavní smyčka loop ---------------------------------- { lcd.setCursor(8,1); // umísti kurzor na spodní řádku a 9. pozici //adc_key_in = analogRead(0); // přečti klávesnici //lcd.print(adc_key); enc_A = digitalRead(enc_A_port); // přečti encoder if (enc_A == enc_A_old) { enc_A_state = 1; }; if (enc_A != enc_A_old) { enc_A_state = 2; enc_A_old = enc_A; }; //if (enc_A == 1) and (enc_A_old == 0) { enc_A_state=3; }; //if (enc_A == 1) and (enc_A_old == 1) { enc_A_state=4; }; if (enc_A_pos < enc_A_pos2go) { motor_A_right(); if (enc_A_state == 2) { enc_A_pos = enc_A_pos + 1; } } if (enc_A_pos > enc_A_pos2go) { motor_A_left(); if (enc_A_state == 2) { enc_A_pos = enc_A_pos - 1; } } if (enc_A_pos == enc_A_pos2go) motor_A_stop(); delay(50); lcd.setCursor(0,1); int lcd_key = read_LCD_buttons(); switch (lcd_key) // podle tlačítka vykonej akci { case btnRIGHT: { //if () { } lcd.print("right "); delay(100); break; } case btnLEFT: { lcd.print("left "); delay(100); break; } case btnUP: { lcd.print("+5 ");delay(100); enc_A_pos2go = enc_A_pos2go + 5; break; } case btnDOWN: { lcd.print("-5 ");delay(100); enc_A_pos2go = enc_A_pos2go - 5; break; } case btnENTER: { lcd.print("enter "); break; } case btnESC: { lcd.print("nastavena nula "); delay(300); enc_A_pos2go = 0; break; } case btnNONE: { lcd.print(" "); break; } } lcd.setCursor(0,1); lcd.print(enc_A_pos); //lcd.print(" "); lcd.setCursor(5,1); lcd.print(enc_A_pos2go); //lcd.print(" "); lcd.setCursor(11,1); lcd.print(enc_A_state); //lcd.print(" "); } //konec hlavní smyčka loop ---------------------------------- int motor_A_left(){ // motor_A_left ---------------------------------- analogWrite(motor_A_1, 120); analogWrite(motor_A_2, 0); return 1; } // konec motor_A_left ---------------------------------- int motor_A_right(){ // motor_A_right ---------------------------------- analogWrite(motor_A_1, 0); analogWrite(motor_A_2, 120); return 1; } // konec motor_A_right ---------------------------------- int motor_A_stop(){ // motor_A_stop ---------------------------------- analogWrite(motor_A_1, 0); analogWrite(motor_A_2, 0); return 1; } // konec motor_A_stop ---------------------------------- 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 ---------------