unsigned short int punto = 70; // Duracion del punto
unsigned short int raya = punto * 4; // Duracion de la raya
unsigned short int negro = punto * 3; // Duracion del apagado entre rayas y puntos
unsigned short int letrayletra = punto * 5; // Duracion del apagado entre letras
void playTone(int tone, int duration, int speakerPin) {
// Sends the signal to the speakerPin
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}
void playToneLed(int tone, int duration, int speakerPin, int ledPin) {
// Sends the signal to speakerPin and ledPin
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
digitalWrite(ledPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
digitalWrite(ledPin, LOW);
delayMicroseconds(tone);
}
}
// ########## CLASE LETRA #########
class letra {
private:
char caracter;
char* codigo;
int ledPin;
public:
letra (char car, char* cad, unsigned short int pin);
void set (char car, char* cad, unsigned short int pin);
void mostrar ();
void sonar ();
void mostrarYsonar ();
};
letra::letra (char car, char* cad, unsigned short int pin) {
// Constructor
caracter = car;
codigo = cad;
ledPin = pin;
pinMode(ledPin, OUTPUT);
}
void letra::set (char car, char* cad, unsigned short int pin) {
// Setter
caracter = car;
codigo = cad;
ledPin = pin;
}
void letra::mostrar () {
// Shows the code in in the ledPin
unsigned short int j = 0;
while (codigo[j] != 0) {
if (codigo[j] == \'.\') {
digitalWrite (ledPin, HIGH);
delay (punto);
digitalWrite (ledPin, LOW);
delay (negro);
} else if (codigo[j] == \'-\') {
digitalWrite (ledPin, HIGH);
delay (raya);
digitalWrite (ledPin, LOW);
delay (negro);
}
j++;
}
delay (letrayletra);
}
void letra::sonar () {
// Sounds the code on the speakerPin
unsigned short int j = 0;
while (codigo[j] != 0) {
if (codigo[j] == \'.\') {
playTone (440, 100, 9);
delay (negro/3);
} else if (codigo[j] == \'-\') {
playTone (440, 100 * 4, 9);
delay (negro/3);
}
j++;
}
delay (letrayletra);
}
void letra::mostrarYsonar () {
// Sounds and shows the code (ledPin + speakerPin)
unsigned short int j = 0;
while (codigo[j] != 0) {
if (codigo[j] == \'.\') {
playToneLed (440, 100, 9, ledPin);
delay (negro/4);
} else if (codigo[j] == \'-\') {
playToneLed (440, 100 * 4, 9, ledPin);
delay (negro/4);
}
j++;
}
delay (letrayletra/2);
}
// ##############################
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
}
int letraIN = 0;
unsigned short int ledPin = 13;
void loop() {
digitalWrite(ledPin, LOW);
letraIN = 0;
letraIN = Serial.read();
letra let (0, "", ledPin);
switch (letraIN) {
case \'a\': let.set (\'a\', ".-", ledPin);
break;
case \'b\': let.set (\'b\', "-...", ledPin);
break;
case \'c\': let.set (\'c\', "-.-.", ledPin);
break;
case \'d\': let.set (\'d\', "-..", ledPin);
break;
case \'e\': let.set (\'e\', ".", ledPin);
break;
case \'f\': let.set (\'f\', "..-.", ledPin);
break;
case \'g\': let.set (\'g\', "--.", ledPin);
break;
case \'h\': let.set (\'h\', "....", ledPin);
break;
case \'i\': let.set (\'i\', "..", ledPin);
break;
case \'j\': let.set (\'j\', ".---", ledPin);
break;
case \'k\': let.set (\'k\', "-.-", ledPin);
break;
case \'l\': let.set (\'l\', ".-..", ledPin);
break;
case \'m\': let.set (\'m\', "--", ledPin);
break;
case \'n\': let.set (\'n\', "-.", ledPin);
break;
case \'o\': let.set (\'o\', "---", ledPin);
break;
case \'p\': let.set (\'p\', ".--.", ledPin);
break;
case \'q\': let.set (\'q\', "--.-", ledPin);
break;
case \'r\': let.set (\'r\', ".-.", ledPin);
break;
case \'s\': let.set (\'s\', "...", ledPin);
break;
case \'t\': let.set (\'t\', "-", ledPin);
break;
case \'u\': let.set (\'u\', "..-", ledPin);
break;
case \'v\': let.set (\'v\', "...-", ledPin);
break;
case \'w\': let.set (\'w\', ".--", ledPin);
break;
case \'x\': let.set (\'x\', "-..-", ledPin);
break;
case \'y\': let.set (\'y\', "-.--", ledPin);
break;
case \'z\': let.set (\'z\', "--..", ledPin);
break;
case \'0\': let.set (\'0\', "-----", ledPin);
break;
case \'1\': let.set (\'1\', ".----", ledPin);
break;
case \'2\': let.set (\'2\', "..---", ledPin);
break;
case \'3\': let.set (\'3\', "...--", ledPin);
break;
case \'4\': let.set (\'4\', "....-", ledPin);
break;
case \'5\': let.set (\'5\', ".....", ledPin);
break;
case \'6\': let.set (\'6\', "-....", ledPin);
break;
case \'7\': let.set (\'7\', "--...", ledPin);
break;
case \'8\': let.set (\'8\', "---..", ledPin);
break;
case \'9\': let.set (\'9\', "----.", ledPin);
break;
case \'.\': let.set (\'.\', ".-.-.-", ledPin);
break;
case \',\': let.set (\',\', "--..--", ledPin);
break;
case \'?\': let.set (\'?\', "..--..", ledPin);
break;
case \'"\': let.set (\'"\', ".-..-.", ledPin);
break;
}
//let.mostrar();
//let.sonar();
let.mostrarYsonar();
}