#include <ESP32Servo.h>
#include <Keypad.h>
#define pinServo 12
#define ROW_NUM 4 // four rows
#define COLUMN_NUM 3 // three columns
#define dt 20 // 1 grado cada dt milisegundos
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte pin_rows[ROW_NUM] = {22, 21, 19, 18};
byte pin_column[COLUMN_NUM] = {4, 2, 15};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
String cuentaStr;
volatile int posIni =90;
volatile int posFin=90;
volatile int pos;
Servo servo_1;
void setup() {
Serial.begin(115200);
servo_1.attach(pinServo);
servo_1.write(posIni);
Serial.println("Ingrese angulo: 000 ... 180");
}
void loop() {
char key = keypad.getKey();
if (key ) {
Serial.print(key);
cuentaStr=cuentaStr+key;
}
if (cuentaStr.length()==3){
posFin=cuentaStr.toInt();
cuentaStr="";
if (posFin> 180 ) {
Serial.println(" Incorrecto,Ingrese angulo: 000 ... 180");
}
}
if (posFin<= 180 && posFin>=0 && posFin != posIni) {
aplicar();
posIni=posFin;
}
}
void aplicar(){
Serial.println(" Aplicando cambios....");
if(posFin>posIni) {
for (pos = posIni; pos <= posFin; pos++) {
// tell servo to go to position in variable 'pos'
servo_1.write(pos);
// wait 15 ms for servo to reach the position
delay(dt); // Wait for 15 millisecond(s)
}
}
if(posFin<posIni) {
for (pos = posIni; pos >= posFin; pos--) {
// tell servo to go to position in variable 'pos'
servo_1.write(pos);
// wait 15 ms for servo to reach the position
delay(dt); // Wait for 15 millisecond(s)
}
}
posIni=posFin;
Serial.print("Posicion actual: ");
Serial.println(posFin);
}