Go Down

Topic: Proyecto para Braille (Read 851 times) previous topic - next topic

RawrCharly

Hola que tal.

les platico,tengo este código el cual permite traducir texto por medio del monitor serial a braille y después se muestra en los 6 Leds que se han conectado en el arduino. Mi pregunta es, habrá una forma de cargar un archivo .txt y que se muestre sin tener que escribirlo, o en su defecto, dejarlo ya escrito y que haga la secuencia sin tener que hacer letra por letra de "X" texto?

ojala me puedan ayudar y muchas gracias!

Code: [Select]

int Leds[]={2,4,6,8,10,12};

void led1()
{
digitalWrite(Leds[5], HIGH);
}

void led2()
{
digitalWrite(Leds[4], HIGH);
}

void led3()
{
digitalWrite(Leds[3], HIGH);
}

void led4()
{
digitalWrite(Leds[2], HIGH);
}

void led5()
{
digitalWrite(Leds[1], HIGH);
}

void led6()
{
digitalWrite(Leds[0], HIGH);
}

void apagadoLeds()
{
delay(750);// tiempo de espera de leds encendidos

digitalWrite(Leds[0],LOW);
digitalWrite(Leds[1],LOW);
digitalWrite(Leds[2],LOW);
digitalWrite(Leds[3],LOW);
digitalWrite(Leds[4],LOW);
digitalWrite(Leds[5],LOW);

delay(750);// tiempo de espera de leds apagados
}

void setup()
{
for(int i = 0; i <= 5; i++ )
{
pinMode(Leds[i], OUTPUT);
}

Serial.begin(9600);

}

void loop()
{
if(Serial.available() >= 0)
{
int informacion = Serial.read();

switch(informacion)
{
case'a':
led1();
apagadoLeds();
break;

case'b':
led1();
led2();
apagadoLeds();
break;

case'c':
led1();
led4();
apagadoLeds();
break;

case'd':
led1();
led4();
led5();
apagadoLeds();
break;

case'e':
led1();
led5();
apagadoLeds();
break;

case'f':
led1();
led2();
led4();
apagadoLeds();
break;

case'g':
led1();
led2();
led4();
led5();
apagadoLeds();
break;

case'h':
led1();
led2();
led5();
apagadoLeds();
break;

case'i':
led2();
led4();
apagadoLeds();
break;

case'j':
led2();
led4();
led5();
apagadoLeds();
break;

case'k':
led1();
led3();
apagadoLeds();
break;

case'l':
led1();
led2();
led3();
apagadoLeds();
break;

case'm':
led1();
led3();
led4();
apagadoLeds();
break;

case'n':
led1();
led3();
led4();
led5();
apagadoLeds();
break;

case'ñ':
led1();
led2();
led4();
led5();
led6();
apagadoLeds();
break;

case'o':
led1();
led3();
led5();
apagadoLeds();
break;

case'p':
led1();
led2();
led3();
led4();
apagadoLeds();
break;

case'q':
led1();
led2();
led3();
led4();
led5();
apagadoLeds();
break;

case'r':
led1();
led2();
led3();
led5();
apagadoLeds();
break;

case's':
led2();
led3();
led4();
apagadoLeds();
break;

case't':
led2();
led3();
led4();
led5();
apagadoLeds();
break;

case'u':
led1();
led3();
led6();
apagadoLeds();
break;

case'v':
led1();
led2();
led3();
led6();
apagadoLeds();
break;

case'w':
led2();
led4();
led5();
led6();
apagadoLeds();
break;

case'x':
led1();
led3();
led4();
led6();
apagadoLeds();
break;

case'y':
led1();
led3();
led4();
led5();
led6();
apagadoLeds();
break;

case'z':
led1();
led3();
led5();
led6();
apagadoLeds();
break;

default:
break;

}//FIN del switch(informacion)
}//FIN del if(Serial.available() &gt; 0)

}

noter

¿Te refieres a cargar el archivo en el propio arduino, o cargarlo en el monitor serie y enviarlo?
En el primer caso, y para saber si cabría en progmem o en EEPROM ¿Qué tamaño puede tener el texto a enviar?

Por cierto, el código que pones se puede optimizar mucho.

Kike_GL

Y de que le sirve un LED al ciego ?

Piensa en algo como esto

También podrías crear un algoritmo de conversión de ASCII a Braille.
Saludos, Kike_GL

surbyte

Y de que le sirve un LED al ciego ?
Al ciego no le sirve para a el si y tal vez tenga algun elemento como el que has sugerido, o lo supongo.

Kike_GL

#4
Jun 06, 2018, 03:22 am Last Edit: Jun 06, 2018, 03:31 am by Kike_GL
Bueno aquí esta mi aporte.

La matriz braille[] contiene todo el alfabeto en orden de modo que la letra a (ASCII 97) equivale a braille[0], por eso pongo ASCII - 97 para que corresponda. La codificación de cada binario esta en el orden 654321 en dos columnas y 3 filas (cajetin).

Estoy usando 6 LED del 2~7 donde pin D2 corresponde al LED1 arriba a la izquierda, el pin D3 corresponde a primera columna, segunda fila osea LED2.

Code: [Select]

const byte braille[] = {
B000001, //97a
B000011, //98b
B001001, //99c
B011001, //100d
B000011, //101e
B001011, //102f
B011011, //103g
B010011, //104h
B001010, //105i
B011010, //106j
B000101, //107k
B000111, //108l
B001101, //109m
B011101, //110n
B010101, //110o
B001111, //112p
B011111, //113q
B010111, //114r
B001110, //115s
B011110, //116t
B100101, //117u
B100111, //118v
B111010, //119w
B101101, //120x
B111101, //121y
B110101, //122z
B111011  //165ñ
};

void setup() {
   Serial.begin(9600);
   for (byte i=2; i<=7; i++){
      pinMode(i, OUTPUT);
   }
}

void loop() {
   String palabra = "";
   char letra;

   while(Serial.available()) {
      letra = Serial.read();
      manda(letra);
      delay(300);         //Tiempo de lectura por caracter
      palabra.concat(letra);
   }
   if (palabra != ""){
      Serial.println(palabra);  //Muestra la palabra completa
   }
}

void manda(char letra) {
   if (letra == 'ñ'){
      letra = 123;  //Codifique la ñ al final de la matriz braille[]
   }
   for (byte i=0; i<=5; i++){
      digitalWrite(i+2, bitRead(braille[letra-97],i));
   }
}


Instrucciones de uso:
Escriba una palabra en el monitor serie y envíela "mirando" los LED.  :o
Saludos, Kike_GL

Go Up