Отправка символа «А» посредством мигания светодиода

Как написать код для отправки символа «A» на Arduino через мигающий светодиод? Я работаю над проектом по передаче данных. Мне очень нужна помощь и руководство. Используемые материалы: Arduino Uno R3, белый светодиод и резистор.

МОЙ ВЫХОД В ПОСЛЕДОВАТЕЛЬНОМ МОНИТОРЕ

Вставьте букву:

01000001 65 - Символ A

00001010 10 - когда я отправляю/ввожу

КОД

 int LEDTrans = 13;
int timeWaitOn = 1000; //milisec (1 sec)
int timeWaitOff = 1000; // milisec (1 sec)
byte byteRead;

void setup() {                
// Turn the Serial Protocol ON
  Serial.begin(9600);


 Serial.print("Insert letter:");
 Serial.println(" ");
}

void loop() {

digitalWrite(LEDTrans,HIGH); //turn the led on
delay(timeWaitOn); //delay in millisec (1 sec)
digitalWrite(LEDTrans,LOW); //turn the led off
delay(timeWaitOff); //wait a sec


   /*  check if data has been sent from the computer: */
  if (Serial.available()) {


     byteRead = Serial.read();
    // will print the binary representation of 'byteRead' as 8 characters of '1's and '0's, MSB first.
for ( uint8_t bitMask = 128; bitMask != 0; bitMask = bitMask >> 1 ) {

      if ( byteRead & bitMask ) {

    Serial.write('1');
  } else {
    Serial.write('0');
  }  
}

Serial.write("    ");
Serial.println(byteRead);    //send back the actual ASCII code
}


}

, 👍1


1 ответ


Лучший ответ:

0

Вместо того, чтобы печатать «0» или «1», включите или выключите вывод светодиода, например:

const int LEDTrans = 13;
const int timeWaitOn = 1000;  // миллисекунда (1 секунда)
const int timeWaitOff = 1000; // миллисекунда (1 секунда)

void setup() {
  // Включить последовательный протокол
  Serial.begin(115200);
  Serial.println("Send letter:");
  pinMode (LEDTrans, OUTPUT);
}

void loop() {
  /*  check if data has been sent from the computer: */
  if (Serial.available()) {
    byte byteRead = Serial.read();
    // выведет двоичное представление 'byteRead' в виде 8 символов '1' и '0', старший байт первым.
    for ( uint8_t bitMask = 128; bitMask != 0; bitMask >>= 1 ) {
      if ( byteRead & bitMask ) {
        digitalWrite(LEDTrans, HIGH); //включаем светодиод
        delay(timeWaitOn); //задержка в миллисекундах (1 сек)
        digitalWrite(LEDTrans, LOW); //выключаем светодиод
      } else {
        delay(timeWaitOff); //подождать секунду
      } // конец if
    } // конец цикла for
  } // конец, если что-то доступно
} // конец цикла

как мне посчитать вспышки? это основано на двоичном коде 01000001?

Вот в чем проблема... судя по тому, что, кажется, просит ваш вопрос, вы хотите, чтобы светодиод мигал при 1 и гас при нуле. Поэтому результаты (которые предоставляет мой код) будут выглядеть так:

Пример 1

Итак, вы получаете две вспышки, первая через секунду после начала, затем промежуток в 5 секунд, а затем еще одна вспышка. Это будет 01000001.

Однако как узнать, когда начинать считать вспышки? Это может быть:

Пример 2

Это будет 00000001.

Или даже:

Пример 3

Это будет 10000010.

Вы же видите, что, получив ответ, вы не можете сделать никаких осмысленных выводов о том, что представляет собой персонаж?


Итак, асинхронный последовательный порт (обычный последовательный порт на Arduino) имеет стартовый бит, который сигнализирует, когда начинать отсчет, например:

Последовательный с начальным битом

Обычно последовательный порт находится в высоком состоянии (непрерывные 1 с), а затем, когда приходит 0, это означает «начать подсчет». Итак, вы ждете 1½ бита времени, а затем делаете выборку с известной скоростью передачи данных. В вашем примере, где вы хотите 1 секунду на бит, скорость передачи данных будет 1 (один бит в секунду). Таким образом, вы делаете выборку каждую секунду. Обычно скорость передачи данных несколько выше, например 9600 или 115200 выборок в секунду.

Также имеется стоповый бит, который всегда равен 1. Это гарантирует, что в конце каждого байта будет как минимум одна 1, чтобы мы могли определить, когда прибудет следующий стартовый бит.


Есть другие способы сделать это, например, короткий импульс может представлять ноль, а более длинный импульс — единицу. В этом случае любой импульс может представлять начало байта, а затем вы просто измеряете, сколько коротких и сколько длинных импульсов вы получаете (для некоторого определения «короткого» и «длинного»).

,