Команда strtok() с Serial связью
После того, как я беру переменную char* из последовательной связи, я использую strtok
для разделения переменных с помощью " ". Но когда я это делаю, это действует так, как будто есть " " после каждого символа. Я не знаю почему. Как я могу это исправить?
void setup() {
Serial.begin(9600); // открывает последовательный порт, устанавливает скорость передачи данных 9600 бит/с
char* a = "The quick brown fox jumped over the lazy dog.";
char* c = a3;
char* b;
b = strtok(c, " ");
while (b != NULL) {
Serial.println(b);
b = strtok(NULL, " ");
}
}
void loop() {
}
результат:
The
quick
brown
...
Этот код парсинга работает отлично, пока я не беру его из последовательных портов. Серийный код здесь, например:
#include <SoftwareSerial.h>
#define bRSerial 9600
#define bRmY 9600
char vD[45];
int i = 0;
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(bRSerial);
while (!Serial) {
;
}
mySerial.begin(bRmY);
}
void loop() {
if (mySerial.available()) {
//Serial.write(mySerial.read());
vD[i]=mySerial.read();
i++;
if (i = 46) {
char* a = vD;
char* b;
b = strtok(a, " ");
while (b != NULL) {
Serial.println(b);
b = strtok(NULL, " ");
}
i=0;
}
}
}
результат:
T
h
e
q
u
i
c
k
b
r
o
w
...
Можно ли это исправить? мне нужно получить его из серийного номера и разделить на " ".
@corlamlabs uzak, 👍1
Обсуждение2 ответа
Лучший ответ:
только синтаксическая опечатка. условие должно быть if ( i == 46 ) {
Если это не только тест strtok, то вам не нужен strtok. прочитать в char c, и если c == ' '
, вывести vD и сбросить i до 0
и я не вижу, где вы устанавливаете завершающий 0 для vD
, иначе a
Как упомянул @Juraz, если у вас опечатка. Также у меня были бы предложения как у того, кто потратил некоторое время на процесс чтения кода в терминале. Когда вам нужно прочитать что-то из последовательного порта, хорошо использовать цикл while()
вместо if()
, поэтому я рекомендую изменить:
while (mySerial.available()) {
//Serial.write(mySerial.read());
vD[i]=mySerial.read();
i++;
if (i == 46) {
char* a = vD;
char* b;
b = strtok(a, " ");
while(b != NULL) {
Serial.println(b);
b = strtok(NULL, " ");
}
i=0;
}
}
if
находится в loop()
, @Juraj
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Как программно обнаружить последовательный порт Arduino на разных платформах?
- Java NetBeans отправляет значение и получает значение от Arduino
- Почему нужно использовать latin-1 вместо utf-8 при использовании python с arduino?
- Акцептант векселей ИКТ
- Использование последовательной связи в .c-файлах
- Соединение I2C с модулем камеры MT9D111, странные результаты после записи регистров через i2C
- ПК не может получить доступ к порту HC-06 Bluetooth COM
если ( я == 46 ) {
, @Jurajда, это было. : D просто 1 ошибка, которую я не мог увидеть, спасибо., @corlamlabs uzak
это как вы планируете использовать его или только тест? было бы проще обнаружить разделитель при его чтении, @Juraj
я не знаю, как использовать его проще., @corlamlabs uzak
если это не только тест strtok, то вам не нужен strtok. прочитать в char c, и если
c == ' '
, вывести vD и сбросить i в 0, иначеvD[i] = c
, @Jurajи я не вижу, где вы установили завершающий 0 для
vD
, также известного какa
, @Juraj