Прочитать целое число с помощью Serial.read(), а затем прочитать строку с помощью Serial.readStringUntil(End-Char)
У меня есть такой скетч:
void loop()
char End_Char = ‘\n’;
if (Serial.available()) {
aInt = Serial.read();
}
switch (aInt) {
case 1:
// выполняет задачу, которая запускается числом
// Я получаю правильные ответы, если aInt=1
break;
case 2:
bString = Serial.readStringUntil(End_Char);
Serial.print(bString);
// Скетч зависает и ничего не делает, если я ввожу 2, но перезапускается через случай 1, если я ввожу 1, когда скетч, по-видимому, заморожен
break;
Default:
break;
} // end of switch
} // end of loop
Я попытался переупорядочить операторы case, вставляя задержки в разные моменты, чтобы дать время прочитать строку, изменил Serial.setTimeout
на 100 и 2000 в разные моменты, чтобы дать время прочитать строку. Однако скетч не может прочитать строку.
Этот код работает:
char end_char = '\n';
String texto;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
texto = Serial.readStringUntil(end_char);
Serial.println(texto);
}
}
Я использую Arduino UNO, HC-06 и приложение для Android.
Есть идеи?
@Rob, 👍1
Обсуждение0
Смотрите также:
- Отправка последовательных данных в прерывании
- Почему люди используют 115200 вместо 9600?
- Ошибка 'Serial' was not declared in this scope
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Serial.availableForWrite против Serial.flush
- Разделенный последовательный поток Arduino, разделенный запятыми
- Как остановить серводвигатель в текущем положении при использовании последовательного порта? Я хочу, чтобы он оставался в одном положении при получении «0».
- Arduino Serial.ReadString() проблема
Вы действительно отправляете символ конечной строки в конце строки? Также: Вы используете
Serial.read()
для целого числа. Так вы действительно отправляете сначала двоичную цифру, а затем текст в кодировке ASCII?, @chrislЯ намеренно не отправил символ конечной строки, но я думаю, что приложение делает это за меня, потому что скетч работает, если я использую Serial.readStringUntil вместо Serial. Да, я отправляю целое число, а затем строку., @Rob
То, что у вас есть
char End_Char = /n;
в приведенном выше, указывает на то, что вы не показываете реальный код. Также кажется маловероятным, что вы хотите, чтобы тело вашего утверждения if заканчивалось там, где оно есть., @timemageМой End_Char работает, если я использую Serial.readStringUntil вместо Serial.read. Где должно заканчиваться утверждение if? Я могу проверить это в других местах., @Rob
Чтобы быть ясным,
char End_Char = /n;
не будет компилироваться. Если вы думаете, что это компиляция, что-то еще не так., @timemageЭтот код работает как char end_char = '\n'; Текст строки; настройка пустоты() { Серийный номер.начало(9600); } void loop() { если(серийно.доступно()) { texto = Последовательный.readStringUntil(end_char); Serial.println(текст); } }, @Rob
Пожалуйста, не указывайте код в комментариях. Вы можете отредактировать свой вопрос, чтобы опубликовать фактический код и уточнить свой вопрос., @chrisl
Пожалуйста, примите стиль кодирования и придерживайтесь его. Вы сразу же увидите некоторые ошибки., @the busybee
Занятая пчела, не уверенная, помогаешь ли ты мне или смеешься надо мной. У вас есть ответ на мою проблему?, @Rob
Я прочитал комментарии, и кто-то уже указал на ошибку, но неясно, признал ли вы это. Знаете ли вы, что в вашем первом скетче у вас есть
char End_Char = '/n';
(недопустимо), а во втором у вас естьchar End_Char = '\n';
(допустимо)? По крайней мере, это то, что показано. Возможно, опечатка при вводе вопроса., @lurkerДа, опечатка, когда я ввел вопрос. Я исправил вопрос и показал рабочий код и нерабочий код., @Rob
Я думаю, что вы не поняли, что сказал @christl в их первоначальном комментарии; у вас есть " случай 1:
. Это отличается от "случая " 1":
. Если вы работаете с текстом и только с текстом, вам нужно последнее. "случай 1:" проверяет, отправили ли вы контрольный символ, а не цифру в тексте., @timemageЯ поддерживаю комментарий мага времени. Не могли бы вы объяснить, пожалуйста, как именно вы отправляете последовательные данные на Arduino? Используете ли вы последовательный монитор Arduino IDE? Или другая программа? Какие настройки использует эта программа? С помощью этой информации мы можем проверить, верна ли наша догадка, поэтому, пожалуйста, сообщайте нам все подробности, отвечая (на все!) мои вопросы., @chrisl
Привет. Я использую телефон на Android для отправки текста на arduino uno через HC06. Пример кода работает с end_char "\n " для получения строк. Мой код также работает для получения целых чисел. Но когда я пытаюсь объединить код, чтобы получить целые числа, которые запускают переключатель для получения текста, он не может прочитать текст., @Rob
как вы посылаете 1? может быть, вы посылаете "1"?, @Juraj