Hola, estoy empezando en esto de la programación con arduino y tengo un problema con uno de mis primeros programas, quiero hacer un ``termómetro´´ con 9 leds, que dependiendo de la temperatura se vayan encendiendo o apagando, al ir subiendo la temperatura se van encendiendo los leds (cada grado 1 led) y al ir bajando se apagan. También da la temperatura al puerto de serie.
El problema es que los leds hacen lo que les da la gana, a veces se encienden unos cuantos, a veces todos, unas veces se encienden a medias otras se encienden del todo...
Dejo el codigo, que seguramente tenga algo mal (o todo)
int led []={13,12,11,10,9,8,7,6,5};
int TemPin=0;
int TemVal=0;
void setup(){
Serial.begin (9600);
pinMode(TemPin, INPUT);
pinMode (led, OUTPUT);
digitalWrite (led, OUTPUT);
}
void loop(){
//calculo de temperatura del LM35
TemVal=((5.0*analogRead(TemPin)*100)/1024);
delay(1000);
Serial.println (TemVal);
//que leds se encienden en funcion de la temperatura
if (TemVal>=26) digitalWrite (led [13],HIGH);
if (TemVal<26) digitalWrite (led [13],LOW);
if (TemVal>=25) digitalWrite (led [12],HIGH);
if (TemVal<25) digitalWrite (led [12],LOW);
if (TemVal>=24) digitalWrite (led [11],HIGH);
if (TemVal<24) digitalWrite (led [11],LOW);
if (TemVal>=23) digitalWrite (led [10],HIGH);
if (TemVal<23) digitalWrite (led [10],LOW);
if (TemVal>=22) digitalWrite (led [9],HIGH);
if (TemVal<22) digitalWrite (led [9],LOW);
if (TemVal>=21) digitalWrite (led [8],HIGH);
if (TemVal<21) digitalWrite (led [8],LOW);
if (TemVal>=20) digitalWrite (led [7],HIGH);
if (TemVal<20) digitalWrite (led [7],LOW);
if (TemVal>=19) digitalWrite (led [6],HIGH);
if (TemVal<19) digitalWrite (led [6],LOW);
if (TemVal>=18) digitalWrite (led [5],HIGH);
if (TemVal<18) digitalWrite (led [5],LOW);
}
de entrada tienes una confusion sobre el funcionamiento de los arrays que confundes con el numero de pin.tienes un array de nueve elementos .los indices de un array comienzan por 0 ,para acceder al pin 13 por ejempo ,que esta en la primera posicion :
led[0]
el pin 12:
led[1]
etc,etc,asi que repasa tambien como declaras en el setup los pines como OUTPUT.por otro lado declaras el pin 0 como entrada (no se si has conectado ahi el sensor de temperatura),en muchos modelos de arduino los pines 0 y 1 son los usados por el serial monitor,no deberias usarlos.
jose:
de entrada tienes una confusion sobre el funcionamiento de los arrays que confundes con el numero de pin.tienes un array de nueve elementos .los indices de un array comienzan por 0 ,para acceder al pin 13 por ejempo ,que esta en la primera posicion :
led[0]
el pin 12:
led[1]
etc,etc,asi que repasa tambien como declaras en el setup los pines como OUTPUT.por otro lado declaras el pin 0 como entrada (no se si has conectado ahi el sensor de temperatura),en muchos modelos de arduino los pines 0 y 1 son los usados por el serial monitor,no deberias usarlos.
gracias, era por el tema de los arrays que no funcionaba el programa, al final he accedido a los pines directamente y ya funciona.
int TemPin=0;
int TemVal=0;
void setup(){
Serial.begin (9600);
pinMode(TemPin, INPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (7, OUTPUT);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (13, OUTPUT);
}
void loop(){
//calculo de temperatura del LM35
TemVal=((5.0*analogRead(TemPin)*100)/1024);
delay(1000);
Serial.println (TemVal);
//que leds se encienden en funcion de la temperatura
if (TemVal>=26) digitalWrite (13,HIGH);
if (TemVal<26) digitalWrite (13,LOW);
if (TemVal>=25) digitalWrite (12,HIGH);
if (TemVal<25) digitalWrite (12,LOW);
if (TemVal>=24) digitalWrite (11,HIGH);
if (TemVal<24) digitalWrite (11,LOW);
if (TemVal>=23) digitalWrite (10,HIGH);
if (TemVal<23) digitalWrite (10,LOW);
if (TemVal>=22) digitalWrite (9,HIGH);
if (TemVal<22) digitalWrite (9,LOW);
if (TemVal>=21) digitalWrite (8,HIGH);
if (TemVal<21) digitalWrite (8,LOW);
if (TemVal>=20) digitalWrite (7,HIGH);
if (TemVal<20) digitalWrite (7,LOW);
if (TemVal>=19) digitalWrite (6,HIGH);
if (TemVal<19) digitalWrite (6,LOW);
if (TemVal>=18) digitalWrite (5,HIGH);
if (TemVal<18) digitalWrite (5,LOW);
}