Ардуино получает данные датчиков от других arduino SPI
У меня есть Arduino Uno (отправитель) и Arduino Uno Wifi rev 2 (приемник). Я хочу отправить значение ping другому устройству через последовательные перемычки. Arduino Uno использует пример newping, и я хочу, чтобы Uno Wifi получал значение датчика и печатал его в последовательный порт. Я использую перемычки SoftwareSerial.h go TX<->RX , RX <-><->TX, GRD-GRD в соответствии с выводами на рисунке ниже.
Проблема заключается в коде скетча для Uno WiFi (приемника), он продолжает печатать мусор и иногда кажется, что возврата каретки нет.
13
⸮10
⸮52
⸮5LC⸮1⸮H⸮10
5⸮H⸮51
13C⸮10
⸮5⸮H⸮5LC⸮13
10
⸮52
51C⸮13
10
⸮52
5LC⸮13
⸮10C⸮52
⸮51
13
10
⸮52
50
Код на Uno (отправитель):
// ---------------------------------------------------------------------------
// Пример скетча библиотеки NewPing, который выполняет пинг примерно 20 раз в секунду.
// ---------------------------------------------------------------------------
#include <SoftwareSerial.h>
#include <NewPing.h>
#define TRIGGER_PIN 12 // Вывод Arduino привязан к выводу триггера на ультразвуковом датчике.
#define ECHO_PIN 11 // Вывод Arduino привязан к выводу echo на ультразвуковом датчике.
#define MAX_DISTANCE 200 // Максимальное расстояние, на которое мы хотим пинговать (в сантиметрах). Максимальное расстояние датчика расклассифицировано на 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
SoftwareSerial mySerial(9, 10); // RX, TX
void setup() {
Serial.begin(115200); // Откройте последовательный монитор на 115200 бод, чтобы увидеть результаты ping.
while (!Serial) {
; // дождитесь подключения последовательного порта. Требуется только для родного USB-порта
}
Serial.println("Hello World Serial");
mySerial.begin(4800);
mySerial.println("Hello World, mySerial");
}
void loop() {
delay(500); // Ожидание 50 мс между пингами (около 20 пинг/сек). 29 мс должна быть самая короткая задержка между пингами.
Serial.print("Ping: ");
Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
Serial.println("cm");
mySerial.print(sonar.ping_cm());
mySerial.println();
}
код на uno wifi (приемник):
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
// Откройте последовательную связь и дождитесь открытия порта:
Serial.begin(115200);
while (!Serial) {
; // дождитесь подключения последовательного порта. Требуется только для родного USB-порта
}
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
}
void loop() { // run over and over
Serial.println(mySerial.read());
delay(1000);
}
Я вижу, что Uno (отправитель) с помощью NewPing печатает правильные данные на свой последовательный порт, но я не могу заставить Uno wifi (слушатель) получить то же значение. Это просто мусор. Я новичок в этом деле, что я делаю не так?
@foxtrot22, 👍1
Обсуждение1 ответ
Мне немного повезло после того, как я потратил на это весь день.
Arduino UNO (отправитель): Как упоминал крисл, используйте Serial.write
, а не Serial.print
mySerial.write(sonar.ping_cm());
UNO Wifi (приемник):
Serial.println(mySerial.readString());
Итак, вместо mySerial.read
Я использовал mySerial.ReadString
.
Это, скорее всего, очевидная ошибка почти для всех здесь присутствующих; мне потребовалось два дня. Вздох.
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- myserial.available() возвращает нулевой байт
- Последовательная связь между несколькими устройствами (или ардуино)
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- SoftwareSerial данные недоступны
уменьшите код отправителя ... отправляйте только фиксированные значения ... удалить весь код, который не связан с отправкой данных mySerial ... нет последовательного, нет сонара, @jsotola
Попробуйте заменить принимающую последовательную линию на
if(mySerial.available()) Serial.write(mySerial.read());
, @chrislНу, я продвинулся немного дальше. Я использовал Serial.write и на получающем Arduino я получаю значения просто не правильные. Последовательный на отправителе передает значение - 32, на получающем arduino с - SonarReading=(mySerial.read()); Я получаю номера, такие как 240, 241, ..., @foxtrot22