/*
Lectura de teclado de ORIC atmos y jostick analógico para hacer de ratón y teclado usb
*/
int indice = 0;
int MisPines[] = {3,4,5,6,7,8,9,10}; //Orden de los pines de columnas.
char Tabla[] ={0,'1','x','7','v','3','n','5',
0,177,'q','j','f','d','t','r',
128,'z','2','m','4','c','6','b',
0,0,'º','k','-',39,'9',';',
133,216,217,' ',218,215,',','.',
130,178,']','u','p','[','i','o',
0,'a','s','y','e','w','h','g',
129,176,0,'8','/','=','l','0',
0,194,'x',200,'v',196,'n',198,
0,179,'q','j','f','d','t','r',
128,'z',195,'m',197,'c',199,'b',
0,0,'º','k',204,39,202,';',
133,216,217,' ',218,215,',','.',
130,212,']','u','p','[','i','o',
0,'a','s','y','e','w','h','g',
129,176,0,201,'/',205,'l',203
};
char teclado;
char pulsadas[] = {0,0,0,0,0,0,0,0}; // Flags para saber si la tecla estaba pulsada o no
char tecla = 0; //valor por defecto de la tecla
char oldtec = 0; //valor de la tecla antigua
char tecrat=0; //La tecla del ratón no está pulsada
void setup() { // initialize the buttons' inputs:
// Inicializar hid usb
Mouse.begin();
Keyboard.begin();
digitalWrite(12,HIGH); //Activa la resistencia interna de pullup
digitalWrite(11,HIGH); //Activa la resistencia interna de pullup este pin se usa para parar el teclado
digitalWrite(13,HIGH); //Activa la resistencia interna de pullup del pulsador de segundo teclado
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
//Activar resistencias pullup
for (int cont = 0; cont < 8 ; cont++){
digitalWrite(MisPines[cont],HIGH);
}
}
void loop() {
// use serial input to control the mouse:
if (digitalRead(13)==HIGH || digitalRead(11)==HIGH){
rata();
if (digitalRead(12)==LOW){
if (tecrat == 0){
Mouse.press();
tecrat=1;
}
}
else{
if (tecrat == 1){
Mouse.release();
tecrat=0;
}
}
if (digitalRead(11)==LOW){
if (tecrat == 0){
[COLOR="Red"] Mouse.press(MOUSE_RIGHT); // Esto es lo que no funciona, hace como si fuese Mouse.press();[/COLOR]
tecrat=1;
}
}
else{
if (tecrat == 1){
Mouse.release(MOUSE_RIGHT);
tecrat=0;
}
}
for (int col = 0; col<8 ; col++){
//Selección de columna
digitalWrite(0, (col & 4)/4);
digitalWrite(1, (col & 2)/2);
digitalWrite(2, (col & 1));
for(int row = 0; row<8 ; row++){
//Selección de Fila
teclado=digitalRead(13);
if (teclado == HIGH){
indice = (col*8+row);
}
else{
indice = 64+(col*8+row);
}
tecla = Tabla[indice];
if(digitalRead(MisPines[row])==0){ //Tecla pulsada
if (pulsadas[col] | 1<<row ==0){ //Anteriormente no pulsada
Keyboard.press(tecla); //Se manda la pulsación
pulsadas[col] = pulsadas[col] ^ 1<<row; //se indica que está pulsada (se le da la vuelta al bit)
}
}
else{ //Tecla sin pulsar
if (pulsadas[col] | 1<<row !=0){ //Anteriormente pulsada
Keyboard.release(tecla); //Se manda la despulsación
pulsadas[col] = pulsadas[col] ^ 1<<row; //se indica que está pulsada (se le da la vuelta al bit)
}
}
}
}
for (int equis=0; equis<7;equis++){
rata();
delay(2); //Pequeño retardo para quitar rebotes
}
}
else{
}
}
void rata(){ //Rutina para mover el ratón
int X=(512-analogRead(0))/80;
int Y=(analogRead(1)-512)/80;
Mouse.move(X,Y);
}