Buenas tardes, llevo poco tiempo con Arduino y hay varias dudas que me asaltan.He intentado buscar algo por internet y en los foros pero no he visto nada, posiblemente porque no he planteado la pregunta correcta y me gustaría a ver si alguien puede orientarme.
Empecemos, la idea general es controlar 36 finales de carrera como entradas independientes y utilizar 2 señales de salida para unas alarmas asociadas a cada entrada mas 1 salida asociada a todas las entradas como testigo del pulso recibido.
Hasta ahí tengo el código resuelto:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// DECLARACION DE CONSTANTES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define linein01 54 // ASIGNACION PIN ENTRADA LINEA 01
#define lineout01 4 // ASIGNACION PIN TESTIGO SENSOR LINEA 01
#define bajoprod01 5 // ASIGNACION PIN BAJO PRODUCTO LINEA 01
#define needprod01 6 // ASIGNACION PIN PRODUCTO NECESITADO LINEA 01
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// DECLARACION DE VARIABLES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int sensorcounter01 = 30; // CONTADOR DEL NUMERO DE PULSACIONES DEL SENSOR DE LA LINEA 01(UNIDADES A CONTAR SEGUN sensorcounter01)
int sensorState01 = 0; // ESTADO ACTUAL DEL SENSOR DE LA LINEA 01
int lastsensorState01 = 0; // ESTADO ANTERIOR DEL SENSOR DE LA LINEA 01
int totalcountersensor01 = 0; // TOTALIZADOR DE PULSOS DE LA LINEA 01
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
// DECLARACION DE PINES DE SALIDA
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
pinMode(linein01,INPUT); // DECLARACION DEL SENSOR DE ENTRADA DE LA LINEA 01
pinMode(lineout01,OUTPUT); // DECLARACION DE LA SEÑALIZACION DE SALIDA DE LA LINEA 01
pinMode(bajoprod01,OUTPUT); // DECLARACION DE LA SEÑALIZACION DE BAJO PRODUCTO DE LA LINEA 01
pinMode(needprod01,OUTPUT); // DECLARACION DE LA SEÑALIZACION DE PRODUCTO NECESITADO LINEA 01
Serial.begin(9600); // INICIALIZACION DE COMUNICACION SERIE
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
sensorState01 = digitalRead(linein01); // LECTURA DEL PULSADOR DE ENTRADA
if (sensorState01 != lastsensorState01) // COMPARA EL ESTADO ACTUAL DEL PULSADOR CON EL ESTADO ANTERIOR DEL MISMO
{
if (sensorState01 == HIGH) // SI EL ESTADO DEL SENSOR DE LINEA 01 ES ALTO ENTONCES VAMOS DE PRINCIPIO A FIN
{
sensorcounter01--; // SI EL ESTADO HA CAMBIADO,DECREMETA EL CONTADOR
Serial.println("on");
Serial.print("Pulsos hasta llegar a 0 en Linea01: ");
Serial.println(sensorcounter01);
totalcountersensor01++; // AUMENTA EL TOTALIZADOR DE PULSOS
Serial.println(" ");
Serial.print("Totalizador de pulsos Linea01: ");
Serial.println(totalcountersensor01);
}
else {
// SI EL ESTADO DEL SENSOR DE LINEA 01 ES BAJO CORTAMOS LA COMUNICACION SERIE
Serial.println("off");
delay(50);
}
lastsensorState01 = sensorState01; // GUARDA EL ESTADO ACTUAL COMO ULTIMO ESTADO PARA LA PROXIMA VEZ ATRACES DEL BUCLE
// ESTA LINEA ES EL MOTIVO DEL DOBLE PARPADEO SEÑALIZACION SALIDA 01
if (sensorcounter01 == 0)sensorcounter01 ; // CON ESTA LINEA SE RESETEA EL CONTADOR DE PULSACIONES DE LA LINEA 01 PASANDO A LA ESPERA
// DE REACTIVAR LA VARIABLE SENSORCOUNTER01 DE MANERA MANUAL
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (digitalRead(sensorState01)==LOW) // MONITORIZACION DE SENSOR LINEA 01
{ digitalWrite(lineout01,LOW);
}
else
{ digitalWrite(lineout01,HIGH);
delay(200);
digitalWrite(lineout01,LOW);
delay(50);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (sensorcounter01 >=8) // SEÑALIZACION ALARMA BAJO PRODUCTO LINEA 01
{ digitalWrite(bajoprod01,LOW); // EL PUNTO DE ALARMA SE FIJA SEGUN EL NUMERO ENTERO TRAS EL COMPRADOR " >= "
}
else
{
digitalWrite(bajoprod01,HIGH);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (sensorcounter01 <=0) // SEÑALIZACION ALARMA PRODUCTO NECESITADO LINEA 01
{ digitalWrite(bajoprod01,HIGH); // DISPARA LA ALARMA AL LLEGAR A 0
digitalWrite(needprod01,HIGH);
}
else
{ digitalWrite(bajoprod01,LOW);
digitalWrite(needprod01,LOW);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Fin de la primera parte ya que el mensaje es demasiado largo