Не работают команды через монитор порта

Здравствуйте, не работают команды для управления RGB LED через монитор порта, помогите!
‘’’


int redPin = 2;
int greenPin = 3;
int bluePin = 4;
String myColor;
String msg = "What colour do you want";

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

  Serial.println(msg);

  while (Serial.available() == 0) {

  }
  myColor = Serial.readString();
  if (myColor == "red")
  {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, LOW);
  }
  if (myColor == "green") {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
    digitalWrite(bluePin, LOW);
  }
  if (myColor == "blue")
  {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, HIGH);
  }
  if (myColor == "off")
  {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, LOW);
  }

}

‘’’

попробуйте не использовать длинные команды: вместо red используйте r, вместо green - g и т.д.

Что Вы сделали для того, чтобы решить проблему самостоятельно?

Вы могли бы, хотя бы после строки №23 поставить печать переменной myColor и посмотреть, что же такое Вы вводите? Узнаете много интересного. Например, о прицепленных в конец строки символа перевода строки и возврата каретки. Или о том, что вводится не полностью. Ставьте печать, шевелитесь, работайте. Почему кто-то должен Вас всё на тарелочке подносить?

Проверьте подключение . Проверьте работу LED сначала без управления через сериал, например так

int redPin = 2;
int greenPin = 3;
int bluePin = 4;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  digitalWrite(redPin, HIGH);
  delay(1000);
  digitalWrite(redPin, LOW);

  digitalWrite(greenPin, HIGH);
  delay(1000);
  digitalWrite(greenPin, LOW);
  
  digitalWrite(bluePin, HIGH);
  delay(1000);
  digitalWrite(bluePin, LOW);
}

void loop() {

}

короткие команды тоже не работают.

LED работает, проверил.

Всё работает, только кроме ваших вводимых символов другие могут идти, всякие там концы строки ‘\n’ и т.д. Пробуйте методом тыка if (myColor == “red\n”)

команду Serial.print (myColor); поставил, теперь вижу, что вводиться. Спасибо за совет.
буду разбираться дальше почему команды не выполняются.

Или вместо жесткого равно используйте условие “содержит строку red”.

1 лайк
unsigned char myColor;
1 лайк

Как поставили Вы не показали (и напрасно), но рискну предположить, что неправильно. Когда печатаете строки надо ВСЕГДА до и после строки ставить ещё что-нибудь. Тогда Вы будете видеть есть ли там невидимые символы (например, перевод строки).

Например:

Serial.print ('"');
Serial.print (myColor);
Serial.println ('"');

Вот теперь, если в конце введённой строки есть что-то, Вы это срау увидите, т.к. оно влезет до закрывающей кавычки.

в общем проблема была в настройке “монитора порта” надо было установить
“нет конца строки” Теперь все работает, всем спасибо.

Правильнее было бы отсекать лишнее на принимающей стороне. Тогда на настройки порта будет пофиг

3 лайка

И опять вопрос решён самостоятельно! Молодец!

1 лайк

Честно говоря я знал ответ, потому что сам сталкивался и не так давно.
Но мне было интересно посмотреть решения.
Всё-таки @v258 прав - нужно на стороне принимающей всё лишнее отсекать…

1 лайк