微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与Arduino Mega的Arduino MKR Wifi 1010串行通信

如何解决与Arduino Mega的Arduino MKR Wifi 1010串行通信

我正在编写一个在mkr wifi 1010和大型机之间的串行通信程序,其中mkr向大型机发送H或L字符,大型机通过读取字符并将其板载LED设置为高或高做出响应。低取决于字符。当我在mkr上使用delay(#)时,代码可以正常工作,并且巨型LED闪烁。

但是,当我创建无延迟代码时,大型LED不会闪烁。它要么保持较低状态,要么保持较高状态,大多数时候保持较低状态。我已经通过读取串行端口检查了mkr代码,在两个版本的代码中,它确实都以正确的间隔交替发送72(H)和76(L)。

接线图:

MKR          Mega
gnd    ->     gnd
tx     ->     rx
rx     ->     tx

我已经将mega的tx引脚在mkr的rx引脚之前电平降低到3.3v。

mkr延迟代码

void setup()
{
  uint32_t baudrate = 9600;
  Serial1.begin(baudrate);
}

void loop()
{
  Serial1.print('H');
  delay(500);
  Serial1.print('L');
  delay(500);
}

mkr无延迟代码

unsigned long curT = 0;
unsigned long prevT = 0;
const int interval = 500;
int bytetoSend = 'L';
void setup()
{
  uint32_t baudrate = 9600;
  Serial1.begin(baudrate);
}

void loop()
{
  curT = millis();
  
  if (curT - prevT > interval)
  {
    if (bytetoSend == 'L')
    {
      bytetoSend = 'H';
    }
    else
    {
      bytetoSend = 'L';
    }
    
    Serial1.print(bytetoSend);
    
    prevT = curT;
  }
}

代码

const int ledPin = 13; // the pin that the LED is attached to
int incomingByte;      // a variable to read incoming serial data into

void setup() {
  // initialize serial communication:
  Serial.begin(9600);
  // initialize the LED pin as an output:
  pinMode(ledPin,OUTPUT);
  digitalWrite(ledPin,LOW);
}

void loop() {
  // see if there's incoming serial data:
  if (Serial.available() > 0)
  {
    // read the oldest byte in the serial buffer:
    incomingByte = Serial.read();
    // if it's a capital H (ASCII 72),turn on the LED:
    if (incomingByte == 'H')
    {
      digitalWrite(ledPin,HIGH);
    }
    // if it's an L (ASCII 76) turn off the LED:
    if (incomingByte == 'L')
    {
      digitalWrite(ledPin,LOW);
    }
  }
}

据我所知,这两个不同的mkr程序做的事情完全相同,并且以完全相同的方式发送串行数据,只是一个正在阻塞而一个是非阻塞。为什么无延迟代码不闪烁?

解决方法

在无延迟发送者代码中:

int byteToSend

应该是

char byteToSend

并在接收方代码中:

int incomingByte

应该是

char incomingByte

这可以解决问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。