Buenos dias
Tengo una aplicación en vb6 que comunico con arduino. Funciona perfectamente, pero de vez en cuando el arduino (duemilanove), se me queda colgado, congelado o muerto... como querais llamarlo.
Basicamente lo que hace arduino es enviarme la lectura de 2 sensores de temperatura lm35, y a la vez le envio por el puerto serie una serie de ordenes para activar leds rgb y salidas digitales...
Porfavor alguien me puede dar un poco de luz, porque estoy desesperado y no encuentro la solución... además es un problema porque está integrado en un equipo industrial y no debería de fallar nunca....
Pongo el codigo de arduino
//Pin Variables
int sensorAgua = 0;
int sensorCable = 2;
int suma = 500;
int filtracion = 0;
int proyector = 0;
int sesion = 0;
int val;
int vR = 255;
int vG = 255;
int vB = 255;
int vL = 0;
int pR = 9;
int pG = 10;
int pB = 11;
int filtra = 5;
int estrellas = 6;
int luzfiltra = 4;
int calentador = 12;
void setup()
{
analogReference(INTERNAL);
Serial.begin(9600);
pinMode(filtra, OUTPUT);
pinMode(estrellas, OUTPUT);
pinMode(luzfiltra, OUTPUT);
pinMode(calentador, OUTPUT);
analogWrite(pB, vB);
}
void loop()
{
// chequear si hay datos
if (Serial.available())
{
// leer primer caracter debe ser 0
val = Serial.read();
if (val == 0) // ok hemos recibido el 0 control de rgb
{
delay(1);
vR = Serial.read(); // leemos Rojo R
delay(1);
vG = Serial.read(); // leemos Verde G
delay(1);
vB = Serial.read(); // leemos Azul B
// volcamos los valores a los pines
analogWrite(pR, vR);
analogWrite(pG, vG);
analogWrite(pB, vB);
}
if (val == 1) // ok hemos recibido el 1 que es filtracion
{
digitalWrite(filtra, HIGH);
digitalWrite(luzfiltra, HIGH);
}
if (val == 2) // ok hemos recibido el 2 que es apaga filtracion
{
digitalWrite(filtra, LOW);
digitalWrite(luzfiltra, LOW);
}
if (val == 3) // ok hemos recibido el 2 que enciende estrellas
{
digitalWrite(estrellas, HIGH);
}
if (val == 4) // ok hemos recibido el 4 que es apaga estrellas
{
digitalWrite(estrellas, LOW);
}
}
// lectura de sensores
float temp = ((1.1 * analogRead(sensorAgua)) * 100.0) / 1023.0; // Lee la temperatura
float temp1 = ((1.1 * analogRead(sensorCable)) * 100.0) / 1023.0; // Lee la temperatura
if (suma == 1000) // bucle para envio de temperaturas por puerto serie a vb6
{
Serial.print(temp);
Serial.print("|");
Serial.println(temp1);
suma = 0;
}
// control termostatico del agua
if (temp > 35) { // limite positivo temperatura del agua
digitalWrite(calentador, LOW);
}
else {
if (temp < 33) { //limite negativo temperatura del agua
if (temp1 < 45) { //limite negativo de temperatura del cable
digitalWrite(calentador, HIGH);
}
else {
if (temp1 > 50) { //limite positivo de temperatura del cable
digitalWrite(calentador, LOW);
}
}
}
else {
digitalWrite(calentador, LOW);
}
}
suma = suma + 1;
delay(30);
}
Gracias y un saludo
Jose