/ Čítanie celého čísla od arduino pomocou pyserial - python, arduino, pyserial

Čítanie celého čísla od arduino pomocou pyserial - python, arduino, pyserial

Odošlím celú hodnotu od arduino a čítam ju v Pythone pomocou pyserial Kód arduino je:

Serial.write(integer)

A pyserial je:

ser=serial.Serial ("com3",9600,timeout =1)
X=ser.read(1)
print(X)

Nevytvára nič okrem prázdnych priestorov Vie niekto, ako čítať toto celé číslo prechádzajúce z arduino v Pythone?

odpovede:

0 pre odpoveď č. 1

Pravdepodobne musíte použiť štartovací bit.

Problém môže byť, že arduino už napísal celé číslo vtedy, keď je pyserial spustený?

Takže napíšte znak z pyserial na arduino, aby začal signál

    ser=serial.Serial ("com3",9600,timeout =1)
ser.write(b"S")
X=ser.read(1)
print(X)

A napíšte celé číslo z arduino, keď dostanete tento štartovací bit.


0 pre odpoveď č. 2

To nie je ten správny spôsob čítania Integer od Arduino. Integer je 32-bitový typ, kým bude váš sériový port nastavený na EIGHTBITS (Obaja v pyserial a Arduino, opravte ma, ak sa mám zle) vo veľkosti bajtov, preto musíte napísať Character verzia Integer z Arduino, zatiaľ čo vysielanie cez Serial Port, pretože a Character trvá len EIGHTBITS vo veľkosti, ktorá je tiež pohodlný spôsob, ako robiť to, čo potrebujete, veľmi ľahko.

Dlhý príbeh krátky, previesť svoj Integer do a String alebo a Character Pole pred prenosom. (Je pravdepodobné, že pre konverziu sú k dispozícii vstavané funkcie).

Na strane poznámky je tu správny python kód, ktorý by ste radšej použili:

ser = serial.Serial(
port="COM3",
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
#RxTx
ser.isOpen()
while 1:
out = ""
while ser.inWaiting() > 0:
out += ser.read(1)
if out != "":
print ">>Received String: %s" % out

0 pre odpoveď č. 3

Jednoduchý program, ktorý som testoval:

Arduino:

void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

void loop() {
int f1=123;
// print out the value you read:
Serial.println(f1);
delay(1000);
}

Python:

import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.port = "COM5"

ser.open()
while True:
h1=ser.readline()
if h1:
g3=int(h1); #if you want to convert to float you can use "float" instead of "int"
g3=g3+5;
print(g3)