Отправка символа «А» посредством мигания светодиода
Как написать код для отправки символа «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
}
}
@Nyssa, 👍1
1 ответ
Лучший ответ:
Вместо того, чтобы печатать «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 и гас при нуле. Поэтому результаты (которые предоставляет мой код) будут выглядеть так:
Итак, вы получаете две вспышки, первая через секунду после начала, затем промежуток в 5 секунд, а затем еще одна вспышка. Это будет 01000001.
Однако как узнать, когда начинать считать вспышки? Это может быть:
Это будет 00000001.
Или даже:
Это будет 10000010.
Вы же видите, что, получив ответ, вы не можете сделать никаких осмысленных выводов о том, что представляет собой персонаж?
Итак, асинхронный последовательный порт (обычный последовательный порт на Arduino) имеет стартовый бит, который сигнализирует, когда начинать отсчет, например:
Обычно последовательный порт находится в высоком состоянии (непрерывные 1 с), а затем, когда приходит 0, это означает «начать подсчет». Итак, вы ждете 1½ бита времени, а затем делаете выборку с известной скоростью передачи данных. В вашем примере, где вы хотите 1 секунду на бит, скорость передачи данных будет 1 (один бит в секунду). Таким образом, вы делаете выборку каждую секунду. Обычно скорость передачи данных несколько выше, например 9600 или 115200 выборок в секунду.
Также имеется стоповый бит, который всегда равен 1. Это гарантирует, что в конце каждого байта будет как минимум одна 1, чтобы мы могли определить, когда прибудет следующий стартовый бит.
Есть другие способы сделать это, например, короткий импульс может представлять ноль, а более длинный импульс — единицу. В этом случае любой импульс может представлять начало байта, а затем вы просто измеряете, сколько коротких и сколько длинных импульсов вы получаете (для некоторого определения «короткого» и «длинного»).
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Управление цифровой адресной светодиодной лентой RGB 12 В с помощью Arduino
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Мигните светодиодом 5 раз с помощью цикла for