Offline
Newbie
Karma: 0
Posts: 3
|
 |
« on: April 23, 2011, 03:23:49 am » |
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
|