python - 如何将 int 从 Python 发送到 Arduino,以便将其用作 neopixel 函数 setPixelcolor() 的参数?

标签 python arduino

我正在尝试使用 PySerial 将 int 数字从 Python 发送到 Arduino,使用 .write([data]) 通过 Python 和 Serial.read() 发送Serial.readString() 在 Arduino 上接收,然后 .setPixelColor().show() 点亮 LED 灯矩阵的位置对应于arduino发送的int(我使用的是Duinofun Neopixel Shield)。

但它似乎无法正常工作,并且我无法使用串行监视器,因为我正在发送数据,因为端口会很忙。

我尝试使用 Serial.readString() 自己输入一个数字,然后将字符串转换为 int,最后放入显示 LED 的函数中。

当我这样做时,它确实工作正常,但是当我发送一些数据时,所有先前点亮的 LED 突然关闭,据我所知,这只能是由 Arduino 板重置引起的。

这是Python代码,它只是发送用户选择的int

import serial

a = int(input('Enter pixel position : '))
ser = serial.Serial("COM16", 9600)

ser.write([a])

这是 Arduino 程序读取传入数据的部分。

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(40, 6, NEO_GRB + NEO_KHZ800);

void setup() {
  // put your setup code here, to run once:
  pixels.begin();
  Serial.begin(9600);
}

void loop() {

  String a = Serial.readString();
  int b = a.toInt();
  pixels.setPixelColor(b, 30,30,30);
  pixels.show();
  Serial.println(a);

  delay(1000);

}

当我发送一些数据时,所有 LED 都会关闭,除了第一个 LED(其位置对应于 .setPixelColor() 函数中使用的 0)。

问题是,LED 应该根据 Python 发送的相应 int 点亮(例如,int 为 4 时点亮第五个 LED)。

最佳答案

您不需要从 Python 脚本发送 int。只需发送一个字符串,然后在 Arduino 上将其转换回 int 即可。此外,如果接收到的值有效,您可以简单地在 Arduino 代码上验证该数字。 Arduino 代码的另一个问题是您没有检查串行端口可用性,这将通过 Serial.readString() 返回空字符串。

下面显示了一个简单的方法,但您可以将其扩展到其他像素。

Python 脚本:

import serial


ser = serial.Serial("COM16", 9600)
while True:
    input_value = input('Enter pixel position: ')
    ser.write(input_value.encode())

Arduino 代码:

#define MIN_PIXEL_RANGE 0
#define MAX_PIXEL_RANGE 100

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(40, 6, NEO_GRB + NEO_KHZ800);

void setup()
{
    // put your setup code here, to run once:
    pixels.begin();
    Serial.begin(9600);
}

void loop()
{
    if (Serial.available())
    {
        String a = Serial.readString();
        Serial.print("Received Value: ");
        Serial.println(a);
        int b = a.toInt();
        if ((b >= MIN_PIXEL_RANGE) && (b <= MAX_PIXEL_RANGE))
        {
            pixels.setPixelColor(b, 30, 30, 30);
            pixels.show();
            delay(1000);
        }
    }
}

关于python - 如何将 int 从 Python 发送到 Arduino,以便将其用作 neopixel 函数 setPixelcolor() 的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56316443/

相关文章:

python - 这个错误是什么意思? : AttributeError: 'Process' object has no attribute 'partition'

python - 如何在 Azure ML Studio Designer 中训练自定义 Tensorflow 模型

android - Arduino Android 和 USB 主机 API

c++ - 递增if语句arduino

python - 对于重复的行,创建小数值以填充另一列

python - 改进我的代码,将相同的单词分组到一个大的Python列表中,并与其他代码进行比较

python - 安装 scikit-image 的问题可能是由于 blosc

c++ - Arduino代码错误,用户输入的LED闪烁

c++ - Arduino HC-SR04 传感器,平均数据

c++ - 使用类时,计时器似乎运行得更快。在 C 版本中,它按预期工作