Два байта, отправленные в Arduino-Mega2560 через pyserial, не получены правильно для определенных 16-битных значений - PullRequest
0 голосов
/ 30 июня 2019

Я отправляю 16-битные значения с моего компьютера на Arduino-mega2560 , используя библиотеку pyserial. Я разделил 16-битные значения на два 8-битных значения для отправки через com-порт. Код Arduino просто возвращает то же значение, что и ему. Если какой-либо из 4 битов (в 0xABCD) в 16-разрядных битах превышает 7 (то есть, если какой-либо один A или B или C или D превышает 7) для ex: 0x8000, 0xA000, 0xFFFF и т. Д., Я получаю другое значение из Arduino! Ниже приведен код Arduino,

void setup() {
// put your setup code here, to run once:
    analogReference(DEFAULT);
  // initialize both serial ports:
  Serial.begin(115200);
  for(int i=54;i<70;i++)
    pinMode(i, INPUT);
   // pinMode(potPin2, INPUT);
  for(int i=22;i<37;i++)
    pinMode(i, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  int inn=1;uint8_t in;uint16_t VAL,mask=0x0001;uint16_t VOL=0x0000;
  if (Serial.available() >= 2) 
{
  VAL = Serial.read() << 8;   //read MSB into VAL
  VAL |= Serial.read();
  uint8_t LSB=VAL;
  uint8_t MSB=VAL>>8;
  Serial.write(1);
  Serial.write(MSB);
  Serial.write(LSB);
} 
}

Ниже приведен код Python,

from os import system, name
ar=serial.Serial("COM8",115200)
time.sleep(1)
def getv():
    while (ar.inWaiting()<2): #Do while loop waiting for data   
        pass
    val=ar.read(2)
    s=int(val.hex(), 16)
    #s=binascii.hexlify(val).decode('utf-8')
    return(s)

stat=0
def setp(pos):
    global cur,stat
    if(stat==0):
        msb=chr(int(pos/256))
        lsb=chr(pos%256)
        ar.write(msb.encode())
        ar.write(lsb.encode())
        while (ar.inWaiting()<1): #Do while loop waiting for data   
            pass
       a=ar.read()
       cur=0x0000
    else:
        cur=cur|pos

setp(0x8000)
print(getv())
ar.close()

Для 0x8000, который на самом деле равен 32768 в десятичном виде, который дает код, 49792. для A0A0 (41120) код дает 49824. Какую ошибку я совершаю?

...