Hola. Lo que debe hacer este programa es muy simple. Con cuatro pulsadores con led contrlar un motor (arranque, parada y dirección).
El arranque y la parada lo hace con un pulso de 200ms.
He cambiado los delay por millis, pero no estoy muy convencido de si habré ganado en algo y de si estará bien hecho.
Y ya puesto quizás el programa se puede escribir, como decir, mas profesional, mas bonito. Me echais una mano? Gracias.
Un saludo.
JoseV
// CONTROLADOR CDS
unsigned long tiempoEspera = 200; // Esperar durante 200 milisegundos
unsigned long tiempoInicio = millis();
const int PulsadorStarPin = 3; //pulsador
const int LedStartPin = 4; //led
const int PulsadorStopPin = 5;
const int LedStopPin = 6;
const int PulsadorFwPin = 7; //forward
const int LedFwPin = 8;
const int PulsadorRvPin = 9; //Reversa
const int LedRvPin = 10;
const int MotorStartPin = 11;
const int MotorStopPin = 12;
const int MotorFwPin = 13;
int start, sstop, fw, rv;
int estado = 0;
void setup() {
pinMode(PulsadorStarPin, INPUT_PULLUP);
pinMode(PulsadorStopPin, INPUT_PULLUP);
pinMode(PulsadorFwPin, INPUT_PULLUP);
pinMode(PulsadorRvPin, INPUT_PULLUP);
pinMode(MotorStartPin, OUTPUT);
pinMode(MotorStopPin, OUTPUT);
pinMode(MotorFwPin, OUTPUT); //fw. HIGH
pinMode(LedStartPin, OUTPUT); //led Start
pinMode(LedStopPin, OUTPUT); //led Stop
pinMode(LedRvPin, OUTPUT); //led Rv
pinMode(LedFwPin, OUTPUT); //led am
digitalWrite(LedStartPin, LOW);
digitalWrite(LedStopPin, HIGH);
digitalWrite(LedRvPin, LOW);
digitalWrite(LedFwPin, HIGH);
digitalWrite(MotorStartPin, HIGH);
digitalWrite(MotorStopPin, LOW);
digitalWrite(MotorFwPin, HIGH); //Adelante
delay(500);
}
void loop() {
switch (estado) {
case 0:
start = digitalRead(PulsadorStarPin); //2
if (start == LOW) { //Start ON
digitalWrite(LedStartPin, HIGH); //Encendemos Led Start
digitalWrite(LedStopPin, LOW); //Apagamos Led Stop
/* digitalWrite(MotorStartPin, LOW); //Pulso start con delay
delay(200); //--
digitalWrite(MotorStartPin, HIGH); //--
*/
digitalWrite(MotorStartPin, LOW); //Arrancamos con PULSO 200 ms
while (millis() - tiempoInicio < tiempoEspera) {
// No hay acciones específicas que realizar durante el tiempo de espera
}
digitalWrite(MotorStartPin, HIGH); //Fin del Pulso
}
estado = 1;
break;
//**********************
case 1:
sstop = digitalRead(PulsadorStopPin); //4
if (sstop == LOW) { //Stop ON
digitalWrite(LedStartPin, LOW); //Apagamos Led Start
digitalWrite(LedStopPin, HIGH); //Encendemos led Stop
digitalWrite(LedFwPin, HIGH); //9 Encendemos led Fw
digitalWrite(LedRvPin, LOW); //7 Apagamos led Reversa
/* digitalWrite(MotorStopPin, HIGH);//Pulso stop con delay
delay(200);
digitalWrite(MotorStopPin, LOW);
*/
digitalWrite(MotorStartPin, HIGH); //Paramos con PULSO 200 ms
while (millis() - tiempoInicio < tiempoEspera) {
// No hay acciones específicas que realizar durante el tiempo de espera
}
digitalWrite(LedStartPin, HIGH);
digitalWrite(MotorFwPin, HIGH); //Adelante
}
estado = 2;
break;
//*******************
case 2:
rv = digitalRead(PulsadorRvPin); //6
if (rv == LOW) {
digitalWrite(LedRvPin, HIGH); //7
digitalWrite(LedFwPin, LOW); //9
digitalWrite(MotorFwPin, LOW); //Reversa
}
estado = 3;
break;
//*******************
case 3:
fw = digitalRead(PulsadorFwPin); //8
if (fw == LOW) {
digitalWrite(LedFwPin, HIGH); //9
digitalWrite(LedRvPin, LOW); //7
digitalWrite(MotorFwPin, HIGH); //Adelante
}
estado = 0;
break;
}
}