2015-10-27 5 views
0

Предположим, я хочу создать приложение, которое позволит пользователю вводить сообщение на Android и отображать его в коде Морзе на Arduino, переключая светодиод. Сообщение в коде Морзе состоит из серии штрихов (LONGS) и точек (шорт). Эти штрихи и точки могут отображаться, включив светодиод для правильного количества единиц времени.Код Морзе Arduino, переключая тот же светодиод

#include <Usb.h> 
#include <AndroidAccessory.h> 
#define LED_PIN 13 

#define SHORT 0 
#define LONG 1 
#define LETTER 2 
#define WORD 3 
#define STOP 4 

#define UNIT 250 

AndroidAccessory acc("testing", 
     "morse_code", 
     "CoolAccessory", 
     "1.0", 
     "http://www.example.com/CoolAccessory", 
       "0000000"); 
void setup() 
{ 
    // set communiation speed 
    Serial.begin(115200); 
    pinMode(LED_PIN, OUTPUT); 
    acc.powerOn(); 
} 

void loop() 
{ 
    byte msg[125]; 
    if (acc.isConnected()) { 
    int len = acc.read(msg, sizeof(msg), 1); // read data into msg variable 
    if (len > 0) { // Only do something if a message has been received. 
     displayMorseCode(msg, len); 

    } 
    } 
    else 
    digitalWrite(LED_PIN , LOW); // turn off light 
} 

//For toggle the LED for certain length of time use the delay() 
//call delay(UNIT) to pause execution of UNIT milliseconds 
//long unit *3 , short = unit 
void displayMorseCode(byte* msg, int len) { 

    // TODO :Interpret the message toggle LED on and off to display the 
      morse code 
if (msg[0] == 1) 
    digitalWrite(LED_PIN,HIGH); 
    else 
    digitalWrite(LED_PIN,LOW); 

} 

Сообщение состоит из следующих значений, которые были определены как константы:

КОРОТКИЕ: точка в Морзе
LONG: тир Морзе
ПИСЬМУ: конец письма в азбуке WORD: конец слова в morse STOP: конец morse ex: сообщение «SOS», закодированное как (КОРОТКИЕ, КОРОТКИЕ, КОРОТКИЕ, ПИСЬМО, ДОЛГО, ДЛИННО, ДЛИННО, ПИСЬМО, КОРОТКИЙ, КРАТКИЙ, КРАТКИЙ, ПИСЬМО, СЛОВО, СТОП)

Как реализовать displayMorseCode для этой функции?

+0

Нет, это часть Arduino. –

ответ

0
//For toggle the LED for certain length of time use the delay() 
//call delay(UNIT) to pause execution of UNIT milliseconds 
//long unit *3 , short = unit 
void displayMorseCode(byte* msg, int len) { 
int delayT = 0; 
int unit = 300; 
    // TODO :Interpret the message toggle LED on and off to display the 
      morse code 
for (int i = 0 ; i< len; i++) 
{ 
if (msg[i] == 1) { 
    digitalWrite(LED_PIN,HIGH); 
    delayT = 3*unit; 
} 
else { 
    digitalWrite(LED_PIN,LOW); 
    delayT = unit; 
} 

delay(delayT); 

} 

Это очень простой ответ, который изменит продолжительность в зависимости от полученного байта. Теперь вы должны создать словарь для каждого байта, так что в зависимости от байта (т. Е. S = короткий, короткий, короткий) вы создаете вывод записи, так же, как я показал вам, но вы должны изменить digitalWrite() с новым функция, которая создаст букву Морзе. Таким образом, условие if будет для каждой буквы (т. Е. if (msg[i] == 83) - S в десятичной ASCII-)

+0

Итак, моя активность в андроиде, мне нужно будет сделать что-то вроде частного статического финального байта SHORT = (byte) 0? –

+0

Да, а затем вы должны правильно отправить свои байты и использовать операторы ifs для соответствующей задержки. Вероятно, вам нужно добавить дополнительные инструкции if для LETTER WORD и STOP. – fcdimitr

+0

Хорошо, это имеет смысл сейчас, спасибо –

Смежные вопросы