Преобразование симола в двоичный код и вывод на светодиод
- Войдите на сайт для отправки комментариев
Втр, 12/01/2016 - 14:40
Заранее извиняюсь если продублировал какую-то тему, но не нашел ничего!!
Помогите решить проблемку, только начал заниматься с Ардуино.
Вводим символ например А, светодиод должен промигать соответственно 1000001 соответственно.
Как, я понимаю я должен переменную, которую получаю по serialread преобразовать в последовательность 0 и1 согласно ASCII и потом передать на digitalwrite. Иеще предположим 1- короткая вспышка, 0-длинная вспышка.
С уважением......
Во-первых, что такое "вводим символ" в Вашем понимании? Serial, матричная клавиатура, еще какая то другая клавиатура, персоналка, планшет?
Во-вторых, читайте про битовые операции, информации в гугле много, первая попавшаяся, здесь http://www.c-cpp.ru/books/bitovye-operatory
В-третьих, если нужно не просто включить/выключить по 1 и 0, то сделайте это отдельной функцией, например, которой на вход подавайте 0 или 1, а внутри функции решайте, что делать с этим 0 или 1, например, на 0 - "длинная вспышка", а на 1 - короткая или наоборот. Можно, конечно, не делать это функцией, но так для Вас же будет легче читать текст программы, да и понятней.
Когда формулируете вопрос, попробуйте представить, как мы читаем его, не видя, ни Ваших мыслей, ни то, что у Вас на столе. Мы не в курсе про всё это, телепатия - не наш конёк.
И да, скетч вставляйте в сообщение правильно, пока еще не начали. Плюс без скетча помочь Вам будет сложно или дорого.
Извините, наверное действительно не до конца понятно сформулировал вопрос:
На клавиаткре компьютера, к котрому подключено Ардуино ввожу символ, например букву А, надо чтобы светодиод промигал введенный символ двоичным кодом ASCII.
В чем трудность: как перевести переменную simvol в 0 и 1, чтобы потом подать их на светодиод командой digitalwrite.
Как выводить на монитор в двоичном виде понятно:
int simvol = 0; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { simvol = Serial.read(); //вводим символ Serial.println(simvol, BIN); //выводим на монитор в виде 0 и 1 } }Битовые опреации вам нужны, ссылкудаже вам дали...подскажу - из операций понадобится сдвиг.
Мазохисты собрались..... смакуют.
Попробуй так что ли....
Смакую. Попробуйте выполнить Ваш код, ветка else в любом случае не выполнится)
Пробую, рассказую. Не работает else.
Yarik, не позорьтесь, учите матчасть.
Спасибо! за помощь и обсуждение!
Использовал функцию
bitRead()
и цикл, если кому интересно завтра могу выложить код.
С уважением....
int simvol = 0; int chbit[7]; int i; void setup() { Serial.begin(9600); pinMode(2, OUTPUT); } void loop() { if (Serial.available() > 0) { simvol = Serial.read(); //вводим символ Serial.println(simvol, BIN); //выводим на монитор в виде 0 и 1 Serial.println("________________"); digitalWrite(2,HIGH); delay(500); for(i=0;i<8;i++) { chbit[i]=bitRead(simvol,i); if (chbit[i]==1) { digitalWrite(2,chbit[i]); Serial.println(chbit[i]); delay(100); digitalWrite(2,LOW); delay(10); } else { digitalWrite(2,chbit[i]); Serial.println(chbit[i]); delay(50); digitalWrite(2,LOW); delay(50); } } } }Как и обещал код, может кому понадобится....