Я отправляю 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
.
Какую ошибку я совершаю?