/* Rotor por tiempo LU4EG 28/01/2020 */ #include LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //(rs enabled, d4, d5, d6, d7) int motor_izquierda = 13;//pin 13 BUILTIN LED int motor_derecha = 12; //pin 12 int pulsador_menu = 11;//pin 11 int pulsador_izquierda = 8;//pin 8 int pulsador_derecha = 9; //pin 9 int pulsador_modo = 10; //pin 10 int t5g = 833;// tiempo de giro para 5 grados 1 vuelta/60seg = 833, 1 vuelta/90seg = 1250, boolean modo = 1; boolean comando ; int cambio = 0; int delta = 0; int actual = 0; int actualSetup = 0; int actualOld = 0; int modolOld = 0; int viejo = 1000; int pide = 0; #include int addr = 0; int addr2 = 1; int addr3 = 2; int loByte = 0; int hiByte = 0; void setup() { Serial.begin(9600); pinMode(motor_izquierda , OUTPUT); pinMode(motor_derecha , OUTPUT); pinMode(pulsador_menu , INPUT_PULLUP); pinMode(pulsador_izquierda , INPUT_PULLUP); pinMode(pulsador_derecha , INPUT_PULLUP); pinMode(pulsador_modo , INPUT_PULLUP); actual = EEPROM.read(addr); t5g = EEPROM.read(addr2); lcd.begin (16, 2); ////////////////////////////////////////////////////////////// lcd.clear(); if (actual == actual) { do { delay(500); lcd.setCursor(0, 0); //(x y) lcd.print("Mueva a 0 grados"); lcd.setCursor(0, 1); //(x y) lcd.print(" y oprima Menu "); } while (digitalRead(pulsador_menu) == HIGH); ////////////////////////////////////////////////////// do { delay(120); if (digitalRead(pulsador_derecha) == LOW) { digitalWrite(motor_izquierda , HIGH); } else { digitalWrite(motor_izquierda , LOW); } } while (digitalRead(pulsador_menu) == HIGH); actualSetup = 0; actual = actualSetup; lcd.clear(); hiByte = EEPROM.read(addr2); loByte = EEPROM.read(addr3); t5g = (hiByte << 8) + loByte; ////////////////////////////////////////////////////// do { lcd.setCursor(0, 0); lcd.print("Tiempo 5 grados:"); lcd.setCursor(4, 1); lcd.print("mseg."); lcd.setCursor(0, 1); lcd.print(t5g); delay(500); } while (digitalRead(pulsador_menu) == LOW); do { if (digitalRead(pulsador_derecha) == LOW) { t5g = t5g + 10; } if (digitalRead(pulsador_izquierda) == LOW) { t5g = t5g - 10; } lcd.setCursor(0, 1); lcd.print(t5g); delay(100); } while (digitalRead(pulsador_menu) == HIGH); //////////////////////////////////////////////// loByte = byte(t5g); hiByte = byte(t5g >> 8); EEPROM.write(addr2, hiByte); EEPROM.write(addr3, loByte); //////////////////////////////////////////////// } hiByte = EEPROM.read(addr2); loByte = EEPROM.read(addr3); t5g = (hiByte << 8) + loByte; lcd.setCursor(0, 0); lcd.print("Rotor LU4EG"); lcd.setCursor(0, 1); lcd.print("tiempo 5g="); lcd.print(t5g); lcd.print("ms"); delay(5000); lcd.clear(); //******--------------------------------------------------***********//// } void loop() { Parada: ////////////////////////////////////////////////////////////////// if (digitalRead(pulsador_modo) == LOW) { modo = 1; if (modolOld == 0) { //pasa de Manual a Auto cambio = 0; lcd.setCursor(12, 0); //(x y) lcd.print("???"); } modolOld = 1; delay(1); } else { modo = 0; if (modolOld == 1) { //pasa de Auto a Manual pide = actual; cambio = 1; digitalWrite(motor_izquierda , LOW); digitalWrite(motor_derecha , LOW); lcd.setCursor(11, 1); //(x y) lcd.print(" ! "); } modolOld = 0; delay(1); } ////////////////////////////////////////////////////////////////// if (modo == 0) { // Modo manual lcd.setCursor(0, 0); lcd.print("Modo: Manual"); lcd.setCursor(12, 0); lcd.print(" "); if (actual == 0 or actual == 355) { digitalWrite(motor_izquierda , LOW); digitalWrite(motor_derecha , LOW); lcd.setCursor(11, 1); lcd.print(" ! "); } if (digitalRead(pulsador_izquierda) == LOW and digitalRead(pulsador_derecha) == LOW) { delay(100); digitalWrite(motor_izquierda , LOW); digitalWrite(motor_derecha , LOW); lcd.setCursor(11, 1); lcd.print(" ! "); } if (digitalRead(pulsador_izquierda) == LOW and digitalRead(pulsador_derecha) == HIGH) { lcd.setCursor(11, 1); lcd.print("< "); if (actual >= 1) { digitalWrite(motor_izquierda , HIGH); delay(t5g); actual = actual - 5; } } else { digitalWrite(motor_izquierda , LOW); lcd.setCursor(11, 1); lcd.print(" ! "); } if (digitalRead(pulsador_derecha) == LOW and digitalRead(pulsador_izquierda) == HIGH) { lcd.setCursor(11, 1); lcd.print(" >"); if (actual <= 350) { digitalWrite(motor_derecha , HIGH); delay(t5g); actual = actual + 5; } } else { digitalWrite(motor_derecha , LOW); lcd.setCursor(11, 1); lcd.print(" ! "); } } ////////////////////////////////////////////////// if (modo == 1) { // Modo automatico lcd.setCursor(0, 0); //(x y) lcd.print("Modo: Auto "); int myConvertedNumber = 0; String msg = ""; if (Serial.available() > 0) { while (Serial.available() > 0) { msg += char (Serial.read()); delay(5); } if (msg.length() == 5) { if (msg.substring(0, 1) == "M") { msg = msg.substring(1, 4); pide = msg.toInt(); lcd.setCursor(12, 0); lcd.print(" "); lcd.setCursor(12, 0); lcd.print(pide); comando = 1; } } } } ///////////////////////////////////////////////////// if (pide > 355) { digitalWrite(motor_izquierda , LOW); digitalWrite(motor_derecha , LOW); lcd.setCursor(11, 1); lcd.print(" ! "); comando = 0; } ///////////////////////////////////////////////////// if (comando == 1) { delta = pide - actual; delta = abs(delta); ///////////////////////////////////////////////// if (pide > actual and delta >= 5) { digitalWrite(motor_derecha , HIGH); lcd.setCursor(11, 1); lcd.print(" >"); delay(t5g); actual = actual + 5; if (cambio == 1) { lcd.setCursor(11, 1); lcd.print(" ! "); goto Parada; } } if (pide < actual and delta >= 5) { digitalWrite(motor_izquierda , HIGH); lcd.setCursor(11, 1); lcd.print("< "); delay(t5g); actual = actual - 5; if (cambio == 1) { lcd.setCursor(11, 1); lcd.print(" ! "); goto Parada; } } if (delta < 5) { digitalWrite(motor_izquierda , LOW); digitalWrite(motor_derecha , LOW); lcd.setCursor(11, 1); lcd.print(" ! "); comando = 0; } } /////////////////////////////////////////////////////////////////////////////////////////// //Serial.print(pide); if (actual != viejo) { lcd.setCursor(1, 1); //(x y) lcd.print("Act: "); lcd.setCursor(6, 1); //(x y) lcd.print(actual); viejo = actual; } ////////////////////////////////////////////////////////////////////////////////////////// }