Skip to main content

JOYSTICK

Reto

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
Solución maqueta

Vamos ampliando nuestra casa domótica con la luz RGB y el Joystick:

  1. Joystick fijado en la pared
  2. Led RGB fijado en la pared
  3. Conexiones Joystick en entradas analógicas
  4. Conexiones de RGB a las salidas digitales

Solución esquema eléctrico

Es igual que cuando vimos Joystick:

  1. Terminales GND del led RGB y del Joystick
  2. Terminal +5V del Joystick
  3. Otra opción de conectar el terminal GND
  4. 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

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

Solución código

https:///////////////////////////////////////LIBRERIAScreate.arduino.cc/editor/javierquintana/f4dfc995-5a42-4d45-a911-238f67b0c169/preview

#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 int JOYSTICKSW   = 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/output  pinMode(PULSADORTIMBRE, INPUT);  pinMode(TIMBRE, OUTPUT);  pinMode(PUERTA, OUTPUT);  pinMode(AZUL, OUTPUT);  pinMode(ROJO, OUTPUT);  pinMode(VERDE, OUTPUT);  pinMode(LED,OUTPUT);  ///////////////////////////////fijar situación inicial  digitalWrite(TIMBRE,HIGH);  // timbre apagado  myservo.attach(PUERTA);    //servo en el pin correspondiente  myservo.write(CERRADO);   //puerta cerrada  PUERTAABIERTA = false;  digitalWrite(AZUL,LOW);  //luz rgb apagada    digitalWrite(ROJO,LOW);  //luz rgb apagada    digitalWrite(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";      }  }  if (command=="boton"){    if (!PUERTAABIERTA){        Serial.println("Abriendo puerta .... ");        PUERTAABIERTA=true;        myservo.write(ABIERTO);        }else{        CerrarPuerta();      }  }  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");  } }