Управление светодиодом с помощью строковой переменной

Я хотел бы управлять тремя светодиодами с помощью строковой переменной с помощью 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);
  }
}

Может ли кто-нибудь проверить скетч и поправить меня?

, 👍0


1 ответ


Лучший ответ:

3

Этот вопрос возник на сайте Electronics.stackexchange.com, я скопировал оттуда мой ответ:

Есть три основные области, в которых ваша система может давать сбой: светодиоды, строковый ввод и логические вычисления. Сейчас это черный ящик: вы вводите какие-то данные, но не видите результата. Но вы понятия не имеете, где между этими двумя точками система дает сбой. Сначала вам следует сузить круг вопросов, чтобы найти, в чем проблема. Это очень хорошая практика для обучения отладке систем в целом.

Начните с ввода строки. После того, как вы прочитали строку из Serial, распечатайте ее обратно. Убедитесь, что оно соответствует тому, что вы ввели. (Я ожидаю, что проблема в этом. Как я уже сказал в своем комментарии, ваша строка, вероятно, читается как «Red\r \n». Напечатайте строку дважды, и если она напечатает «Red» дважды с разрыв строки между ними, то это ваша проблема. Вам нужно запустить my_Color.trim(), чтобы это исправить.)

Затем проверьте логические оценки. Добавьте команду Serial.print() с некоторой строкой после каждой оценки if. Если ваша программа распечатывает строку после ввода допустимого цвета светодиода, вы знаете, что ваш код выполняется правильно. В противном случае существует некоторая разница между строкой my_color и строкой, по которой вы ее проверяете.

Если после этого он по-прежнему не работает, значит, проблема в светодиодах. У меня нет вашей схемы, поэтому я не могу сказать вам, что там отлаживать.

,

Программа работает так, как и ожидалось, когда я использовал функцию обрезки(). Не могли бы вы объяснить мне, зачем в этом случае нужна функция обрезки ()?, @learn design

@learndesign: В описании видео, на которое вы дали ссылку, есть большое предупреждение, написанное заглавными буквами: «_РЕБЯТА, УБЕДИТЕСЬ, ЧТО НА ВАШЕМ ПОСЛЕДОВАТЕЛЬНОМ МОНИТОРЕ УСТАНОВЛЕНО НА «НЕ КОНЦОВАНИЕ СТРОК»!!!_». Это что-то значит?, @Edgar Bonet

@learndesign есть определенные специальные символы, связанные с типом данных String. Два таких символа — «\n» и «\r». Когда '\' и 'r' или 'n' находятся рядом друг с другом в строке, они фактически соответствуют разрыву строки (курсор перемещается вниз по строке) и возврату каретки (курсор перемещается полностью влево от строки). текущая строка). Для многих последовательных мониторов при вводе строки автоматически добавляется «\r\n» в конец строки, возможно, с пробелами. Поскольку "Red \r\n" != "Red", ваши операторы if никогда не срабатывали. Функция обрезки() устранит это за вас., @InBedded16