使用C++在树莓派和Arduino之间进行串口通信

3

我写了两段代码,用C ++创建了Arduino和Raspberry Pi之间的串行通信。 这些代码如下:

void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 baud
}

void loop() {
 Serial.println("Hello from arduino");
 delay(500);
}

在树莓派中,C++代码如下:
#include <iostream>
#include <wiringPi.h>
#include <wiringSerial.h>

using namespace std ; 
int serialDeviceId=0; 
int main(void)

{
    int pin=7;  
    serialDeviceId= serialOpen("/dev/ttyACM1",9600);
    if(serialDeviceId==-1)
     {
     cout<<"Unable to open serial device"<<endl;
     return 1; 
     }  
    if(wiringPiSetup()==-1)
    {
        return 0 ;
    }
    pinMode(pin,OUTPUT); // designing pin as an output 
    while(1) 
    {
        digitalWrite(pin,0);
        delay(500);
        digitalWrite(pin,1);
        delay(500);     
    }
    return 0;
}

现在我想一直使用wiringpi从串口读取数据,并发现可以使用SerialGetchar,但我不知道具体如何使用它。我只需要在代码中加入这部分内容,就可以从我的Arduino代码中接收到串口中写的“Hello from from arduino”。


请阅读在什么情况下我可以在我的问题中添加“紧急”或其他类似短语,以便获得更快的答案? - 总结是这不是一个理想的方式来处理志愿者,并且可能会适得其反,导致无法获得答案。请不要在您的问题中添加此内容。 - halfer
请注意,Stack Overflow 的目的不是为了帮你完成因为你对项目感到沮丧而放弃的工作。如果你失去耐心,我表示同情,因为这种情况在所有技能水平上都会发生,而且项目很难承诺。然而,Stack Overflow 是用于特定和可回答的问题,我们使用的过滤器是“这个问题对未来读者有趣和有用吗”。那些“请完成我的项目”并不真正符合这种模式。 - halfer
感谢您的回答。我并没有要求完成我的工作,我特别询问如何在C++中使用serialGetchar函数。我认为这属于在StackOverflow上提出的问题类型。我正在做自己的工作,并请求帮助。在之前的互联网搜索中,我找到了许多答案,但我想要一些针对我的具体情况的答案。我只是解释清楚,让其他人真正理解我的意思,就像其他人以前做过的那样。谢谢。 - MadHer
你最初的问题是“我希望有人帮我完成我的代码”,这可能会让读者觉得你想要有人与你一起完成它。我承认,也许只是措辞不当,所以我已经取消了投反对票。不过,在Stack Overflow上了解这种伦理道德仍然是值得的。 - halfer
好的,谢谢您先生。我会在下次考虑这个,再次感谢。 - MadHer
显示剩余2条评论
1个回答

3

这段代码适用于树莓派。非常简单!确保您运行以下命令获取正确的设备特殊文件:

dmesg

我希望你能够找到这样的一行:

[610106.464745] usb 1-1.4: new full-speed USB device number 4 using dwc_otg
[610106.608642] usb 1-1.4: New USB device found, idVendor=2341, idProduct=0043
[610106.608655] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[610106.608663] usb 1-1.4: Manufacturer: Arduino (www.arduino.cc)
[610106.608671] usb 1-1.4: SerialNumber: 55731323536351E002E1
[610106.686193] cdc_acm 1-1.4:1.0: ttyACM0: USB ACM device

#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <wiringSerial.h>

int main ()
{
  int fd ;

  if((fd=serialOpen("/dev/ttyACM0",9600))<0){
    fprintf(stderr,"Unable to open serial device: %s\n",strerror(errno));
    return 1;
  }

  for (;;){
    putchar(serialGetchar(fd));
    fflush(stdout);
  }
}

我假设您已经通过USB线将树莓派的一个USB端口连接到Arduino的USB端口。

谢谢马克先生,我正在尝试在我的C++程序中使用它,谢谢您的回答!我会在之后回来向您反馈,再次感谢! - MadHer
我正在尝试从我的Arduino发送一些整数到我的树莓派,并且我想将它们添加到我的Qt Quick应用程序上的C++代码中,请问你能帮我提取这些整数吗?当使用此代码并尝试输出时,qDebug()<<输出了几个不应存在的整数。 - mina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接