Последовательный монитор (ввод пользователя)
Я пытаюсь выяснить, как заставить последовательный монитор печатать определенный контент на основе ввода пользователя. Например, если пользователь набрал «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= "";
}
}
}
@Kuba96, 👍0
Обсуждение2 ответа
Большая часть необходимого у вас есть, но структурирована неправильно.
Поскольку вы хотите печатать непрерывно, вам необходимо разделить программу на 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
Попробуйте этот код. Это будет вам полезно.
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");
}
}
}
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Исправьте отступы кода., @gre_gor
Добро пожаловать в Arduino SE. Обязательно посетите экскурсию, чтобы увидеть, как это работает, здесь: https://arduino.stackexchange.com/Tour, @SDsolar