Go Down

Topic: Problema con lectura analógica. (Read 1 time) previous topic - next topic

Nov 19, 2012, 04:55 am Last Edit: Nov 19, 2012, 04:32 pm by ALDODANIEL Reason: 1
Buenas noches, recién adquirí un arduino uno por recomendaciones en la universidad, estoy acostumbrado a usar microcontroladores de microchip, opte por usar avr pero el cambio es muy radical y algo tan fácil no puedo desarrollarlo necesito ayuda, el planteamiento es sencillo se tiene una entrada analógica que dividiré en 8 para que por casos prenda leds, explicado de otra forma tengo un potencimetro que oscila de 0v a 5v si es 0v no se prenderá ningún led de los puertos digitales pero si hay 5v prenderán 8 led's (1 byte), si hay 2.5v prendan 4 leds y así como prendiendo una seria, el problema realmente es con la programación no entiendo como funciona, mi programa va algo así pensando aun como microchip.

int led1= 13;
int led2 =12;
int led3 =11;
int led4 =10;
int led5 = 9;
int led6 = 8;
int led7 = 7;
int led8 = 6;
int pot = A1;
int val1= 0;
void setup()
{
 pinMode(led1,OUTPUT);
 pinMode(led2,OUTPUT);
 pinMode(led3,OUTPUT);
 pinMode(led4,OUTPUT);
 pinMode(led5,OUTPUT);
 pinMode(led6,OUTPUT);
 pinMode(led7,OUTPUT);
 pinMode(led8,OUTPUT);
 
}

void loop()
{
 
 val1=analogRead(pot);
 float val= val1*(5.0/1023);
 if (val > 0 && val <=127)
 {digitalWrite(led1,HIGH);}
 if ( val >127 && val <=254)
{digitalWrite(led1,HIGH);
 digitalWrite(led2,HIGH);}
if (val >254 && val <=381);
{ digitalWrite(led1,HIGH);
 digitalWrite(led2,HIGH);
 digitalWrite(led3,HIGH);}
if(val>381 && val <=508);
{ digitalWrite(led1,HIGH);
 digitalWrite(led2,HIGH);
 digitalWrite(led3,HIGH);
 digitalWrite(led4,HIGH);}
if (val>508 && val<=635);
{ digitalWrite(led1,HIGH);
 digitalWrite(led2,HIGH);
 digitalWrite(led3,HIGH);
 digitalWrite(led4,HIGH);
 digitalWrite(led5,HIGH);
}
if (val>635 && val<=762);
{ digitalWrite(led1,HIGH);
 digitalWrite(led2,HIGH);
 digitalWrite(led3,HIGH);
 digitalWrite(led4,HIGH);
 digitalWrite(led5,HIGH);
 digitalWrite(led6,HIGH);
}
if (val>762 && val<=889)
{ digitalWrite(led1,HIGH);
 digitalWrite(led2,HIGH);
 digitalWrite(led3,HIGH);
 digitalWrite(led4,HIGH);
 digitalWrite(led5,HIGH);
 digitalWrite(led6,HIGH);
 digitalWrite(led7,HIGH);
}
if (val>889 && val <=1023);
{ digitalWrite(led1,HIGH);
 digitalWrite(led2,HIGH);
 digitalWrite(led3,HIGH);
 digitalWrite(led4,HIGH);
 digitalWrite(led5,HIGH);
 digitalWrite(led6,HIGH);
 digitalWrite(led7,HIGH);
 digitalWrite(led8,HIGH);
}
if(val==0);
{ digitalWrite(led1,LOW);
 digitalWrite(led2,LOW);
 digitalWrite(led3,LOW);
 digitalWrite(led4,LOW);
 digitalWrite(led5,LOW);
 digitalWrite(led6,LOW);
 digitalWrite(led7,LOW);
 digitalWrite(led8,LOW);
}
}  

curro92

Hola,
te has complicado sin necesidad:

Si analogRead() te da valores entre 0 y 1023, y estás usando ese mismo rango para seleccionar el número de leds, te sobra la conversión, suprime la línea
Code: [Select]

float val= val1*(5.0/1023); // que además tendría que ser en todo caso 5000/1023, para que te dé entero positivo


y utiliza val1 directamente para evaluar los if()

Nota: escribir el mensaje en mayúsculas no está bien visto; la mayoría de las veces suele ser para encubrir deficiencias de acentuación, que no es tu caso.



si ya lo he intentado sin esa linea, pero no lo hace mi arduino :( según yo esto debería funcionar pero no lo hace no lee nada :S y el potenciometro y la parte del circuito funciona bien solo es que siempre me manda 1111111 del 13 al 6, no lee el puerto

curro92

Hola,
pues borra toda la parte de los led, y céntrate solo en analogRead():
- ejecuta analogRead y envía el valor al terminal con  Serial.print()
- mide con un téster qué tensión tienes en el pin A1, y cómo varía con el potenciómetro.
- prueba cambiando la conexión a A0

Investiga!


PascuaL

Para un correcto uso del foro deberías poner en Subject de que va tu problema. Además las mayúsculas no están bien vistas.
Un saludo!!

nayma

si mides en A0 y lo lees por el serial te tiene que dar el potenciómetro entre 0 y 1024.

Gracias por las observaciones, trate de corregirlo, si soy nuevo con arduino, ¿me podría decir que es el serial? o como funciona "Serial.println()" . De ante mano muchas gracias.

PascuaL


Gracias por las observaciones, trate de corregirlo, si soy nuevo con arduino, ¿me podría decir que es el serial? o como funciona "Serial.println()" . De ante mano muchas gracias.

Una de las mejores cosas de Arduino es que está muy documentado.
http://www.arduino.cc/es/Serial/Print
Un saludo, si tienes alguna duda nos escribes!



Gracias por las observaciones, trate de corregirlo, si soy nuevo con arduino, ¿me podría decir que es el serial? o como funciona "Serial.println()" . De ante mano muchas gracias.

Una de las mejores cosas de Arduino es que está muy documentado.
http://www.arduino.cc/es/Serial/Print
Un saludo, si tienes alguna duda nos escribes!

Hola, mira ya vi mi error no lo había visto mi error es poner ";" después del argumento del if. Gracias todos quien me ayudaron :)

Go Up