Skip to main content

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.2

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

3.4.3

Solución Esquemaesquema eléctrico

Es igual que cuando vimos 2.6 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

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.4

Solución Vídeo

3.4.5 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 int JOYSTICKROJOJOYSTICKSW   = 23;
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  if (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");
   }
}