Práctica Dirigida 2
Prototipos Interactivos 2
Práctica #2
Código en el IDE de Arduino
Código en el IDE de Arduino
Práctica #2
Código en el IDE de Arduino
#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1; //declaramos la variable para controlar el servo motor
LiquidCrystal lcd(8,9,4,5,6,7); //definimos los pines de arduino que controlan la LCD, no se porque el orden de los pines es así, si los ordeno distinto da error en la lcd
int puertoservo =3; //Se asigna el pin 3 a esta variable
int trig =13; //Se asigna el pin 13 a esta variable
int echo =12; //Se asigna el pin 12 a esta variable
int piezo =2; //Se asigna el pin 2 a esta variable
int grados; //variable para guardar los grados de ang del servo
int temporal =0; //variable a usar en el if
int anguloMin =650; //variable en la que se asigna el ang menor
int anguloMax =2550; //variable en la que se asigna el ang mayor
float disCalculada;
void setup()
{
servo1.attach (puertoservo,anguloMin,anguloMax); //inicializamos el servo indicando por cual puerto nos comunicamos y los ángulos Max y Min
//------------------//
pinMode(trig, OUTPUT); // Envía datos
pinMode (echo, INPUT); // Recibe datos
pinMode (piezo, OUTPUT);
Serial.begin(9600);
//-------------------//
lcd.setCursor (4,1); //definimos la columna 4 de la fila 1
lcd.print("PRONIE"); //Mostramos la palabra
lcd.noBlink(); //La lcd no parpadea
delay(2000);
}
void loop()
{
disCalculada = calcularDistancia();
grados=servo1.read(); //guardamos el valor de giro del servo
Serial.println("-------------");
Serial.print("cm :");
Serial.println(disCalculada);
delay (200);
if (disCalculada < 30)
{
temporal=180; // se asigna a la variable un 100
tone (piezo, 600, 100); // ejecuta una frecuencia en el piezo (pin, frecuencia y duración)
}
else
{
temporal=0; // se asigna a la variable un 0
}
delay(10);
servo1.write(temporal); //giramos los grados guardados en la variable temporal de acuerdo al resultado del if
lcd.setCursor (1,1);
lcd.print("Distancia ");
lcd.println(disCalculada);
}
int calcularDistancia()
{
long distancia; //creamos la variable de tipo larga
long duracion;
digitalWrite(trig, LOW);
delayMicroseconds(4);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duracion = pulseIn(echo, HIGH);
duracion = duracion/2;
distancia = duracion/29;
return distancia;
}
Vídeo del Reto
Código en el IDE de Arduino
#include <pitches.h> // librería para la melodia
#include <LiquidCrystal.h>
#include <Servo.h>
//---------------------
int melodia[] =
{
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_F4, NOTE_A4, 0,
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_F4, NOTE_A4, 0,
NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4, 0,
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_E4, NOTE_G4, 0,
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_E4, NOTE_G4 ,0,
NOTE_C4, NOTE_D4, NOTE_C4, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_F4,0
};
int noteDurations[] =
{
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
};
//--------------------
Servo servo1; //declaramos la variable para controlar el servo motor
LiquidCrystal lcd(8,9,4,5,6,7); //definimos los pines de arduino que controlan la LCD, no se porque el orden de los pines es así, si los ordeno distinto da error en la lcd
int puertoservo =3; //Se asigna el pin 3 a esta variable
int trig =13; //Se asigna el pin 13 a esta variable
int echo =12; //Se asigna el pin 12 a esta variable
int piezo =2; //Se asigna el pin 2 a esta variable
int grados; //variable para guardar los grados de ang del servo
int temporal =0; //variable a usar en el if
int anguloMin =650; //variable en la que se asigna el ang menor
int anguloMax =2550; //variable en la que se asigna el ang mayor
float disCalculada;
void setup()
{
servo1.attach (puertoservo,anguloMin,anguloMax); //inicializamos el servo indicando por cual puerto nos comunicamos y los ángulos Max y Min
//------------------//
pinMode(trig, OUTPUT); // Envía datos
pinMode (echo, INPUT); // Recibe datos
pinMode (piezo, OUTPUT);
Serial.begin(9600);
//-------------------//
lcd.setCursor (4,1); //definimos la columna 4 de la fila 1
lcd.print("PRONIE"); //Mostramos la palabra
lcd.noBlink(); //La lcd no parpadea
delay(2000);
}
void loop()
{
disCalculada = calcularDistancia();
grados=servo1.read(); //guardamos el valor de giro del servo
Serial.println("-------------");
Serial.print("cm :");
Serial.println(disCalculada);
delay (200);
if (disCalculada < 30)
{
temporal=170; // se asigna a la variable un 170
servo1.write(temporal); //giramos los grados guardados en la variable temporal
for (int estaNota = 0; estaNota < 40; estaNota++) {
int noteDuration = 1000 / noteDurations[estaNota];
tone(2, melodia[estaNota], noteDuration);
int pausaEntreNotas = noteDuration * 1.30;
delay(pausaEntreNotas);
noTone(8);
}
}
else
{
temporal=0; // se asigna a la variable un 0
servo1.write(temporal);
}
delay(10);
lcd.setCursor (1,1);
lcd.print("Distancia ");
lcd.println(disCalculada);
}
int calcularDistancia()
{
long distancia; //creamos la variable de tipo larga
long duracion;
digitalWrite(trig, LOW);
delayMicroseconds(4);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duracion = pulseIn(echo, HIGH);
duracion = duracion/2;
distancia = duracion/29;
return distancia;
}
ENTRE LOS DESAFÍOS DE ESTA UNIDAD ESTA:
- Trabajar las notas, al no ser músico me fue un poco difícil pero luego fui comprendiendo cómo se trabajan y la diferencia entre las escala Americana y Latina
- El trabajo con la LCD es más complicado cuando no se tiene el módulo I2C, se requiere de más cuidado.
- LiquidCrystal lcd(8,9,4,5,6,7) este código debo de analizarlo para entender porque el orden de los numero y porque si se cambian da error en la LCD
URL consultadas:
No hay comentarios:
Publicar un comentario