Arduino colgado, congelado (puerto serial) Ayuda urgente....

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

Usa puntos de debug, asi veras donde se queda frito. Para ello define un nuevo puerto serie aparte del que usas. Tambien puedes usar parpadeos del led 13 para saber en que punto esta del programa.

Saludos.

El problema es que no se queda frito siempre... alomejor está funcionando perfectamente 9 horas, y de golpe se bloquea... puede ser del puerto???

Saludos y gracias

Ya es raro, 9 horas funcionando y se queda KO.
Mirate si se pone en 0 la variable suma es lo unico que se me ocurre.

Salu2

si te ocurre bastantes veces puedes hacer lo que dice flico de crear una linea de debug. conectas un PC y dejas un programa de hiperterminal recibiendo datos y grabandolos a un archivo. la linea de debug haz que contenga el valor de las variables, asi podras ver si es por culpa de alguna variable que llega a un valor concreto.

Ok, gracias, lo probaré... no influye que envie y reciba datos simultaneamente???

Un saludo y gracias

Jose

en teoria no, pero depende de tu programa.

puedes usar newsoftserial para crear otro puerto de serie, usas uno para tu programa y otro para debug.

Buenos días. Tengo un problema similar salvo que en mi proyecto la arduino controla 21 sensores de apertura de puesta. Anda perfectamente durante un tiempo que puede variar y varía... y se cuelga. Deja de enviar datos por medio del puerto serial.

Encontraste la solución ??????? Gracias.