Descrición:
Imos ler o valor enviado por un potenciómetro a unha entrada analóxica e, segundo o resultado, executar unha serie de instrucións.
Montaxe:
Conectaremos un potenciómetro de 10kΩ de xeito que a patilla central c estea conectada á entrada analóxica A0, outra patilla a 5V e a que queda a masa.
Conectamos tres LEDs coas súas resistencias de protección aos pins 11, 13 e 13.
Programas:
1. Lectura serial
1. Lectura serial: Imos ler na consola serie o valor que nos dá un potenciómetro en función da posición do cursor.
// Declaración de variables int pot=0; // variable que le o valor do potenciómetro, entre 0 e 1023 // Configuración void setup() { Serial.begin(9600); // Inicia a comunicación serie } // Programa: void loop() { pot = analogRead(A0); // Asignamos á variable "valor" o valor lido na entrada analóxica A0 Serial.println(pot); //Imprime no monitor serie dito valor delay(200); //Retardo de 200ms para a visualización de datos na consola }
2. Acender un LED
2. Acender un LED cun potenciómetro: Podemos utilizar a información que lemos na consola sobre o valor dun potenciómetro en función da posición do cursor para acender un LED cando o potenciómetro supere un determinado valor.
// Declaración de variables int pot=0; // variable que le o valor do potenciómetro, entre 0 e 1023 int led1=13; // Configuración void setup(){ Serial.begin(9600); // Inicia a comunicación serie pinMode(led1, OUTPUT); // Configuramos o LED como saída } // Programa void loop() { pot = analogRead(A0); // Asignamos a variable "valor" o valor lido na entrada analóxica A0 Serial.println(pot); // Imprime no monitor serie dito valor if (pot >= 500) { // Cando a variable "valor" e maior ou igual que 500 digitalWrite(led1,HIGH); // acéndese o LED } else { digitalWrite(led1,LOW); // no caso contrario apágase } delay(200); // Retardo de 100ms para a visualización de datos na consola }
3. Rangos
Segundo sexa a lectura do potenciómetro executamos catro procesos diferentes. Imos utilizar a estrutura de control switch/case, pero podería facerse tamén con if … else
// Declaración de variables int led1=13; int led2=12; int led3=11; // Configuración void setup(){ Serial.begin(9600); // Inicia a comunicación serie pinMode(led1, OUTPUT); // Configuramos o LED como saída pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); } // Programa void loop(){ int pot = analogRead(0); // pot = valor lido na entrada analóxica A0 int opcion = map(pot, 0, 1023, 0, 3); // Dividimos o rango do potenciómetro ( de 0 a 1023) // en 4 intervalos (de 0 a 3) ("opcion" é un nº enteiro) switch(opcion){ // Segundo sexa o valor da variable opcion (0,1,2 ou 3) case 0: // Executamos un proceso diferente. digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); break; case 1: digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); break; case 2: digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); break; case 3: digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); break; } Serial.println(String(pot) + " ---> " + String(opcion)); delay (200); }
Propostas:
- Cada LED nun rango: Utiliza a estrutura if … else para programar o seguinte: Temos tres LEDs conectados aos pins 11, 12 e 13. O primeiro LED verde débese acender no rango de 50 a 350 da lectura do potenciómetro, o segundo LED amarelo no rango 351-700 e o terceiro LED vermello no rango 701-1023.
Extras:
- Máis estados: Fai a montaxe con 5 LEDs e, utilizando a estrutura de múltiples casos fai o programa con 6 estados diferentes, desde todo apagado a todo aceso.
- Alerta: Nos casos anteriores, engade intermitencia ao LED vermello.