Ребят в эксперименте 19 в задании после написано переделать программу , что б она понимала буквенный ввод. кто-нибудь понимает как делать это? у меня уже бошка опухла вот код исходной #define LED_PIN 9 // для работы с текстом существуют объекты-строки (англ. string) String message; void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { // передаваемые с компьютера данные поставляются байт за // байтом, в виде отдельных символов (англ. character). Нам // нужно последовательно их обрабатывать пока (англ. while) // в порту доступны (англ. available) новые данные while (Serial.available()) { // считываем (англ. read) пришедший символ в переменную char incomingChar = Serial.read(); // не стоит путать целые числа и символы. Они соотносятся // друг с другом по таблице, называемой кодировкой. Например // '0' — это 48, '9' — 57, 'A' — 65, 'B' — 66 и т.п. Символы // в программе записываются в одинарных кавычках if (incomingChar >= '0' && incomingChar <= '9') { // если пришёл символ-цифра, добавляем его к сообщению message += incomingChar; } else if (incomingChar == '\n') { // если пришёл символ новой строки, т.е. enter, переводим // накопленное сообщение в целое число (англ. to integer). // Так последовательность символов '1', '2', '3' станет // числом 123. Результат выводим на светодиод analogWrite(LED_PIN, message.toInt()); // обнуляем накопленное сообщение, чтобы начать всё заново message = ""; } } // посылайте сообщения-числа с компьютера через Serial Monitor } автор пишет , что Вам может пригодиться один из методов String: toLowerCase(yourString) илиtoUpperCase(yourString), которые возвращают переданную строку yourString, приведенную к нижнему или верхнему регистру соответственно. только он не сказал куда его вставить. а я вставил его и месадже и инкомингяччардж- толку никакого. отказывается работать.
имеется в виду, что, например, с компьютера передается "GREEN" и зажигается зеленый светодиод, а если передается "YELLOW", то загорается желтый светодиод. Принципиально сложного ничего нет - получили строчку, дальше if ...... else if. Допустим, написали вы такую программу. И хотите её усовершенствовать, чтобы он понимала не только слова набранные заглавными буквами, но и маленькими и даже так "GrEeN" тоже чтобы понимала. Все варианты написания в сложное условие не запихнешь, их слишком много, вот тут-то и пригодятся функции toLowerCase(yourString) или toUpperCase(yourString)
#define LED_PIN 9 // для работы с текстом существуют объекты-строки (англ. string) String message; void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { while (Serial.available()) { char incomingChar = Serial.read(); message += incomingChar; if (message == "on" ){ digitalWrite(LED_PIN,HIGH); }else if(message =="off"){ digitalWrite(LED_PIN,LOW); } message = ""; } а почему тогда вот это не работает???
скетч помещаете в соответствующий тег прикладываете скриншот обмена с портом и описываете как ведет себя схема. Пока непонятно, что значит "не работает".
я не знаю что такое тег, но вот скриншот программы. а суть следующая к 9 пину подключен светодиод с резистором. и при вводе в сериал монитор слова "on" светодиод должен загораться, а при вводе "off" отключаться. вот и все ничего не работает из этого естественно
там есть команда сериал принт сразу после ввода- я ее для себя вставил что бы хотя бы видить как он текст воспринимает. корректно или нет.
Отладочный принт это очень хорошо. Но нужен скриншот монитора порта вместе с тем, что вы набираете и что получаете от Ардуины. Программы в форуме вставлять с помощью кнопки:
вы про это? вот тут я пару раз ввел "on" / никакого отклика на схеме. диод не горит (со схемой проблем нет . напредидущем опыте все работало. те же пины и т д
да и кстати я пытался пользоваться функциями oLowerCase(yourString) или toUpperCase(yourString) но он выдавал ошибки. говорил что там не должно быть пусто в скобках. тогда я писал в скобки мессадж- он писал что интовое значения нельзя туда вводить, но прикол в том, что месадж не инт, а стринг- меня этот дебаггер в конец путает
но первом длеом конечно вопрос, почему прога выше не работает. ведь вроде все логично. выходит программа читает текст немного не так как я думаю? что же тогда мне с этим делать?
Наблюдение первое: команда принт не вывела ничего, вас это не смутило? Наблюдение второе: последняя команда цикла очищает переменную месседж. Т.е. строка "on" или "off" не соберется никогда, поэтому и команды включения/выключения не выполнятся никогда.
и мисейдж обнуляется в конце циклов- так что если до этого мисейдж был он он сначала в ключит а обнулившись просто пройдет мимо, тк как он уже не он. но он не вклбючает
так тольок что я переписал прогу подобным образом и все зароботало. вот только обратите внимание на отладчик. я ввел последовательно "он"- зажегся, потом ввел офф- потух, потом снова он- зажегся. а в мониторе набор букв почему-то перекосило жутко. доп символы приклеились
так все я окончательно сделал как надо . вот как это выглядит: большое спасибо что указали на обнуление месаджа. правда я пока не до конца понял почему оно влияло на исход, раз выполнялось после всех циклов
Вы обнуляли message не дожидаясь перевода строки, то есть после каждого введенного символа. Из-за этого у вас не собиралась правильно ни команда "on" ни команда "оff".