2

I am trying to read potential meter data from Arduino using python, with the program on Arduino as follows :

#include <cvzone.h>

SerialData serialData;
int sendVals[2];

void setup() {
  serialData.begin(9600);
}

void loop() {
  int potVal = analogRead(A0);
  sendVals[0]= potVal;
  serialData.Send(sendVals);
}

the program on the arduino side is running fine

and program in python as follows

from cvzone.SerialModule import SerialObject

arduino = SerialObject("COM7")

while True:
   data = arduino.getData()
   print(data[0])

but i get error :(

Traceback (most recent call last): data = arduino.getData() File "C:...\site-packages\cvzone\SerialModule.py", line 68, in getData data = data.decode("utf-8") UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf7 in position 0: invalid start byte

how to solve it?

2
  • the new USB connection resets the Mega and it spends some time in bootloader waiting for upload.
    – Juraj
    Dec 6 '21 at 13:32
  • Maybe add some delay on the Arduino after initializing the serialData in startup() before it starts sending data in the loop().
    – Dave X
    Dec 6 '21 at 14:45
2

I would embed the call to .getData() into a try block and handle this specific exception with except UnicodeDecodeError. There can always be a transmission error, especially when the script is started.

However, I would do it differently:

void loop() {
  Serial.println(analogRead(A0));
}

...and on the python side use serial.readline() from pyserial instead. But I don't know cvzone and you might have a reason to use this instead of the commonly used pyserial.

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.