Raspberry Pi отправляет данные размером более 1 байта (например, целое число 1920) в Arduino через USB-кабель (последовательный) - PullRequest
0 голосов
/ 03 августа 2020

В настоящее время мой проект состоит в том, чтобы получить координацию топора, значение cX, с веб-камеры, подключенной к raspberry pi 3B +, и отправить ее в Arduino Uno. Я успешно выполняю действие, когда целое число находится в диапазоне от 0 до 255. Могу ли я изменить свой код и отправить большее целое число, скажем, до 1920 в Arduino?

Вот часть моего python кода на raspi сторона:

import serial
import struct

while True:
        ...
        cX = 248  //I want to send a larger number
        print (cX)
        ser.write(struct.pack('>H', cX))
        ...

Вот часть моего c кода на Arduino:

int cX = 0;

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

void loop()
{
 if (Serial.available()) 
 {
   cX = Serial.read();
   if (cX == 248)
    {
     //do something 
    }
 }
}

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 03 августа 2020

Попробуйте это на стороне Arduino:

unsigned int cX = 0;
byte buffer[2] = {0};
size_t len = 0;

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

void loop()
{
    if (Serial.available())
    {
        len = Serial.readBytes(buffer, 2);
        if (len == 2)
        {
            cX = (((int)buffer[0]) << 8) | buffer[1];
            if (cX == 1920)
            {
                //do something
            }
        }
    }
}

На стороне Python я не знаю подробно, но из того, что я мог видеть в документации, с аргументом >H вы должны отправить unsigned short (размер 2 байта) с прямым порядком байтов, поэтому он должен работать.

...