Pages: [1]   Go Down
Author Topic: Arduino colgado, congelado (puerto serial) Ayuda urgente....  (Read 1049 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Trabajando en ...

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

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

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Trabajando en ...

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

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

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Un saludo y gracias

Jose
Logged

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Pages: [1]   Go Up
Jump to: