下面的代码应该将一个数字转换为二进制码,然后连接arduino-nano,并根据哪个二进制码,4个灯应该亮起。只有当二进制代码是1时,所有的灯才会亮。在控制台中,它可以工作,但我的函数无法连接到arduino-nano。
在我的Arduino-nano上的代码,在手动输入时工作得非常好。
有人能帮我吗?
import time
import serial
ser = serial.Serial('COM6',115200, timeout=0.5)
number = input('A decimal number please:',)
def decimalToBinary(num): # decimal into a binary code
return bin(num)
#[2:] zur entfernung von 0b
while True:
data = ser.readline() # try to get the connection to arduino nano
index = 0
while index < len(bin): # separate the binary code in individual numbers
binary = bin[index]
print(binary)
def light_up():
if index[0] == 1:
ser.write(b'u') #light up the first light
if index[1] == 1:
ser.write(b'd') # light up the second light
if index[2] == 1:
ser.write(b't') # light up the third light
if index[3] == 1:
ser.write(b'c') # light up the fourth lightlight_up()
发布于 2020-12-27 05:51:11
我认为避免字符发送,而不是发送一个带有管脚值的数组。因此,你可以例如模拟值,和其他复杂的数据发送。
如果我不理解你的问题,请给我一个评论。下面是一个示例代码:
//Arduino forum 2020 - https://forum.arduino.cc/index.php?topic=714968
int myArray[4]; //this value is the upgratable data of data
byte*
ddata = reinterpret_cast<byte*>(&myArray); // pointer for transferData()
size_t pcDataLen = sizeof(myArray);
bool newData=false;
void setup() {
Serial.begin(115200);//baudrate
}
void loop() {
checkForNewData();
if (newData == true) {
newData = false;
}
digitalWrite(2,myArray[0]);
digitalWrite(3,myArray[1]);//etc
}
void checkForNewData () {
if (Serial.available() >= pcDataLen && newData == false) {
byte inByte;
for (byte n = 0; n < pcDataLen; n++) {
ddata [n] = Serial.read();
}
while (Serial.available() > 0) { // now make sure there is no other data in the buffer
byte dumpByte = Serial.read();
Serial.println(dumpByte);
}
newData = true;
}
}Python 3x:
import serial
from struct import *
import sys
import time
import random
import ast
try:
ser=serial.Serial(baudrate='115200', timeout=.5, port='com8') #!!!
except:
print('Port open error')
time.sleep(5)#no delete!
while True:
try:
ser.write(pack ('4h',0,1,0,0))#the 4h is 4 element, and h is an int type data (read the documentation, and use bool variable, if not good work), and 0,1,0,0 will be the variables of myArray
time.sleep(.1)#delay
except KeyboardInterrupt:
break
except:
print(str(sys.exc_info())) #print error
break
#the delays need, that the bytes are good orderhttps://stackoverflow.com/questions/65425173
复制相似问题