Помогите пожалуйста, с заданием:Переделайте программу так, чтобы устройство распознавало текстовые команды, например, «on» и «off», и соответственно включало и выключало светодиод. C начала начну, пожалуй с команд "High" и "Low", а «on» и «off», потом условием поставлю! У меня где-то ошибка, а не пойму где...Код... #define LED_PIN 9 String message; void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { while (Serial.available()) { char incomingChar = Serial.read(); if ('a' <= incomingChar && incomingChar <='z') { message += incomingChar; } else if (incomingChar == '\n') digitalWrite(LED_PIN, message.toLowerCase()); message = ""; } } } Компилятор выдаёт ошибку: error: invalid use of void expression(Ошибка: неправильное использование пустот выражения)!Что это значит??? Может я не правильно использую метод "message.toLowerCase()"?
Метод Вы используете не правильно, уже по той причине, что пытаетесь перевести сообщение не в верхний регистр, а в нижний. Но даже это не поможет, потому что выражение digitalWrite(pin, value) принимает либо HIGH и LOW в момент написания программы для замены их компилятором, либо 0 либо 1(да и вообще любые числа) как значения переменных для работы с ними во время программы.
Есть же хороший пример получения данных из COM порта и использования их как угодно. Можно разобраться и переписать под любую задачу.
Ну, да! Я как раз с ним и разбираюсь!И как раз у меня вопрос, почему компилятор выделяет мне строчку digitalWrite(LED_PIN, message.toUpperCase()); и выдаёт ошибку: invalid use of void expression(Ошибка: неправильное использование пустот выражения)! Что это значит? О каких пустотах он говорит??? С верхним регистром тоже самое! Это я понимаю! Я спрашиваю об ошибке " invalid use of void expression"!
В классе String метод toUpperCase определен как "void toUpperCase(void);", т.е. метод преобразует саму строку и не возвращает никакого результата. Следовательно, использовать его нужно так: Код (Text): message.toUpperCase(); Но что эта строчка делает у вас в параметрах digitalWrite(), как она там вообще оказалась?
Да, действительно! Ошибка, в неправильном использовании. Всё теперь, я розобрался! В принципе ничего сложного, но нужно было почитать дополнительную информацию по классу String, и по его функциям. В самом эксперементе № 19, плохо описана эта тема, я несильно понял. Пришлось навёрстывать тут... http://arduino.ua/ru/prog/ И ещё долго промучился, с тем что забыл считать символ "\n"(enter, символ новой строки). И таки думал почему условие if (message == "ON") не выполняеться, оказалось if (message == "ON\n") - всё решило! Спасибо, всем кто ответил!
Только это неправильный способ. Нужно поменять условие в цикле чтения строки, чтобы символ перевода строки не оказывался внутри нее.