关于Arduino mega2560 串口的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Arduino mega2560 串口的问题相关的知识,希望对你有一定的参考价值。
Arduino mega2560 串口 0可以正常用,但是串口 1 2 3都没反应 求助怎么回事? 是板子的问题吗?
代码如下:#include <SoftwareSerial.h>SoftwareSerial mySerial(19, 18);void setup() // put your setup code here, to run once:Serial.begin(115200);Serial1.begin(115200);Serial2.begin(115200);mySerial.begin(115200);void loop() // put your main code here, to run repeatedly:Serial.println("123");delay(1000);Serial1.println("152353");delay(1000);Serial2.println("152");delay(1000);mySerial.println("1213445");结果如下:
能再详细点吗?
追答就是说当你用 serial2 之类的输出,实际上是输出到 2560 对应的pin上了
如果你想在 pc上看输出数据,那么需要用一个 usb转串口之类的转接线
把Pin接好,然后才能在 pc 上看到
关于Arduino的串口中断
外部每50ms向Arduino串口发送一帧数据,我需要及时的把接收到的数据从缓冲区读取出来,并且加以处理.也就是说Arduino收到数据后,能立马进入一个中断服务程序,但是Arduino应该怎么做呢? Q:845053559.。。。我头都要大了
如果想用真正的串口中断,你需要去学习avr芯片相关知识才可以(Arduino使用的就是avr芯片 ATmega系列),因为绝大多数东西被Arduino隐藏了,你看不到也用不了,甚至会坏,比如强行手动使用串口中断会导致所有Serial函数无法使用等等。 参考技术A 我也有相同的问题。我要DIY一个平衡车。串口的陀螺仪(MPU6050)每50ms传输一帧数据给arduino。假如程序运行一个loop需要200ms,是不是就没有办法确保每一帧的数据都接收到呢?就算不写很多的主程序,尽量减少main loop的运行时间,抓过来的数据还是比较乱。会漏掉数据。或者数据错误。。。想了好几天了,没有解决的方法。不知道是不是我的想法彻头彻尾的就是错的。难道说不一定要每一帧的数据都收到?是不是每一个loop抓到一组数据就行了?追问我想了下,6050每次给Arduino传数据时,都是以0作为起始信号,1作为一帧数据结束。能不能通过RX引脚的电平变化来触发一次外部中断?
追答你也是串口的那种6050吗?我的那款是以0x55作为数据包头的。
参考技术B void setup()Serial.begin(9600);
void loop()
while (Serial.available() > 0) //如果串口接收到任何数据
执行函数;
delay(2);
if (a == Serial.read()) //如果串口接收到特定的值
执行函数;
Serial.println(a);
追问
我的loop()函数年还有其他东西啊!加入loo()p里面还有一个延时函数delay(2000);那么就要延时2秒多才能读一次缓冲区的数据,而串口是没50毫秒收到一帧数据,每帧数据30个字节。我不能做到及时处理数据啊
追答在延时的2s内,你不用坐着等啊,可以做很多事,比如去掉长延时,改成一个定器中断,在中断里面检测串口数据,或者更狠一点,
for(次数)
检测串口数据;短延时;
让这个时间=2s
以上是关于关于Arduino mega2560 串口的问题的主要内容,如果未能解决你的问题,请参考以下文章
Arduino Mega 2560 - 成功执行多次后在 while 循环中停止代码执行
arduino UNO r3和arduino mega2560 用esp8266 01的WiFi模块可以接入百度天工物联网平台吗?
Python 没有接收到来自 Arduino Mega 2560 的第一行串行数据,而是接收到所有后续数据,为啥会发生这种情况?