Последовательный монитор (ввод пользователя)

Я пытаюсь выяснить, как заставить последовательный монитор печатать определенный контент на основе ввода пользователя. Например, если пользователь набрал «1», он должен постоянно печатать («Привет»), а когда пользователь набрал «2», он должен печатать («Пока») и наоборот. Я новичок в программировании, поэтому буду признателен, если кто-нибудь сможет мне в этом помочь.

  String readString;

      void setup()
     {
      Serial.begin(9600);
      }


       void loop() 
       {

         if(Serial.available()>0)

         {
            char c = Serial.read();
            readString +=c;
            delay(2);

                   if (c == '1')
                    {
                     delay(1000);
                     Serial.println("Hello");
                     c = "";           
                    }

                                 if (c == '2')
                                  {
                                    delay(1000);
                                    Serial.println("Bye");
                                    c = "";
                                  }           
             else 
            {
             readString= "";                                                                                           
            }
          }
        }

, 👍0

Обсуждение

Исправьте отступы кода., @gre_gor

Добро пожаловать в Arduino SE. Обязательно посетите экскурсию, чтобы увидеть, как это работает, здесь: https://arduino.stackexchange.com/Tour, @SDsolar


2 ответа


3

Большая часть необходимого у вас есть, но структурирована неправильно.

Поскольку вы хотите печатать непрерывно, вам необходимо разделить программу на 2 раздела. Один раздел посвящен последовательному вводу, а другой — печати.

Часть обработки последовательного порта проверяет, есть ли какие-либо символы для чтения. Если да, то он просто сохраняет прочитанный вами символ в глобальной переменной.

Часть печати выполняется каждый раз в цикле и печатает нужное значение на основе глобальной переменной, которая может время от времени меняться, если на последовательный порт поступает что-то новое.

Этот код не тестировался:

char cMode;

void loop() 
{
  if(Serial.available())
  {
    char c = Serial.read();

    if (c == '1' || c == '2')
      cMode = c;
  }

  if (cMode == '1')
    Serial.println("Hello");
  else if (cMode == '2')
    Serial.println("Bye");

  delay(1000); // чтобы замедлить цикл?
}
,

Здесь вам не хватает цикла setup(), где вам нужно инициализировать последовательную связь. Посмотрите мой код, вы поймете, что я имею в виду., @Hasan


1

Попробуйте этот код. Это будет вам полезно.

char serialData;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if(Serial.available())
  {
    serialData = Serial.read();

    if(serialData == '1')
    {
      Serial.println("Hello");
    }
    else if(serialData == '2')
    {
      Serial.println("Bye");
    }
  }
}
,