Arduino Последовательный монитор, отображающий странные символы и изменения орфографии
Я получаю следующее на своем последовательном мониторе. Существует смесь странных символов, а затем орфография меняется для слов, как только она повторяется. Я не знаю, зачем он это делает. мой чип esp01 использует скорость 115200 бод, и программа также имеет скорость 115200 бод. Что происходит.
#include <SoftwareSerial.h>
#define TIMEOUT 5000 // mS
#define LED 5
SoftwareSerial mySerial(7, 6); // RX, TX
const int button = 11;
int button_state = 0;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(button, INPUT);
Serial.begin(115200);
mySerial.begin(115200);
SendCommand("AT+RST", "Ready");
delay(5000);
SendCommand("AT+CWMODE=3", "OK");
SendCommand("AT+CIFSR", "OK");
SendCommand("AT+CIPMUX=1", "OK");
SendCommand("AT+CIPSERVER=1,80", "OK");
}
void loop() {
button_state = digitalRead(button);
mySerial.println(button_state);
if (button_state == HIGH) {
SendCommand("AT+CIPSEND=0,23", "OK");
delay(250);
mySerial.println("<h1>Button was pressed!</h1>");
delay(250);
SendCommand("AT+CIPCLOSE=0", "OK");
}
String IncomingString = "";
boolean StringReady = false;
while (mySerial.available()) {
IncomingString = mySerial.readString();
StringReady = true;
}
if (StringReady) {
Serial.println("Received String: " + IncomingString);
if (IncomingString.indexOf("LED=ON") != -1) {
digitalWrite(LED, HIGH);
}
if (IncomingString.indexOf("LED=OFF") != -1) {
digitalWrite(LED, LOW);
}
}
}
boolean SendCommand(String cmd, String ack) {
mySerial.println(cmd); // Send "AT+" command to module
if (!echoFind(ack)) // timed out waiting for ack string
return true; // ack blank or ack found
}
boolean echoFind(String keyword) {
byte current_char = 0;
byte keyword_length = keyword.length();
long deadline = millis() + TIMEOUT;
while (millis() < deadline) {
if (mySerial.available()) {
char ch = mySerial.read();
Serial.write(ch);
if (ch == keyword[current_char])
if (++current_char == keyword_length) {
Serial.println();
return true;
}
}
}
return false; // Timed out
}
@user70135, 👍2
Обсуждение2 ответа
Ваш код по большей части выглядит нормально. Ваши симптомы указывают на несоответствие передачи данных в бодах или приемник получает не все биты. Попробуйте обойтись без задержек, даже их сокращение может помочь. Обратите внимание, что при задержке процессор фиксируется и больше ничего не может сделать. Посмотрим, поможет ли это. 115000 бод достаточно горячи для Arduino и последовательного программного обеспечения. Может быть, вы сможете немного замедлить ход событий и посмотреть, поможет ли это.
Попробуйте добавить:
void setup()
{
pinMode(LED, OUTPUT);
pinMode(button, INPUT);
Serial.begin(115200);
while(!Serial){} // Продолжать, пока USB не будет готов
mySerial.begin(115200);
Он разблокируется, как только USB-порт будет готов.
- Как подключиться к Arduino с помощью WiFi?
- ESP8266 не подключается к Wi-Fi
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- WebSocketsServer.h: No such file or directory
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
SoftwareSerial не работает надежно на скорости 115200 бод. используйте 9600 бод. не забудьте изменить скорость передачи данных в бодах на стороне прошивки AT, @Juraj