Page 1

PROYECTO FINAL: PROTOTIPOS INTERACTIVOS 2 // Titulo: La magia de los colores // Marzo, 2018./*Mediante el estudio de los colores que se reflejan en un prisma, relacionado a los que se reflejan en la naturaleza como es el arcoíris, después de la experimentación y se lleva al mundo de la programación. */ #include <Servo.h> Servo miServo; int rled = 11; // Pin PWN 11 para led rojo int vled = 5; // Pin PWM 9 para led verde int aled = 3; // Pin PWM 10 para led azul int R=255; //Variable de intensidad del color rojo int V=255; // Variable de intensidad del color verde int A=255; //Variable de intensidad del color azul int angulo;

//Variable del ángulo del ServoMotor.

int botonPin = 2; //Pin del botón. int piezoPin = 9; // Piezo o bocina (Actuador) conectado al pin 9 bool botonEstado = false; //Con esta variable booleana se conoce si está //o no conectado: 1 -> Sí 0 -> No. bool colores = true; void setup() { Serial.begin(9600); //////////////////////////////////////////////////// miServo.attach(6); pinMode(rled, OUTPUT); // Led de salida color rojo. Pin: rled pinMode(vled, OUTPUT); // Led de salida color verde. Pin: vled pinMode(aled, OUTPUT); // Led de salida color azul. Pin: rled


analogWrite(rled,R); analogWrite(vled,V); analogWrite(aled,A);

pinMode(botonPin, INPUT); pinMode(piezoPin, OUTPUT);

//Se establece la entrada del botón-pulsador //Se establece la salida de piezo-bocina

} void mostrarColor() { analogWrite(rled,R); analogWrite(vled,V); analogWrite(aled,A); }

//Función que muestra los colores //Intensidad en el led rojo //Intensidad en el led verde // Intensidad en el led azul

void musica() //Melodía con piezo activado. { tone (piezoPin, 493.88, 500); //SI 493,88 delay(600); tone (piezoPin, 392.00, 500); //SOL 392,00 delay(600); tone (piezoPin, 440.00, 500); //LA 440,00 delay(600); tone (piezoPin, 293.67, 1000); //RE 293,67 delay(1200); tone (piezoPin, 293.67, 500); //RE 293,67 delay(600); tone (piezoPin, 440, 500); //LA 440,00 delay(600); tone (piezoPin, 493.88, 500); //SI 493,88 delay(600); tone (piezoPin, 392.00, 1000); //SOL 392,00 delay(1500); }


void loop () { angulo = map(analogRead(A5), 0, 1023, 0, 160); miServo.write(angulo); mostrarColor ();

//Función que lee colores primarios.

if (colores == true) { //En la variable booleana colores, si es verdadero if (angulo >= 69 && angulo <=159){ //Cuando el ángulo del ServoMotor está entre 69 y 159: // se establecen ciertas intensidades de los colores. R = (159-angulo)*255/90; // Para un ángulo de 159, el color rojo es el único que se tiene que ver, pero a la hora que vamos disminuyendo el ángulo, el color V = 255-(159-angulo)*255/90; // tiene que ir bajando de intensidad y a la misma vez el color verde tiene que ir aumentando lentamente, esto hasta un ángulo de 69. A = 255; //El azul no tiene que aparecer en ningún momento. } if (angulo < 69) { if (angulo < 16) { R = 255-(16-angulo)*150/16; } else { R = 255; } V = (78-angulo)*255/78; if (angulo <=50) { A = 255-(52-angulo)*255/52; } } } else{ if(colores == false){ R = 0;


V = 255; A = 255; mostrarColor(); delay (1000); R = 255; V = 0; A = 255; mostrarColor(); delay (1000); R = 255; V = 255; A = 0; mostrarColor(); delay (1000);

//Muestra color rojo

//Muestra color verde

//Muestra color

azul

} } if (digitalRead(botonPin) == HIGH) { if (colores == true){ colores = false; } else { colores = true; musica(); } delay(500); } delay(50); }

//Si el botĂłn pulsador se vuelve a presionar // cancela

//Se activa la melodĂ­a.

Programación final  
Programación final  
Advertisement