Powered By Blogger

domingo, 11 de março de 2012

Tradutor Morse

Arduino by my Self
Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);



Esta experiência é um complemento ao SOS, LED Código Morse.

Agora iremos ver como fazer um tradutor de palavras e textos para código morse e efetuar a sinalização em um LED.
Para usar, basta:
Abrir um terminal de comunicação serial da IDE do Arduino, e escrever os caracteres, palavra ou texto, e enviar. O Arduino irá traduzir e sinalizar no LED ou Lâmpada de Sinalização.


Tabela do Código Morse



O HARDWARE:
É o mesmo utilizado na experiência anterior. 

O CIRCUITO:

É o mesmo utilizado na experiência anterior.  Um LED ligado ao pino 10 com seu respectivo resistor de limitação e queda de tensão.



O SOFTWARE:

/*
  Este exemplo é um código de domínio público.
*/

int ledPin = 10; // pino onde seráconectado o LED

// matriz contendo o código Morse de cada letra do alfabeto
char* letters[] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", // A-I
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", // J-R
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." // S-Z
};

// matriz contendo o código Morse de cada número
char* numbers[] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....",
"--...", "---..", "----."};

int dotDelay = 200; // delay para os "dits"

// inicialização do Arduino
void setup()
{
  pinMode(ledPin, OUTPUT); // define pino do LED como saída
  Serial.begin(9600); // inicializa a comunicação serial
}

// loop principal do programa
void loop()
{
  char ch; // define variável
  if (Serial.available()) // existe alguma informação a ser lida da serial?
    {
    ch = Serial.read(); // lê uma letra única
    if (ch >= 'a' && ch <= 'z') // se a letra estiver entre a e z
      {
      flashSequence(letters[ch - 'a']); // chama a função "flashSequence"
                                                     // tendo como parâmetro o número da
                                                     // letra na matriz
                                                    // subtrair 'a' da letra é um ponto
                                                    // de refrência 'a' - 'a' = 0...
                                                    // primeiro menbro da matriz;
                                                   // 'b' - 'a' = 1...
                                                   // segundo membro da matriz
                                                  // e assim por diante
      }
    else if (ch >= 'A' && ch <= 'Z') // se a letra está entre A e Z
      {
      flashSequence(letters[ch - 'A']); // como dito acima, agora para as maísculas
      }
  else if (ch >= '0' && ch <= '9') // se está entre 0 e 9
    {
      flashSequence(numbers[ch - '0']); // como dito acima, agora para os números
    }
  else if (ch == ' ') // se vazio, espaço
    {
    delay(dotDelay * 4); // gap entre as palavras
    }
  }
}

// pisca a sequência letras
void flashSequence(char* sequence)
{
  int i = 0;
  while (sequence[i] != NULL) // enquanto não acabar a sequencia de letras
    {
      flashDotOrDash(sequence[i]); // envia para ser piscado o dit ou dah 
      i++; // mais um da sequência
    }
  delay(dotDelay * 3); // gap entre letras
}


// pisca a sequência de dits e dahs
void flashDotOrDash(char dotOrDash)
{
  digitalWrite(ledPin, HIGH); // acende LED
  if (dotOrDash == '.') // se dit?
    {
      delay(dotDelay); // tempo de um dit
    }
  else // então é  um dah 
    {
      delay(dotDelay * 3); // tempo de um dah
    }
  digitalWrite(ledPin, LOW); // apaga o LED
  delay(dotDelay); // gap entre piscadas
}
// Fim da Compilação



O VÍDEO:
Vejamos o teste!

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com









3 comentários:

  1. Bom dia ;

    Caso eu queira que a informação digitada no serial se repita indefinidamente , como faço?

    ResponderExcluir
  2. –·· ·· –·–· ·– –––··· –·–· ·· –·· ·– –·· · –– ·– ·· ··· ·– –· – ·· ––· ·– –·· ––– –– ··– –· –·· ––– ––··–– ·––– ··– –·· ·– ·· ··· –– ––– ––··–– –·–· ·–· ·· ··· – ·· ·– –· ·· ··· –– ––– ––··–– ·· ··· ·–·· ·– –– ·· ··· –– –––

    ResponderExcluir
  3. x XXXx XXX xXXXx XXXxXXXXXX / XXXx xxXXX XXXXXX XXXxxx x xXXXx / xxxXXXXXX xXXXxXXXxXXX / XXX XXXXXXXXX XXXXXX XXXXXXXXX xXXXx xXXXx XXXXXXXXX xXXXXXX / xx xxx / XXX xxxx x / xxXXXx xx xXXXx xxx XXX / XXX x xxx XXX / XXXXXXXXX xxXXXx / XXX xxxx x / # # # # # # # / XXXXXX xXXX XXXxXXXx xxxx xx XXXx x xXXXxXXXxXXX / xx / XXX XXXXXXXXX xXXXxx XXXxx / XXX xxxx x XXXXXX / xx / XXXxx xx XXXxx XXXx XXX / XXX xxxx xx XXXx XXXxXXX / XXX xxxx xx xxx / xXXXXXX XXXXXXXXX xxXXX xXXXxx XXXxx / x XXXx XXXxx / xXXXXXX x xXXXxx xXXXxx XXXXXXxxXXXXXX XXXxxx xxXXX XXX / XXX xxxx x XXXxXXXXXX / XXXxx xx XXXxx XXXx xXXXXXXXXXXXXx XXX / xXXXxx xx xxx XXX x XXXx / XXX XXXXXXXXX / XXXXXX x XXXXXXxxXXXXXX / xXXX XXXx XXXxx / XXXx XXXXXXXXX xXXXXXX / XXX xxxx x xXXXx x xxx / xXXX / XXXxXXXx xxxx xXXX XXXx XXXxXXXx x / XXX xxxx xXXX / XXXXXX XXXXXXXXX xxx XXX / xXXXXXXx x XXXXXXXXX xXXXXXXx xXXXxx x / xx XXXx / XXX xxxx xXXX XXX / xXXXx XXXXXXXXX XXXXXXXXX XXXXXX / xXXX xXXXx x / XXXXXXx XXXXXXXXX XXXx XXXx xXXX / XXXxxx x / XXXxx x xXXX XXXxx xXXXxXXXxXXX / xXXXXXX xxxx XXXxXXXXXX / XXXxx XXXXXXXXX / XXX xxxx x XXXxXXXXXX / XXXx x xxxXXX x xXXXx / xXXXxx x xXXX xXXXx XXXx / xXXXXXX xxxx x XXXx / xxx XXXXXXXXX XXXXXX x XXX xxxx xx XXXx XXXXXXx / xx xxx / XXXx XXXXXXXXX XXX / xXXXx x xXXX XXXxx XXXxXXXXXX xxXXXXXXxx / xxXXX XXXXXXx xxxx xXXXxXXXxXXX / xx xXXXXXXXXXXXXx xXXXxx xXXXxx / XXX xXXXx XXXxXXXXXX / XXX XXXXXXXXX / xXXXXXX xXXX xXXXx XXXx / XXX xxxx x XXXXXX / xXXX XXXxxx XXXXXXXXX xxXXX XXX / xx XXX / XXX XXXXXXXXX XXXXXX XXXXXXXXX xXXXx xXXXx XXXXXXXXX xXXXXXX xXXXxXXXxXXX

    ResponderExcluir