Hola a todos! Hice un sistema eléctrico para controlar el encendido y apagado de luces de habitaciones de un hotel, mediante contactores y Arduino.
Luego vinculé el Arduino a un programa en Java, por puerto USB, donde me muestra con colores las habitaciones libres y ocupadas.
Arduino se encarga de enviar un String a Java y este lo interpreta y en base a eso setea el color determinado.
Aclaro que uso arduino (y no otro sistema más robusto), porque como yo tengo algo de conocimientos (no muchos) investigué un poco en internet sobre cómo vincular el programa Java con la lógica propia del sistema.
Tengo un problema: Cuando los contactores pegan y despegan, producto del campo magnético que se genera, me hacen desequilibrar el sistema porque las ondas le llegan al Arduino y deja de enviar por el puerto USB la señal. Esto sucede casi siempre.
Entonces, intenté codear un "Watchdog" para que detecte automáticamente y resetee la conexión cuando se congela el envío de datos por USB entre Arduino y PC, pero sigue sin funcionar correctamente.
Les dejo el código.
Muchas gracias de antemano por la solución que me puedan brindar.
Saludos!
Luego vinculé el Arduino a un programa en Java, por puerto USB, donde me muestra con colores las habitaciones libres y ocupadas.
Arduino se encarga de enviar un String a Java y este lo interpreta y en base a eso setea el color determinado.
Aclaro que uso arduino (y no otro sistema más robusto), porque como yo tengo algo de conocimientos (no muchos) investigué un poco en internet sobre cómo vincular el programa Java con la lógica propia del sistema.
Tengo un problema: Cuando los contactores pegan y despegan, producto del campo magnético que se genera, me hacen desequilibrar el sistema porque las ondas le llegan al Arduino y deja de enviar por el puerto USB la señal. Esto sucede casi siempre.
Entonces, intenté codear un "Watchdog" para que detecte automáticamente y resetee la conexión cuando se congela el envío de datos por USB entre Arduino y PC, pero sigue sin funcionar correctamente.
Les dejo el código.
Muchas gracias de antemano por la solución que me puedan brindar.
Saludos!
Código:
//#include <WatchDog.h>
//#include <avr/wdt.h>
String pines[54];
unsigned int oldvalues[54];
unsigned int newvalues[54];
int i = 0;
String guion;
String mensaje;
int a;
void setup() {
// put your setup code here, to run once:
// wdt_disable(); // Desactivar el watchdog mientras se configura
// wdt_enable(WDTO_2S); // Configurar a dos segundos
Serial.begin(9600);
guion = String(",");
for(a = 0; a < 20; a++){ //inicializo todos los pines desde el 31 al 53 en input
pinMode(a, INPUT);
digitalWrite(a,HIGH);
delay(100);
}
for(i=0;i<20;i++){
// newvalues[i] = HIGH;
newvalues[i] = digitalRead(i);
delay(20);
oldvalues[i] = newvalues[i];
delay(20);
pines[i] = String(i);
}
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(1);
for(i=0;i<20;i++){
newvalues[i] = digitalRead(i);
delay(20);
//Serial.println(String("Valor I")+ i);
if(i==1){
//Serial.println(String("LEYO el pin = ") +i+ String(" Valor= ")+ String(newvalues[i]));
}
}
for(i=0;i<20;i++){
delay(20);
if(newvalues[i] != oldvalues[i]){
delay(20);
mensaje = String("Pin ") + pines[i] + guion + String(" Value = ")+ newvalues[i];
delay(20);
Serial.println(mensaje);
delay(20);
oldvalues[i] = newvalues[i];
delay(20);
}
}
delay(100);
//wdt_reset(); // Actualizar el watchdog para que no produzca un reinicio
}