gpt4 book ai didi

android - C 和 Arduino 之间的通信

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:24 25 4
gpt4 key购买 nike

我已经和这个问题斗争了一段时间,这让我抓狂:

我正在尝试通过运行 Linux(USB-dok 上的 Knoppix)的电脑与 Arduino Mega 2560(通过 USB 作为串行设备)进行非常简单的通信,而我在此阶段想要完成的只是对于每个数字由笔记本电脑发送到 Arduino,一个“频闪”信号将切换为高到低或相反,我用这个频闪灯来点亮 LED 灯。

pc端C代码:

#include <stdio.h>

int main ()
{
FILE * Device = NULL;
int counter = 0;

Device = fopen("/dev/ttyACM0", "w+");
if(Device == NULL)
{
printf("could not open Device\n");
return -1;
}

while (counter < 10)
{
fprintf(Device, "%d\n", counter);
printf("Sent to Device: %d\n", counter);
counter++;
sleep(2);
}

fclose(Device);

return 0;
}

Arduino 代码:

int cnt = 0;
int strobe = 0;
int num;
int ValidInput = 0;

char intBuffer[12];
String intData = "";
int delimiter = (int) '\n';

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

int input;

void loop()
{
while(num = Serial.available())
{
delay(5);
// Serial.println(num);
int ch = Serial.read();
if(ch == delimiter)
{
ValidInput = 1;
break;
}
else
{
intData += (char) ch;
}
}
int intLen = intData.length() + 1;
intData.toCharArray(intBuffer, intLen);
intData = "";
int i = atoi(intBuffer);

if(ValidInput)
{
if(i == 0)
{
strobe = 0;
Serial.print("Initializing strobe");
}
else
{
strobe = !strobe;
}

digitalWrite(3, (strobe) ? HIGH : LOW);
Serial.println(i);
ValidInput = 0;
}
}

我遇到的问题:

  1. 不确定 fopen 是否是在 Linux 中与串行设备通信的正确方式,如果是,是哪种模式?
  2. 这是主要问题 - 我遇到了不确定的行为:如果我在打开 Arduino 编辑器的“串行监视器”之前运行这段代码,它不会像我上面解释的那样工作,而是 - 它会为每个传入的新数字打开然后立即关闭 LED。但是一旦我打开“串行监视器”,它就会按照我的意愿运行 - 为每个新的传入号码更改 LED 的状态。

我认为这与 Arduino 的重置或类似的东西有关。

我查看了这里和其他论坛的许多主题,但找不到解决此问题的方法。

非常感谢您的见解。

最佳答案

首先,arduino这边看起来还可以。在 Linux 方面,您需要进行一些研究,因为 posix 系统上的串行通信比仅打开文件并写入文件要复杂一点。请使用 termios 的 linux 手册页,您可以在其中找到有关如何设置通信端口参数和使用此文档的信息 http://tldp.org/HOWTO/Serial-Programming-HOWTO/用于实际学习如何将所有内容放在一起。串行编程指南将指导您完成设置端口的过程,学习如何控制它并学习如何接受来自多个源的输入。此外,为了从非特权帐户成功访问串行端口,您可能需要将该用户(您的用户)添加到特定组(Ubuntu 和 Fedora 中的拨出组)。你可以在谷歌上搜索 linux 下的串口访问,你可以找到很多代码示例,供你集成到你的应用程序中。您可以在此线程底部以及 SO How do I read data from serial port in Linux using C? 上找到出色的引用资料和完整的文档化实现。

关于android - C 和 Arduino 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com