domingo, 6 de marzo de 2022

Pulsadores (IDE Arduino)

El shield multifunción dispone de tres pulsadores: S1, S2 y S3, conectados a los pines A1, A2 y A3. Para usarlos tenemos que detectar si están presionados o liberados, eso lo podemos hacer con la instrucción digitalRead, que nos devuelve el nivel de voltaje (LOW o HIGH) existente en el pin. Cuando un pulsador está presionado dicho voltaje es LOW y cuando está liberado HIGH. En el programa adjunto, al presionar el pulsador S1 se enciende el LED D1 y al liberarlo se apaga.
/* 
 * pulsadorS1LedD1.ino
 * Al presionar el pulsador S1 (en el pin A1) se
 * enciende el LED D1 (pin 13) y se apaga al liberarlo.
 * Cuando se presiona un pulsador estamos poniendo un
 * voltaje bajo, LOW, en el pin al que está conectado,
 * al liberarlo se queda un voltaje alto, HIGH.
 */
 
void setup() {
  pinMode(13, OUTPUT);      //pin 13 como salida
  pinMode(A1, INPUT);       //pin A1 como entrada
  digitalWrite(13, HIGH);   //apagamos el Led D1
}

void loop() { 
  digitalWrite(13, digitalRead(A1));   //digitalRead(A1) será LOW si
                                       //el pulsador está presionado
                                       //o HIGH si está liberado
}

En este caso, vamos a encender D1 y D2 al presionar el pulsador S1 y los vamos a apagar cuando presionemos el pulsador S2. Para realizar el programa es necesario usar la instrucción if (si), que nos va a servir para comparar dos valores y ejecutar unas determinadas instrucciones sólo en el caso de que sean iguales.

/*
 * pulsadorS1enciendeS2apaga.ino
 * Al presionar el pulsador S1 (pin A1)se encienden D1 (pin 13) y
 * D2 (pin 12), al presionar el pulsador S2 (pin A2) se apagan.
 */
 
void setup() {
  pinMode(13, OUTPUT);        //pin 13 como salida
  pinMode(12, OUTPUT);        //pin 12 como salida
  pinMode(A1, INPUT);         //pin A1 como entrada
  pinMode(A2, INPUT);         //pin A2 como entrada
  digitalWrite(13, HIGH);     //apagamos el Led D1
  digitalWrite(12, HIGH);     //apagamos el Led D2
}

void loop() { 
  if(digitalRead(A1)==LOW) {   //si pulsador S1 presionado
    digitalWrite(13, LOW);     //Led D1 encendido
    digitalWrite(12, LOW);     //Led D2 encendido
  }
  if(digitalRead(A2)==LOW) {   //si pulsador S2 presionado
    digitalWrite(13, HIGH);    //Led D1 apagado
    digitalWrite(12, HIGH);    //Led D2 apagado
  }
}




Ejercicios propuestos:

1.- Escribir un programa para que al presionar el pulsador 1 se encienda el LED 4, al presionar el pulsador 2 suene el  zumbador y al presionar el pulsador 3 se apague el LED y finalice el sonido.

2.- Ahora haremos que los diodos 1 y 2 se enciendan al mantener presionado el pulsador 1 y se apaguen al liberarlo. Además, los diodos 3 y 4 se encenderán al presionar el pulsador 2 y se apagarán al presionar el pulsador 3.




jueves, 3 de marzo de 2022

El zumbador (IDE Arduino)

El shield multifunción lleva incorporado un zumbador, conectado al pin 3 de Arduino, con el que podemos emitir sonidos; para ello se utiliza la instrucción tone, indicando el numero del pin y la frecuencia del mismo. También necesitaremos la instrucción noTone para silenciarlo. Además, si no queremos que el zumbador haga ruido es conveniente mantener el pin 3 con un nivel de voltaje alto. El siguiente programa hace que el zumbador suene durante 1 segundo con una frecuencia de 440 Hz y después queda en silencio 5 segundos.

/* zumbador
 * Emite un sonido (nota La) durante 1 segundo,
 * después permanece en silencio 5 segundos.
 * El zumbador está conectado al pin 3 de Arduino.
 * Para evitar que emita ruidos hay que poner un
 * nivel de voltaje alto (HIGH) en dicho pin.
 */

void setup() {
  pinMode(3, OUTPUT);      //pin 3 como salida
  digitalWrite(3, HIGH);   //zumbador sin ruido
}

void loop() { 
  tone(3, 440);            //nota La, frecuencia 440Hz
  delay(1000);             //esperamos 1 segundo
  noTone(3);               //silencio
  digitalWrite(3, HIGH);
  delay(5000);             //esperamos 5 segundos
}

En la siguiente lista tenemos las frecuencias de las notas musicales básicas:

Ahora haremos que suenen las notas Do, Re y Mi durante medio segundo cada una, después permanecerá en silencio 2 segundos y se repetirá el ciclo.

/* zumbadorDoReMi
 * Suenan las notas Do, Re y Mi durante medio
 * segundo cada una, después 2 segundos en silencio
 */

void setup() {
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH);

}

void loop() {
  tone(3, 262);             //Do
  delay(500);
  tone(3, 294);             //Re
  delay(500);
  tone(3, 330);             //Mi
  delay(500);
  noTone(3);                //silencio
  digitalWrite(3, HIGH);
  delay(2000);
}

En el siguiente programa suenan las mismas notas pero dando un pitido corto de 0'1 segundos.

/* zumbadorDoReMiCorto
 * Suenan unos pitidos cortos (100 mseg) de las notas
 * Do, Re y Mi. Posteriormente, pasados 2 segundos
 * se vuelve a repetir el ciclo.
 */

void setup() {
  pinMode(3, OUTPUT);      //pin 3 como salida
  digitalWrite(3, HIGH);   //zumbador sin sonido
}

void loop() {
  tone(3, 262);           //Do
  delay(100);
  noTone(3);              //silencio
  digitalWrite(3, HIGH);
  delay(400);
  tone(3, 294);           //Re
  delay(100);
  noTone(3);              //silencio
  digitalWrite(3, HIGH);
  delay(400);
  tone(3, 330);           //Mi
  delay(100);
  noTone(3);              //silencio
  digitalWrite(3, HIGH);
  delay(400);
  delay(2000);            //dos segundos de pausa
}


Ejercicios propuestos:

1.- Realizar un programa que haga parpadear un LED y, a la vez, emita dos pitidos cortos.


2.- Conseguir que suene la escala musical completa en el zumbador.


3.- Ampliar el programa del semáforo de la entrada anterior de manera que el zumbador emita unos pitidos cortos para avisar que el tiempo de paso de los peatones se está acabando.