Не выводится на serial monitor, отправляя строку на serial.print
Я получаю два 10-битных значения от аналоговых выводов. Эти два значения в строке, ";" объединяются с .
например: 515; 510
Я отправляю его на другой arduino через Serial.print. Я не могу отобразить это строковое выражение на другом последовательном мониторе arduino. Но когда я нажимаю кнопку сброса координатора arduino, появляется несколько значений. Вы можете мне помочь?
Мой Код Координатора:
#include <SoftwareSerial.h>
#define xBeeRxPin 10
#define xBeeTxPin 9
int deger3;
int deger4;
SoftwareSerial xBeeSerial(xBeeRxPin, xBeeTxPin);
void setup() {
//Serial.begin(9600);
xBeeSerial.begin(38400);
}void loop() {
deger3 = analogRead(A0);
deger4 = analogRead(A2);
String deger5 = " " + (String)deger3 + ";" + (String)deger4 ;
Serial.println("string ifade: " + deger5);
xBeeSerial.print(deger5);
}
Мой код получателя:
#include <SoftwareSerial.h>
#define xBeeRxPin 10
#define xBeeTxPin 9
SoftwareSerial xBeeSerial(xBeeRxPin, xBeeTxPin);
String d1;
void setup() {
xBeeSerial.begin(38400);
Serial.begin(38400);
}
void loop() {
if(xBeeSerial.available()){
d1=xBeeSerial.readString();
Serial.print(d1);
}
}
@Enes Orhan, 👍2
2 ответа
Лучший ответ:
Я получил нужные мне значения и выполнил разделение. Я отправляю список положений джойстика через последовательное соединение на arduino в следующем формате
515;520
Который будет проанализирован следующим образом:
х=515
y=520
МиКоординатор:
#include <SoftwareSerial.h>
#define xBeeRxPin 10
#define xBeeTxPin 9
int deger3;
int deger4;
SoftwareSerial xBeeSerial(xBeeRxPin, xBeeTxPin);
void setup() {
Serial.begin(38400);
}void loop() {
xBeeSerial.begin(38400);
deger3 = analogRead(A0);
deger4 = analogRead(A2);
String deger5 = (String)deger3 + ";" + (String)deger4 ;
Serial.println("string ifade: " + deger5);
xBeeSerial.println(deger5);
delay(200);
}
Мой получатель:
#include <SoftwareSerial.h>
#define xBeeRxPin 10
#define xBeeTxPin 9
SoftwareSerial xBeeSerial(xBeeRxPin, xBeeTxPin);
String d1,d2,d3;
void setup() {
xBeeSerial.begin(38400);
Serial.begin(38400);
}
void loop() {
if(xBeeSerial.available()>0){
d1=xBeeSerial.readStringUntil('\n');
//Serial.print(d1);
d2 = d1.substring(0,d1.indexOf(59));
d3 = d1.substring(d1.indexOf(59)+1);
Serial.println("x ekseni: " + d2);
Serial.println("y ekseni: " + d3);
}
}
Существует фундаментальная проблема с вашей коммуникационной стратегией, и она заключается в том, что вам нечего сказать получателю "Это конец сообщения".
Вы посылаете постоянный поток
515; 510 515; 510 515; 510 515; 510 515; 510 515; 510 515; 510 515; 510 515; 510 515; 510 515; 510 515; 510 515; 510 515; 510.....
и получатель действительно не знает, что с этим делать.
Это происходит потому, что вы используете функцию .ReadString()
в получателе. Это позволит вслепую получать символы и сохранять их в целевой строке до тех пор, пока эти символы не перестанут поступать. И это происходит только после перерыва в передаче не менее чем на 1 секунду. Этого никогда не произойдет. Так никогда не кончается. То есть до тех пор, пока вы не сбросите отправителя и он не увидит этот перерыв в передаче.
Это очень грубая функция, и я бы никогда никому не рекомендовал использовать ее для чего-либо.
Вместо этого вам нужно разбить вашу передачу на отдельные строки с помощью .println()
или добавления \n
к строке. Затем вы можете использовать .readStringUntil('\n')
, чтобы получить каждую строку по очереди и отобразить ее.
Кроме того, на заметку, вам действительно не следует добавлять все свои данные в строку, а затем отправлять строку, это совершенно излишне. Просто отправьте каждую отдельную часть данных в виде отдельных отпечатков. Все, чего вы добиваетесь всеми этими манипуляциями со строками, - это фрагментируете вашу кучу и делаете ваш код нестабильным.
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Чтение SMS с помощью Arduino Uno и SIM800L и печать на LCD (16x2 буквенно-цифровых) с использованием последовательного соединения
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- myserial.available() возвращает нулевой байт
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- SoftwareSerial данные недоступны
Могу ли я справиться с этим, используя xBeeSerial.end, например xBeeSerial.begin?, @Enes Orhan
Нет. Вы должны создать правильный синтаксис и поток информации. Совсем как английский. В данный момент вы отправляете содержимое книги в одну строку без знаков препинания и абзацев. Делайте это правильно. Не пытайтесь срезать углы. Вы просто закончите тем, что будете еще больше разочарованы., @Majenko
Я новичок в работе с Arduino. Это действительно тяжело для меня. Кроме того, я не очень хорошо говорю по-английски, извините за это. Можете ли вы внести улучшения непосредственно в код?, @Enes Orhan
Я четко сказал вам, что нужно изменить. Я не собираюсь программировать это и для вас тоже., @Majenko
если(xBeeSerial.available()){ d1=xBeeSerial.readStringUntil('\n'); Серийный номер.println(d1); }, @Enes Orhan
509;509 509;508 510;508 510;508 510;508 510;508 510;508 510;508 510;508 511;508 510;508, @Enes Orhan