【问题标题】:Python-Arduino-Nano connection?Python-Arduino-Nano 连接?
【发布时间】:2020-12-27 05:51:11
【问题描述】:

下面的代码应该将一个数字转换为二进制代码,然后与 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 light

light_up()

【问题讨论】:

  • while True: data = ser.readline() 我对 Python 知之甚少,但这会停止吗?
  • 我认为这是一个无穷无尽的。但我已经尝试过不使用 while 循环,但效果不佳。这只是一个尝试。

标签: python arduino


【解决方案1】:

我认为避免发送字符,而是发送带有 pin 值的数组。你可以发送模拟值和其他复杂数据吗?

如果我不理解您的问题,请发表评论。 这是一个示例代码:

//Arduino forum 2020 - https://forum.arduino.cc/index.php?topic=714968


int myArray[4]; //this value is the upgratable data !!lenght 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 order

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2021-12-27
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 1970-01-01
    相关资源
    最近更新 更多