Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
carlosvolt
Published © LGPL

8-channel light control with ps/2 keyboard and arduino

The 8-Channel Lighting Control System with PS/2 Keyboard and Arduino is a project that combines the versatility of the Arduino platform with

IntermediateProtip46
8-channel light control with ps/2 keyboard and arduino

Things used in this project

Hardware components

Arduino Nano
×1

Story

Read more

Code

Source code

C/C++
Source code
#include "ps2_Keyboard.h"//Instalar librería ps2KeyboardHost
#include "ps2_AnsiTranslator.h"
#include "ps2_SimpleDiagnostics.h"
int pin4 = 4;
int pin5 = 5;
int pin6 = 6;
int pin7 = 7;
int pin8 = 8;
int pin9 = 9;
int pin10 = 10;
int pin11 = 11;
int estadoPin4 = 0;
int estadoPin5 = 0;
int estadoPin6 = 0;
int estadoPin7 = 0;
int estadoPin8 = 0;
int estadoPin9 = 0;
int estadoPin10 = 0;
int estadoPin11 = 0;
typedef ps2::SimpleDiagnostics<254> Diagnostics_;
static Diagnostics_ diagnostics;
static ps2::AnsiTranslator<Diagnostics_> keyMapping(diagnostics);
static ps2::Keyboard<3,2,1, Diagnostics_> ps2Keyboard(diagnostics);
static ps2::KeyboardLeds lastLedSent = ps2::KeyboardLeds::none;
void setup() {
    Serial.begin(9600);
    pinMode(pin4, OUTPUT);
    pinMode(pin5, OUTPUT);
    pinMode(pin6, OUTPUT);
    pinMode(pin7, OUTPUT);
    pinMode(pin8, OUTPUT);
    pinMode(pin9, OUTPUT);
    pinMode(pin10, OUTPUT);
    pinMode(pin11, OUTPUT);
    digitalWrite(pin4, LOW);
    digitalWrite(pin5, LOW);
    digitalWrite(pin6, LOW);
    digitalWrite(pin7, LOW);
    digitalWrite(pin8, LOW);
    digitalWrite(pin9, LOW);
    digitalWrite(pin10, LOW);
    digitalWrite(pin11, LOW);
    ps2Keyboard.begin();
    keyMapping.setNumLock(true);
    ps2Keyboard.awaitStartup();
    diagnostics.reset();
//Encendemos el led del teclado(Bloq Num)
    ps2Keyboard.sendLedStatus(ps2::KeyboardLeds::numLock);
    lastLedSent = ps2::KeyboardLeds::numLock;
}
void loop() {
    diagnostics.setLedIndicator<LED_BUILTIN>();
    ps2::KeyboardOutput scanCode = ps2Keyboard.readScanCode();
    if (scanCode == ps2::KeyboardOutput::garbled) {
        keyMapping.reset();
    }
    else if (scanCode != ps2::KeyboardOutput::none)
    {
        char buf[2];
        buf[1] = '\0';
        buf[0] = keyMapping.translatePs2Keycode(scanCode);
        if (buf[0] == '\r') {//Se cumple si es la tecla enter
            Serial.println();
        }
else if (buf[0] >= ' ') { // Se cumple si es un caracter
Serial.write(buf);
//Tecla 1
if (buf[0] == '1'){
if(estadoPin4 ==0){//Si la variable estado2 es igual a 0 se cumple esta condición
 digitalWrite(pin4, HIGH);
 Serial.println("Relay 1 activado");
estadoPin4 =1;//Asignamos el valor 1 a la variable "estadoPin4"
} else{
digitalWrite(pin4, LOW);
Serial.println("Relay 1 desactivado");
estadoPin4 =0;
  }
}
//Tecla 2
if (buf[0] == '2'){
if(estadoPin5 ==0){//Si la variable estado2 es igual a 0 se cumple esta condición
 digitalWrite(pin5, HIGH);
 Serial.println("Relay 2 activado");
estadoPin5 =1;//Asignamos el valor 1 a la variable "estadoPin5"
} else{
digitalWrite(pin5, LOW);
Serial.println("Relay 2 desactivado");
estadoPin5 =0;
  }
}
//Tecla 3
if (buf[0] == '3'){
if(estadoPin6 ==0){//Si la variable estado2 es igual a 0 se cumple esta condición
 digitalWrite(pin6, HIGH);
 Serial.println("Relay 3 activado");
estadoPin6 =1;//Asignamos el valor 1 a la variable "estadoPin6"
} else{
digitalWrite(pin6, LOW);
Serial.println("Relay 3 desactivado");
estadoPin6 =0;
  }
}
//Tecla 4
if (buf[0] == '4'){
if(estadoPin7 ==0){//Si la variable estado2 es igual a 0 se cumple esta condición
 digitalWrite(pin7, HIGH);
 Serial.println("Relay 4 activado");
estadoPin7 =1;//Asignamos el valor 1 a la variable "estadoPin7"
} else{
digitalWrite(pin7, LOW);
Serial.println("Relay 4 desactivado");
estadoPin7 =0;
  }
}
//Tecla 5
if (buf[0] == '5'){
if(estadoPin8 ==0){//Si la variable estado2 es igual a 0 se cumple esta condición
 digitalWrite(pin8, HIGH);
 Serial.println("Relay 5 activado");
estadoPin8 =1;//Asignamos el valor 1 a la variable "estadoPin8"
} else{
digitalWrite(pin8, LOW);
Serial.println("Relay 5 desactivado");
estadoPin8 =0;
  }
}
//Tecla 6
if (buf[0] == '6'){
if(estadoPin9 ==0){//Si la variable estado2 es igual a 0 se cumple esta condición
 digitalWrite(pin9, HIGH);
 Serial.println("Relay 6 activado");
estadoPin9 =1;//Asignamos el valor 1 a la variable "estadoPin9"
} else{
digitalWrite(pin9, LOW);;
Serial.println("Relay 6 desactivado");
estadoPin9 =0;
  }
}
//Tecla 7
if (buf[0] == '7'){
if(estadoPin10 ==0){//Si la variable estado2 es igual a 0 se cumple esta condición
 digitalWrite(pin10, HIGH);
 Serial.println("Relay 7 activado");
estadoPin10 =1;//Asignamos el valor 1 a la variable "estadoPin10"
} else{
digitalWrite(pin10, LOW);;
Serial.println("Relay 7 desactivado");
estadoPin10 =0;
  }
}
//Tecla 8
if (buf[0] == '8'){
if(estadoPin11 ==0){//Si la variable estado2 es igual a 0 se cumple esta condición
 digitalWrite(pin11, HIGH);
 Serial.println("Relay 8 activado");
estadoPin11 =1;//Asignamos el valor 1 a la variable "estadoPin11"
} else{
digitalWrite(pin11, LOW);
Serial.println("Relay 8 desactivado");
estadoPin11 =0;
  }
}
}
//Verifica el estado de los taclas Bloq Num y Bloq Mayús para activarlas o desactivarlas desde el mismo teclado
        ps2::KeyboardLeds newLeds =
              (keyMapping.getCapsLock() ? ps2::KeyboardLeds::capsLock : ps2::KeyboardLeds::none)
            | (keyMapping.getNumLock() ? ps2::KeyboardLeds::numLock : ps2::KeyboardLeds::none);
        if (newLeds != lastLedSent) {
            ps2Keyboard.sendLedStatus(newLeds);
            lastLedSent = newLeds;
        }
    }
}

Credits

carlosvolt
34 projects • 4 followers
Contact

Comments

Please log in or sign up to comment.