Go Down

Topic: Arduino colgado, congelado (puerto serial) Ayuda urgente.... (Read 1 time) previous topic - next topic

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


flico

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.

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

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

flico

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
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Sergegsx

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

Sergegsx

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.

Go Up