Отправка символа «А» посредством мигания светодиода
Как написать код для отправки символа «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, чтобы мы могли определить, когда прибудет следующий стартовый бит.
Есть другие способы сделать это, например, короткий импульс может представлять ноль, а более длинный импульс — единицу. В этом случае любой импульс может представлять начало байта, а затем вы просто измеряете, сколько коротких и сколько длинных импульсов вы получаете (для некоторого определения «короткого» и «длинного»).
спасибо большое, мигание произошло. но я немного запутался. Я считаю включение и выключение светодиода, чтобы увидеть символ «A» в двоичном коде, который равен 01000001. но этого не произошло., @Nyssa
Серьёзно? Я изменил скорость передачи данных на 115200, надеюсь, вы заметили. Если я отправлю "A", то светодиод будет мигать через 1 секунду и через 7 секунд, что верно: 01000001
. Вы ожидаете две вспышки, одну через секунду и одну через семь секунд. В остальное время светодиод выключен (то есть ноль)., @Nick Gammon
О. Я это заметил, но я пытался изменить на 9600. Может быть, поэтому. Мне действительно нужно использовать скорость передачи данных 115200, чтобы получить 01000001? Какой тип библиотеки мне следует импортировать в эту кодировку? Где я могу получить библиотеку? Этот arduino действует как передатчик для отправки символа «A», а приемник — это приложение. Есть ли у вас какие-либо предложения, как мне синхронизировать их обоих? Могу ли я получить ваш адрес электронной почты. У меня есть много вопросов., @Nyssa
Скорость передачи данных нужна только для отправки символа в скетч из последовательного монитора. Скорость, с которой мигает светодиод, задается в вашем коде, в настоящее время один бит в секунду. Вам не нужна библиотека. Зачем она вам нужна? Если у вас есть еще вопросы, пожалуйста, задайте их здесь., @Nick Gammon
Я думал, что мне это нужно. Я просмотрел другие проекты, они импортируют библиотеки. Но сейчас я не понимаю, что вы имеете в виду под >> миганием через 1 секунду и через 7 секунд, что правильно: 01000001. Вы ожидаете двух вспышек, одну через секунду и одну через семь секунд. Остальное время светодиод выключен (то есть ноль)., @Nyssa
Мне любопытно узнать, что **вы** ожидаете. Пожалуйста, укажите, как часто, по вашему мнению, светодиод будет мигать и с какими интервалами. Конечно, 01000001 представляет два мигания? (Там две "1"). Что еще это может означать?, @Nick Gammon
Извините, что запутал вас. Как мне посчитать мигание светодиода, о котором вы упомянули ранее? Для 1 сколько вспышек и секунд это означает? И для 0 сколько секунд светодиод гаснет? Я хочу передать «A» в двоичном коде в течение 10 секунд. Если светодиод горит, представляет ли он 1? Я немного запутался. Когда светодиод выключен, он представляет 0?, @Nyssa
как мне посчитать вспышки? это основано на двоичном коде 01000001? как мне посчитать вспышки? это основано на двоичном коде 01000001? контакты, к которым я подключаю перемычку к светодиоду, должны быть контактами 13 и tx, правильно ли это? я хочу передать «A»., @Nyssa
Ник, я пытался посчитать мигание светодиода на плате Arduino. Он показывает мигание через 1 секунду и через 7 секунд. Но когда я подключил белый светодиод с помощью перемычек, мигание отличается. Я считаю мигание, когда светодиод начинает гаснуть как 0, а когда загорается как 1. Белый светодиод мигает 0 1 0 1 0 (от 5 до 6 секунд) 1 0 1. Или мне следует считать второе мигание, которое показывает 010000010?, @Nyssa
*контакты, к которым я подключаю перемычку к светодиоду, должны быть контактом 13 и tx, правильно ли это? * - Нет, контакт 13 и земля, с токоограничивающим резистором между светодиодом и землей, например, 330 Ом., @Nick Gammon
*как мне посчитать вспышки?* - что вы имеете в виду? Когда вы видите вспышку, вы ее считаете? Вы также отмечаете время между вспышками. Я совершенно не понимаю, после прочтения этих вопросов, чего вы ожидаете от кода, и если вы не можете этого сказать, то ни я, ни кто-либо другой (включая вас) не может заставить его сделать это, что бы это ни было., @Nick Gammon
Теперь я понял. Я ожидаю, что arduino будет передатчиком, который передает символ 'A' через контакт 13 на arduino. Ты мне очень помог, Ник. Спасибо тебе большое-пребольшое., @Nyssa
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Управление цифровой адресной светодиодной лентой RGB 12 В с помощью Arduino
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Мигните светодиодом 5 раз с помощью цикла for
Вы забыли задать вопрос, @jsotola
Нет кода, предназначенного для отправки чего-либо через светодиод. Попробуйте погуглить что-то вроде Arduino light data transmission и подобные термины. Для этого есть библиотеки, @chrisl
Возможный дубликат [передача последовательности бит с помощью arduino uno](https://arduinoprosto.ru/q/52352/transmit-a-sequence-of-bit-using-arduino-uno), @Maximilian Gerhardt
Хм, я запутался. Вы задали этот же вопрос здесь https://arduinoprosto.ru/q/52352/transmit-a-sequence-of-bit-using-arduino-uno/52363#52363 и данный ответ также является точным функциональным эквивалентом, за исключением того, что данные поступают из последовательного монитора.., @Maximilian Gerhardt
Я многому научился на этом сайте. Я новичок и хочу многому научиться. Ваши объяснения и помощь были очень полезны :) Я очень благодарен за это. Большое спасибо., @Nyssa
Я хочу, чтобы вы очень четко указали, что вы хотите, чтобы код делал. Например: когда я отправляю "A", я ожидаю паузу в 1 секунду с выключенным светодиодом, затем светодиод будет гореть 1 секунду, затем светодиод будет выключен 5 секунд, затем будет гореть одну секунду, а затем будет выключен еще одну секунду (что в общей сложности дает 8 секунд на отправку буквы "A"). Если это не то, что вы хотите, пожалуйста, укажите, что вы **хочете**., @Nick Gammon
Теперь получите. Я видел, как светодиод загорался и гас, как вы описали выше. Поэтому отправка буквы «А» занимает всего 8 секунд. Спасибо вам большое, @Nyssa