Go Down

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

ALDODANIEL

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.



ALDODANIEL

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.

ALDODANIEL

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!

ALDODANIEL



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