Tablet Braille con Teclado

Dependencies:   mbed

Fork of PRUEBATECLADO by Andres Gaffs

TabletBrailleconTeclado.cpp

Committer:
AndresGaffS
Date:
2014-05-11
Revision:
0:1f31cf981ab4

File content as of revision 0:1f31cf981ab4:

#include "mbed.h"

Serial pc(USBTX, USBRX); // tx, rx COMUNICACION SERIAL
//---------------------------------------- P U E R T O S ----------------------------------------------
// se utiliza un Bus oOut por cada celdilla
BusOut celda_D(PTD4, PTA12, PTC7, PTC3, PTC4, PTC5);
BusOut celda_C(PTA5, PTC8, PTC9, PTC6, PTC10, PTC11);
BusOut celda_B(PTA13, PTD5, PTD0, PTC12, PTC13, PTC16);
BusOut celda_A(PTD2, PTD3, PTD1, PTC17, PTA16, PTA17);
BusOut celda_E(PTE30, PTE29, PTE23, PTC2, PTB3, PTB2);
//----------------------------------------- E N T R A D A   T E C L A D O -----------------------------
BusIn tecladoval(PTB10, PTB9, PTB0, PTB1, PTE5, PTE20, PTE21, PTE22);// son los 8 botones uno para cada letra o funcion que se activan solo si la convinacion es correcta
//----------------------------------------- T I M E R S -----------------------------------------------
Timer contador; //este timer es para la funcion principal
Timer timeb;// este otro timer es para que cheque si el valor de la convincion del teclado ha cambiado
//---------------------------------------- V A R I A B L E S ------------------------------------------
int letra;
int celda = 0;
int tecladoval_ant;
int tiempen;
int tiempant;
//-----------------------------------------F U N C I O N E S ------------------------------------------
void compu(); //funcion que recibe letras del teclado y manda el valor a imprimir
void teclado();// funcion que espera cierto tiempo hasta que la convinacion este hecha y la manda a decodebotons
void imprimir();// funcion que imprime el valor dado de la funcion compu o decodebotons
void decodebotons();// funcion que le asigna un valor el codigo mandado del teclado
//--------------------------------------- P R O G R A M A ---------------------------------------------
int main() {// el programa siempre espera un caracter de la compu mietras que cada 100 milisegundos checa el teclado
    pc.attach(&compu);
    contador.start();
    while(1) {
        if (contador.read_ms() == 100){
            teclado();
            contador.reset();
        }
   }  
}
//----------------------------------- F U N C I O N    D E S P L E G A D A ----------------------------
void decodebotons(){ // no se utilizo la funion default para poder agregar mas caracteres especiales
    switch (tecladoval){
        case 0: pc.printf(""); break;
        case 1: pc.printf("A"); letra = 1; break;
        case 2: pc.printf(""); break;
        case 3: pc.printf("B"); letra = 3; break;
        case 4: pc.printf(""); break;
        case 5: pc.printf("K"); letra = 5; break;
        case 6: pc.printf(""); break;
        case 7: pc.printf("L"); letra = 7; break;
        case 8: pc.printf(""); break;
        case 9: pc.printf("C"); letra = 9; break;
        case 10: pc.printf("I"); letra = 10; break;
        case 11: pc.printf("F"); letra = 11; break;
        case 12: pc.printf(""); break;
        case 13: pc.printf("M"); letra = 13; break;
        case 14: pc.printf("S"); letra = 14; break;
        case 15: pc.printf("P"); letra = 15; break;
        case 16: pc.printf(""); break;
        case 17: pc.printf("E"); letra = 17; break;
        case 18: pc.printf(""); break;
        case 19: pc.printf("H"); letra = 19; break;
        case 20: pc.printf(""); break;
        case 21: pc.printf("O"); letra = 21; break;
        case 22: pc.printf(""); break;
        case 23: pc.printf("R"); letra = 22; break;
        case 24: pc.printf(""); break;
        case 25: pc.printf("D"); letra = 25; break;
        case 26: pc.printf("J"); letra = 26; break;
        case 27: pc.printf("G"); letra = 27; break;
        case 28: pc.printf(""); break;
        case 29: pc.printf("N"); letra = 29; break;
        case 30: pc.printf("T"); letra = 30; break;
        case 31: pc.printf("Q"); letra = 31; break;
        case 32: pc.printf(""); break;
        case 33: pc.printf(""); break;
        case 34: pc.printf(""); break;
        case 35: pc.printf(""); break;
        case 36: pc.printf(""); break;
        case 37: pc.printf("U"); letra = 37; break;
        case 38: pc.printf(""); break;
        case 39: pc.printf("V"); letra = 39; break;
        case 40: pc.printf("|"); letra = 40; break;
        case 41: pc.printf(""); break;
        case 42: pc.printf(""); break;
        case 43: pc.printf(""); break;
        case 44: pc.printf(""); break;
        case 45: pc.printf("X"); letra = 45; break;
        case 46: pc.printf(""); break;
        case 47: pc.printf(""); break;
        case 48: pc.printf(""); break;
        case 49: pc.printf(""); break;
        case 50: pc.printf(""); break;
        case 51: pc.printf(""); break;
        case 52: pc.printf(""); break;
        case 53: pc.printf("Z"); letra = 53; break;
        case 54: pc.printf(""); break;
        case 55: pc.printf(""); break;
        case 56: pc.printf(""); break;
        case 57: pc.printf(""); break;
        case 58: pc.printf("W"); letra = 58; break;
        case 59: pc.printf("Ñ"); letra = 59; break;
        case 60: pc.printf("#"); letra = 60; break;
        case 61: pc.printf("Y"); letra = 61; break;
        case 62: pc.printf(""); break;
        case 63: pc.printf(""); break;
        case 64: pc.printf(" "); letra = 64; break;
        case 128: pc.printf("<--\n"); celda_A = celda_B = celda_C = celda_D = celda_E = 0; celda = -1; break; 
    }  
}
void compu(){
        char ch = pc.getc();
        //que escribir
        if (ch == 'A' | ch == 'a' | ch == '1'){
            letra = 1;
            pc.printf("A");
        } else if (ch == 'B' | ch == 'b' | ch == '2'){
            letra = 3;
            pc.printf("B");
        } else if (ch == 'C' | ch == 'c' | ch == '3'){
            pc.printf("C");
            letra = 9;
        } else if (ch == 'D' | ch == 'd' | ch == '4'){
            pc.printf("D");
            letra = 25;
        } else if (ch == 'E' | ch == 'e' | ch == '5'){
            pc.printf("E");
            letra = 17;
        } else if (ch == 'F' | ch == 'f' | ch == '6'){
            pc.printf("F");
            letra = 11;
        } else if (ch == 'G' | ch == 'g' | ch == '7'){
            pc.printf("G");
            letra = 27;
        } else if (ch == 'H' | ch == 'h' | ch == '8'){
            pc.printf("H");
            letra = 19;
        } else if (ch == 'I' | ch == 'i' | ch == '9'){
            pc.printf("I");
            letra = 10;
        } else if (ch == 'J' | ch == 'j' | ch == '0'){
            pc.printf("J");
            letra = 26;
        } else if (ch == 'K' | ch == 'k'){
            pc.printf("K");
            letra = 5;
        } else if (ch == 'L' | ch == 'l'){
            pc.printf("L");
            letra = 7;
        } else if (ch == 'M' | ch == 'm'){
            pc.printf("M");
            letra = 13;
        } else if (ch == 'N' | ch == 'n'){
            pc.printf("N");
            letra = 29;
        } else if (ch == 'O' | ch == 'o'){
            pc.printf("O");
            letra = 21;
        } else if (ch == 'P' | ch == 'p'){
            pc.printf("P");
            letra = 15;
        } else if (ch == 'Q' | ch == 'q'){
            pc.printf("Q");
            letra = 31;
        } else if (ch == 'R' | ch == 'r'){
            pc.printf("R");
            letra = 23;
        } else if (ch == 'S' | ch == 's'){
            pc.printf("S");
            letra = 14;
        } else if (ch == 'T' | ch == 't'){
            pc.printf("T");
            letra = 30;
        } else if (ch == 'U' | ch == 'u'){
            pc.printf("U");
            letra = 37;
        } else if (ch == 'V' | ch == 'v'){
            pc.printf("V");
            letra = 39;
        } else if (ch == 'W' | ch == 'w'){
            pc.printf("W");
            letra = 58;
        } else if (ch == 'X' | ch == 'x'){
            pc.printf("X");
            letra = 45;
        } else if (ch == 'Y' | ch == 'y'){
            pc.printf("Y");
            letra = 61;
        } else if (ch == 'Z' | ch == 'z'){
            pc.printf("Z");
            letra = 53;
        }else{
            ch = (int)ch;
            if (ch == 127){
                pc.printf("<-- \n");
                celda_A = celda_B = celda_C = celda_D = celda_E = 0;
                celda = -1;
            } else if (ch == 35){
                pc.printf("#");
                letra = 60;
            } else if (ch == 124){
                pc.printf("|");
                letra = 40;
            } else if (ch == 164 | ch == 165){
                pc.printf("Ñ");
                letra = 59;
            } else if (ch == 32){
                pc.printf(" ");
                letra = 0;
            } else if (ch == 10 | ch == 9){
                celda-=2;
                
            }
        }
        imprimir();
}//termino funcion compu        
void imprimir(){
        if (celda == 0){
        celda_A = letra;
        }else if(celda == 1){
            celda_B = letra;
        }else if(celda == 2){
            celda_C = letra;
        }else if(celda == 3){
            celda_D = letra;
        }else if(celda == 4){
            celda_E = letra;
        }
        
        if(celda >= 4){
            celda = 0;
        } else{
            celda += 1;
        }
}// termina funcion imprimir
    
void teclado(){
            tiempen = 0;
            tiempant = 0; 
        timeb.start();
        tecladoval_ant = tecladoval;
        while((tiempen-tiempant)<250){
            tiempen = timeb.read_ms();
            if (tecladoval != tecladoval_ant){
                    tecladoval_ant = tecladoval;
                    tiempant = tiempen;
            }
        }
        if(tecladoval == tecladoval_ant && tecladoval != 0){
                decodebotons();
                imprimir();
        }
        timeb.reset();
}//termina fincion teclado