Управление светодиодом с помощью строковой переменной
Я хотел бы управлять тремя светодиодами с помощью строковой переменной с помощью Arduino Mega.
Я подключил три светодиода к контактам 10, 11 и 12 Arduino.
Если моя строка равна Red, красный светодиод должен загореться. Если моя строка равна желтому цвету, желтый светодиод должен загореться. Если моя строка равна зеленому, должен загореться зеленый светодиод.
Я написал следующую программу и ожидаю следующего: когда я набираю «Красный», я ожидаю, что загорится красный светодиод и так далее для остальных. Но светодиод не загорается.
Вы можете посмотреть следующее видео: https://www.youtube.com/watch?v= MAnAc_t0OrM&t=1583 с
int redPin=10, yellowPin=11, greenPin=12;
String my_Color;
String msg1="Which LED do you want to turn ON?";
String msg2="Red, Yellow or Green?";
String msg3="You chose LED:";
void setup() {
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(msg1);
Serial.println(msg2);
while(Serial.available()==0) {}
my_Color=Serial.readString();
Serial.print(msg3 );
Serial.println(my_Color);
Serial.println('Red', BIN);
Serial.println('my_Color',BIN);
if(my_Color == "Red") {
Serial.print("Red True");
digitalWrite(redPin,HIGH);
digitalWrite(yellowPin,LOW);
digitalWrite(greenPin,LOW);
}
if(my_Color=="Yellow") {
digitalWrite(redPin,LOW);
digitalWrite(yellowPin,HIGH);
digitalWrite(greenPin,LOW);
}
if(my_Color=="Green") {
digitalWrite(redPin,LOW);
digitalWrite(yellowPin,LOW);
digitalWrite(greenPin,HIGH);
}
}
Может ли кто-нибудь проверить скетч и поправить меня?
@learn design, 👍0
1 ответ
Лучший ответ:
Этот вопрос возник на сайте Electronics.stackexchange.com, я скопировал оттуда мой ответ:
Есть три основные области, в которых ваша система может давать сбой: светодиоды, строковый ввод и логические вычисления. Сейчас это черный ящик: вы вводите какие-то данные, но не видите результата. Но вы понятия не имеете, где между этими двумя точками система дает сбой. Сначала вам следует сузить круг вопросов, чтобы найти, в чем проблема. Это очень хорошая практика для обучения отладке систем в целом.
Начните с ввода строки. После того, как вы прочитали строку из Serial, распечатайте ее обратно. Убедитесь, что оно соответствует тому, что вы ввели. (Я ожидаю, что проблема в этом. Как я уже сказал в своем комментарии, ваша строка, вероятно, читается как «Red\r \n». Напечатайте строку дважды, и если она напечатает «Red» дважды с разрыв строки между ними, то это ваша проблема. Вам нужно запустить my_Color.trim(), чтобы это исправить.)
Затем проверьте логические оценки. Добавьте команду Serial.print() с некоторой строкой после каждой оценки if. Если ваша программа распечатывает строку после ввода допустимого цвета светодиода, вы знаете, что ваш код выполняется правильно. В противном случае существует некоторая разница между строкой my_color и строкой, по которой вы ее проверяете.
Если после этого он по-прежнему не работает, значит, проблема в светодиодах. У меня нет вашей схемы, поэтому я не могу сказать вам, что там отлаживать.
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как получить уникальный идентификатор для всех плат Arduino?
- Как очистить буфер FIFO на MPU6050?
- Элегантное решение для обновления содержимого TFT-дисплея
- Считывание нескольких поворотных энкодеров
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
Программа работает так, как и ожидалось, когда я использовал функцию обрезки(). Не могли бы вы объяснить мне, зачем в этом случае нужна функция обрезки ()?, @learn design
@learndesign: В описании видео, на которое вы дали ссылку, есть большое предупреждение, написанное заглавными буквами: «_РЕБЯТА, УБЕДИТЕСЬ, ЧТО НА ВАШЕМ ПОСЛЕДОВАТЕЛЬНОМ МОНИТОРЕ УСТАНОВЛЕНО НА «НЕ КОНЦОВАНИЕ СТРОК»!!!_». Это что-то значит?, @Edgar Bonet
@learndesign есть определенные специальные символы, связанные с типом данных String. Два таких символа — «\n» и «\r». Когда '\' и 'r' или 'n' находятся рядом друг с другом в строке, они фактически соответствуют разрыву строки (курсор перемещается вниз по строке) и возврату каретки (курсор перемещается полностью влево от строки). текущая строка). Для многих последовательных мониторов при вводе строки автоматически добавляется «\r\n» в конец строки, возможно, с пробелами. Поскольку "Red \r\n" != "Red", ваши операторы if никогда не срабатывали. Функция обрезки() устранит это за вас., @InBedded16