Невозможно правильно отобразить два значения с плавающей точкой из pyserial на ЖК-дисплее Arduino.
Я передал два значения с плавающей точкой с помощью pyserial на COM3, и Arduino приняла эти значения.
Но первое значение на ЖК-дисплее отобразилось правильно, второе значение не удалось прочитать, и на ЖК-дисплее появилось «nan».
Код Python:
import serial
import struct
ser =serial.Serial("COM3", 115200, timeout=2)
##======Get Ready================
print("Connecting to Arduino.....")
for i in range (1,10):
rv=ser.readline()
print("Loading...")
#Debug print (rv) # Read the newest output from the Arduino
print (rv.decode("utf-8"))
ser.flushInput()
sleep(1) # Delay for one tenth of a secon
Str=rv.decode("utf-8")
#Debug print(Str[0:5])
if Str[0:5]=="Ready":
print("Get Arduino Ready !")
break
##------------------------------------------------------
d = 77.25
a = 111.32
ser.write(struct.pack('>2f',d,a))
Код Arduino:
#include <LiquidCrystal.h>
float x;
byte *xdata = (byte *) & x;
float y;
byte *ydata = (byte *) & y;
int num = 0;
char coor[2];
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(115200); // установить скорость передачи данных
Serial.println("Ready"); // напечатайте "Готово" один раз
// устанавливаем количество столбцов и строк ЖК-дисплея:
lcd.begin(16, 2);
// Вывести сообщение на ЖК-дисплей.
}
void loop(){
while(Serial.available() > 0){
for(int i = 0; i < 2; i++){
coor[i] = Serial.read();
}
if(coor[0] == 'B' ){
xdata[3] = coor[0];
ydata[3] = coor[1];
num = 1;
} else if(num == 1){
xdata[2] = coor[0];
ydata[2] = coor[1];
num++;
} else if(num == 2){
xdata[1] = coor[0];
ydata[1] = coor[1];
num++;
} else if(num == 3){
xdata[0] = coor[0];
ydata[0] = coor[1];
num = 0;
// используем значения
Serial.write(xdata,4);
Serial.write(ydata,4);
lcd.print(x);
lcd.setCursor(8,0);
lcd.print(y);
}
}
ЖК-монитор покажет 77,25 и nan. Он не может правильно показать 111,32.
@Vaan, 👍0
1 ответ
Лучший ответ:
Я не понимаю, почему вы считываете байты таким образом. Ваша изначальная версия считывала только байты первого float в xdata и -1 в ydata. (read
возвращает -1, если данные недоступны, он не ждет.) Теперь, когда два байта считываются с помощью readBytes
, первые два байта первого float записываются один в xdata[0], а второй в ydata[0].
прочитайте первое число с плавающей точкой с помощью readBytes(xdata, 4)
, а второе с помощью readBytes(ydata, 4)
- Отправка числа с плавающей запятой из python в arduino
- Не удается получить данные из кода Python
- Float печатается только 2 десятичных знака после запятой
- Не удается связаться с ардуино с помощью python (Windows)
- Последовательная связь Arduino с Python: отправка массива
- Построение графика на Python с использованием Tkinter Canvas
- Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?
- Сброс последовательного порта Arduino в последовательном мониторе и Python