Problema con lectura analógica.

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);
}
}

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

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 :frowning: 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

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!

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!!

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.

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!

PascuaL:

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 :slight_smile: