JOYSTICK
3.4.1 ObjetivosReto
Ahora vamos a utilizar el Joystick para dos intenciones:
- Aprovechando el SWITCH central:
- Si se hace una pulsación larga:
- la puerta se abre (si estaba cerrada)
- o se cierra (si estaba abierta)
- El mando del Joystick nos regulará una luz ambiental
- El eje X en azul
- El eje y el rojo
- Un valor intermedio es un valor de los dos
3.4.2Solución Maqueta
maqueta
Vamos ampliando nuestra casa domótica con la luz RGB y el Joystick:
- Joystick fijado en la pared
- Led RGB fijado en la pared
- Conexiones Joystick en entradas analógicas
- Conexiones de RGB a las salidas digitales
3.4.3Solución Esquemaesquema eléctrico
Es igual que cuando vimos 2.6 Joystick:
- Terminales GND del led RGB y del Joystick
- Terminal +5V del Joystick
- Otra opción de conectar el terminal GND
- Otra opción de conectar +5V
y las demás conexiones igual que antes:
- D5 PWM al Rojo del RGB (tiene que ser PWM)
- D6 PWM al Azul del RGB (tiene que ser PWM)
- D7 al Verde del RGB (luego lo utilizaremos)
- A1 al EJEX JOYSTICK
- A2 al EJEY JOYSTICK
- A3 al SWITCH JOYSTICK
info
Nota:Nota: El microruptor del Joystick es digital luego lo apropiado es conectarlo en una entrada salida digital, pero como vamos escasos de entradas y salidas digitales (ya verés como esto se complica), lo trataremos como analógico.
Solución vídeo
3.4.4Solución Vídeo
3.4.5 Cócódigo
///////////////////////////////////////LIBRERIAS #include <Servo.h> #include <SoftwareSerial.h> ///////////////////////////////////////ENTRADAS SALIDAS DIGITALES /////// // 0 ocupado por el puerto serie ordenador-arduino // 1 ocupado por el puerto serie ordenador-arduino const int PULSADORTIMBRE =2;//sensor tactil const int TIMBRE =3;//buzzer activo const int PUERTA = 4;//servo puerta const int AZUL = 5;//led RGB const int ROJO = 6;//led RGB const int VERDE = 7;//led RGB const int LED = 13; ////////////////////////////////////// ENTRADAS ANALÓGICAS ///////////// const int JOYSTICKAZUL = 1;const int JOYSTICKROJO = 2; const intJOYSTICKROJOJOYSTICKSW =23;constintJOYSTICKSW=3;////////////////////////////////////// OBJETOS Servo myservo;//objeto servo ///////////////////////////////////////VARIABLES const int ABIERTO =0;//ángulo abierto puerta const int CERRADO =75;//ángulo cerrado puerta, se ha modificado con respecto a 90 que es cierre total pues tropezaba con la pared bool PUERTAABIERTA;//guardará si está abierto o no const int QUITAREBOTES = 1000;//el tiempo para eliminar rebotes String command = "";// guardará la respuesta desde el BT bool ENCENDIDO;//guardará que debe de dejar la luz encendida /////////////////////////////////////FUNCIONES void CerrarPuerta(); ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////INICIO ////////////////////////// ////////////////////////////////////////////////////////////////////////// void setup() {Serial.begin(9600);//inicializar el puerto serie del ordenador////////////////////////////////fijar input/outputpinMode(PULSADORTIMBRE, INPUT);pinMode(TIMBRE, OUTPUT);pinMode(PUERTA, OUTPUT);pinMode(AZUL, OUTPUT);pinMode(ROJO, OUTPUT);pinMode(VERDE, OUTPUT);pinMode(LED,OUTPUT);///////////////////////////////fijar situación inicialdigitalWrite(TIMBRE,HIGH);// timbre apagadomyservo.attach(PUERTA);//servo en el pin correspondientemyservo.write(CERRADO);//puerta cerradaPUERTAABIERTA = false;digitalWrite(AZUL,LOW);//luz rgb apagadadigitalWrite(ROJO,LOW);//luz rgb apagadadigitalWrite(VERDE,LOW);//luz verde apagada} ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////BUCLE /////////////////////////// ////////////////////////////////////////////////////////////////////////// void loop() {//////////////////////////// timbre ////////////////////////////////////////if (digitalRead(PULSADORTIMBRE)){Serial.println("Abriendo puerta .... ");PUERTAABIERTA=true;myservo.write(ABIERTO);delay(3000);CerrarPuerta();}////////// pulsadorjoystick abrir y cerrar la puerta//////////////////////int valor=analogRead(JOYSTICKSW);//Serial.println(valor);if (valor==0){delay(QUITAREBOTES);valor=analogRead(JOYSTICKSW);if (valor==0){Serial.println("//////////////HAS PULSADO EL BOTÓN DEL JOYSTICK");command="boton";}}}ifif(command=="boton"){if (!PUERTAABIERTA){Serial.println("Abriendo puerta .... ");PUERTAABIERTA=true;myservo.write(ABIERTO);}else{CerrarPuerta(); }else{CerrarPuerta();}}command}=command="";//////////// juego luces joystick //////////////////////////////////////////int valorAz = analogRead(JOYSTICKAZUL);valorAz = (valorAz-500)/2.5;if (valorAz<5) valorAz =0;if (!ENCENDIDO)analogWrite(AZUL,valorAz);int valorRo = analogRead(JOYSTICKROJO);valorRo = (valorRo-550)/2.5;if (valorRo<5) valorRo =0;if (!ENCENDIDO) analogWrite(ROJO,valorRo);}}////////////////////////////////////////////////////////////////////////// //////////////////////////////////FUNCION CERRAR PUERTA//////////////////// ////////////////////////////////////////////////////////////////////////// void CerrarPuerta(){if (PUERTAABIERTA){for (int i=1;i<=3;i++){Serial.println("CERRANDO PUERTA !!!");digitalWrite(LED,HIGH);digitalWrite(TIMBRE,LOW);delay(1000);digitalWrite(TIMBRE,HIGH);digitalWrite(LED,LOW);delay(1000);}myservo.write(CERRADO);PUERTAABIERTA=false;Serial.println("Puerta cerrada");} }