从Python以输出模式打开Arduino管脚

2024-10-01 22:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

TLDR:我想用Python驱动硬件,我想我需要Arduino来完成这项工作。事实证明,我完全可以在没有Arduino的情况下完成工作,所以下面的帖子完全是胡说八道


我正在寻找与我的第一个Arduino Uno板的接口,并希望使用Python来完成这项任务。我想知道是否有人能帮我将一点简单的Arduino/C转换成Python来完成这项任务。任何指点都将不胜感激

这是我看到的街区:

#include <Wire.h>

// control pin
int txden = 8;

// data prefix and suffix
byte data_prefix[] = {0x80, 0x83, 0xFF};
byte data_suffix[] = {0x8F};

// 28 bytes
byte all_dark[] = {
  B0000000, B0000000, B0000000, B0000000,
  B0000000, B0000000, B0000000, B0000000,
  B0000000, B0000000, B0000000, B0000000,
  B0000000, B0000000, B0000000, B0000000,
  B0000000, B0000000, B0000000, B0000000,
  B0000000, B0000000, B0000000, B0000000,
  B0000000, B0000000, B0000000, B0000000,                   
};

byte word_to_display[] = {
  B0000000, B0000000, B0101110, B0101010,
  B0111010, B0000000, B0000000, B0100010,
  B0101010, B0111110, B0000000, B0000000,
  B0000010, B0000010, B0111110, B0000000,
  B0000000, B0111110, B0000010, B0111110,
  B0000000, B0000000, B0010110, B0101000,
  B0101000, B0111110, B0000000, B0000000
};

void setup() {
  Serial.begin(9600);  
  pinMode(txden, OUTPUT);
  digitalWrite(txden, HIGH);
  Serial.write(data_prefix, 3);
  Serial.write(all_dark, 28);
  Serial.write(data_suffix, 1);
  delay(3000);
}

void loop() {
  Serial.write(data_prefix, 3);
  Serial.write(word_to_display, 28);
  Serial.write(data_suffix, 1);
  delay(2000);  
}

Arduino IDE首先解释setup函数,然后像游戏引擎(如Phaser)那样连续运行loop函数Serial.write通过串行端口向外发送二进制数据到我的flipdot显示器,flipdot会解释该消息并做出相应的反应

上面的循环显示在flipdots板上:

enter image description here

我的印象是pyserial包可能允许我通过相同的pin发送相同的字节。以下是我所了解到的情况:

import serial

# serial: https://pythonhosted.org/pyserial/pyserial.html#overview

# args: device, bauds, timeout -- baud timeout must be exact
arduino = serial.Serial('COM3', 9600, timeout=.1)

data_prefix = bytearray([0x80, 0x83, 0xFF])

data_suffix = bytearray([0x8F])

all_dark = bytearray([
  0B0000000, 0B0000000, 0B0000000, 0B0000000,
  0B0000000, 0B0000000, 0B0000000, 0B0000000,
  0B0000000, 0B0000000, 0B0000000, 0B0000000,
  0B0000000, 0B0000000, 0B0000000, 0B0000000,
  0B0000000, 0B0000000, 0B0000000, 0B0000000,
  0B0000000, 0B0000000, 0B0000000, 0B0000000,
  0B0000000, 0B0000000, 0B0000000, 0B0000000,
])

word_to_display = bytearray([
  0B0000000, 0B0000000, 0B0101110, 0B0101010,
  0B0111010, 0B0000000, 0B0000000, 0B0100010,
  0B0101010, 0B0111110, 0B0000000, 0B0000000,
  0B0000010, 0B0000010, 0B0111110, 0B0000000,
  0B0000000, 0B0111110, 0B0000010, 0B0111110,
  0B0000000, 0B0000000, 0B0010110, 0B0101000,
  0B0101000, 0B0111110, 0B0000000, 0B0000000,
])

我需要弄清楚如何在Python的输出模式下打开Arduino上的引脚8。排序完成后,我还需要弄清楚如何复制^{}^{}函数及其组成调用,包括^{}方法,该方法将二进制数据写入串行端口,以便flipdot设备进行解释。任何指针都会非常有用


Tags: todataprefixserialbyteallsuffixarduino
1条回答
网友
1楼 · 发布于 2024-10-01 22:28:32

I'm under the impression the pyserial package may allow me to send the same bytes through the same pin.

pyserial将允许您通过串行接口发送数据。这与阿杜伊诺无关。如果您只想让这些串行数据进入显示器,那么根本不需要Arduino。只需将串行线连接到显示器,并直接从PC发送串行数据即可

I also need to figure out how to replicate the setup and loop functions

这很简单。首先编写要运行一次的代码,然后将要在无限循环中运行的代码放入无限循环中。而(1)可以很好地创建无限循环。Arduino上的设置或循环函数没有什么特别之处。它们只是从主函数调用的常规函数。安装程序被调用一次,然后在无限循环中调用循环

真的不清楚为什么你认为你需要在这里加入一个Arduino。如果只是因为您不知道如何将东西连接到PC,那么Raspberry Pi可能是一个更好的选择,因为它既可以运行python,又具有可以连接东西的GPIO引脚。第二种选择是在Arduino上加载firmata,并使用python中的pyFirmata来控制它。你可以用谷歌搜索这两个术语,有很多关于如何做到这一点的教程

我想你对Arduino的工作有一些基本的误解。也许花点时间从这个项目中学习一些基础知识会对你有一些好处,一旦你有了一些经验,并且对所有这些东西的意义有了一点了解,你就会回到这个项目中来

更大的问题是为什么要使用python?是否有需要从PC控制的原因?或者只是你不想学一门新语言?这是两个非常不同的问题,这促使我给你们非常不同的回答。如果您需要能够从PC控制显示器,那么只需这样做,并在以后使用Arduino进行其他操作

相关问题 更多 >

    热门问题