Проблемы с Serial.read()
void loop()
{
if (sensor.begin() == true)
{
Serial.print("Current Conversion Mode: ");
Serial.println(sensor.getConversionMode());
Serial.println("Enter your mode of Conversion (number 0 - 3): ");
while (Serial.available() == 0); // Ожидает ввода пользователя
mode = Serial.read(); // Считывает входную строку из последовательного порта
Serial.print("Number recieved: ");
Serial.println(mode);
delay(500);
if (mode == '0' | mode == '1' | mode == '2' | mode == '3')
{
sensor.setConversionMode(mode);
Serial.println();
delay(500);
}
else
{
Serial.println("Conversion mode unsuccessfully set - Please enter a number 0 - 3");
}
delay(1000);
}
else // Запускается, когда устройство не удалось правильно настроить
{
Serial.println("Device failed to setup");
}
}
В настоящее время я использую красную плату SparkFun для запуска этого кода. Я пытался получить это для чтения с последовательного монитора, чтобы принять ввод для отправки в библиотеку, которую я написал, чтобы изменить значение регистра режима преобразования датчика температуры. Когда я запускаю код, я могу только один раз правильно запустить его, затем он переходит непосредственно к оператору else для входных данных, говоря, что 0-3 не был входным. Я пробовал другие методы, предложенные людьми на этом веб-сайте и форумах Arduino, но ни один из них мне пока не помог. Я не уверен, поможет ли добавление дополнительных задержек - это было одно из наиболее распространенных предложений, которые я нашел для этой конкретной проблемы, и оно не было таким последовательным. Пожалуйста помоги! Спасибо.
1 ответ
Лучший ответ:
Используя слегка измененную версию вашего скетча, я получаю следующий вывод в последовательном мониторе, когда ввожу число 2.
Текущий режим преобразования: введите свой режим преобразования (цифры от 0 до 3): Получено число: 2
Текущий режим преобразования: введите свой режим преобразования (цифры от 0 до 3): Полученный номер:
Не удалось установить режим преобразования. Введите число от 0 до 3. Текущий режим преобразования: введите свой режим преобразования (цифры 0–3): Полученный номер:
Не удалось установить режим преобразования. Введите число от 0 до 3. Текущий режим преобразования: введите свой режим преобразования (число 0–3):
Если вы измените mode
на int
, а затем повторите проверку, вы увидите, что второе и третье "Число получено" равны 10 и 13. Это будет новая строка. и символы возврата каретки. Когда вы отправляете данные через последовательный монитор, вы выбрали «Без окончания строки» или что-то еще?
Вот тестовый скетч:
char mode;
void setup(){
Serial.begin(9600);
}
void loop()
{
if (true)
{
Serial.print("Current Conversion Mode: ");
//Serial.println(sensor.getConversionMode());
Serial.println("Enter your mode of Conversion (number 0 - 3): ");
while (Serial.available() == 0); // Ожидает ввода пользователя
mode = Serial.read(); // Считывает входную строку из последовательного порта
Serial.print("Number recieved: ");
Serial.println(mode);
delay(500);
if (mode == '0' | mode == '1' | mode == '2' | mode == '3')
{
//sensor.setConversionMode(mode);
Serial.println();
delay(500);
}
else
{
Serial.println("Conversion mode unsuccessfully set - Please enter a number 0 - 3");
}
delay(1000);
}
else // Запускается, когда устройство не удалось правильно настроить
{
Serial.println("Device failed to setup");
}
}
Спасибо за предложение, оно сработало! Я просто изменил значение на int, а затем изменил серийный монитор на «Без окончания строки», и это сработало. Я никогда раньше не менял эту настройку и не осознавал, что она там есть. Еще раз спасибо!, @Madison Chodikov
- Считывание данных нескольких датчиков из текстового файла, расположенного на SD-карте в Arduino/ESP32
- GPS автономный робот
- Int массив, переданный через функцию, имеет неправильные значения только после нескольких проходов
- устаревшее преобразование из строковой константы в 'char*'
- Какие есть другие IDE для Arduino?
- Плата для разработки STM8 с Arduino IDE
- RtcDateTime' не называет тип
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
Что говорит вам ваш «Полученный номер:», когда он терпит неудачу?, @Majenko
Когда он терпит неудачу, он имеет значение 0, но раньше иногда я получал -1., @Madison Chodikov
Какой тип данных является «режимом»?, @Majenko
Режим имеет тип данных char. Я объявил его как глобальную переменную над циклом, @Madison Chodikov
Протестировал его с фиктивной реализацией
sensor
. Работает как положено. Проблема должна быть в той части кода, которую вы не показываете., @Edgar Bonet@EdgarBonet Мне действительно интересно, как этот код может работать так, как ожидалось.
|
не является операндом для ИЛИ. Кроме того, «режим» — это байт, но он сравнивается с символом. Я думаю, есть шанс найти ошибку в предоставленном коде., @Sim Son@SimSon: Вы правы в том, что
|
должно быть||
, но они оказываются эквивалентными, если их операнды равны0
или1
. Аmode
- этоchar
согласно комментарию ОП., @Edgar Bonet@SimSon, спасибо за подсказку - сейчас я это изменю, @Madison Chodikov