arduino软串口发送多位数据和接收多位数据:带起始位

arduino软串口发送多位数据和接收多位数据:带起始位

发送端:
发送已Z开始的字符串,Z后面有3位数字
接收端:
接收到已Z开始进行存储数据,一共存储三个

发送端

#include <SoftwareSerial.h>
SoftwareSerial mySerial(15, 16); // RX, TX

int const butTotal=7;
//                     0,1,2,3,4,5,6
int butPins[butTotal]={2,   3,   4,  5,  7, 8,9};
                     //左上,左下,中上,中下,上,中,下
int const ledTotal=5;//0, 1, 2, 3, 4
int ledPins[ledTotal]={6,10,11,12,13};
                     //ws,上,中,下,指示

void setup() {
  // put your setup code here, to run once:
  mySerial.begin(9600);

  for(int i=0;i<butTotal;i++){
    pinMode(butPins[i],INPUT);
    }
  for(int i=0;i<ledTotal;i++){
    pinMode(ledPins[i],OUTPUT);
    }
  digitalWrite(ledPins[7],LOW);
}

boolean butDebounce(int buttonPin){
  int reading = digitalRead(buttonPin);
  if(reading==false){
    delay(50);
    reading = digitalRead(buttonPin);
    if(reading==false){
      return true;
      }
    else{
      return false;}
    }
   else{
      return false;}
  }

void loop() {
  //按下开始键
  if((butDebounce(butPins[0]))==true){
    mySerial.print("Z");
    delay(5);
    mySerial.print("A");
    delay(5);
    mySerial.print("5");
    delay(5);
    mySerial.print("G");
    delay(5);    
    digitalWrite(ledPins[4],HIGH);
    delay(100);
    }

    if((butDebounce(butPins[1]))==true){
    mySerial.print("Z");
    delay(5);
    mySerial.print("C");
    delay(5);
    mySerial.print("6");
    delay(5);
    mySerial.print("F");
    delay(5);    
    digitalWrite(ledPins[4],HIGH);
    delay(100);
    }  
}

接收端

#include <SoftwareSerial.h>
const int NUMBER_OF_CHARS=3;
int charIndex=0;
char values[NUMBER_OF_CHARS];
int index=0;
SoftwareSerial mySerial(15, 16); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  Serial.println("Goodnight moon!");
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13,LOW);
}

void loop() { // run over and over
  if (mySerial.available()) { 
    char ch=mySerial.read();
    Serial.print("ch:");
    Serial.println(ch);
    if(ch=='Z'){
        for(int i=0;i<NUMBER_OF_CHARS;i++){
          ch=mySerial.read();
          values[index++]=ch;
          delay(5);          
          }
          index=0;//接收数据结束后,将索引值归零
    }  
    else{
        index=0;
        }
  }
  Serial.print("value:");
  Serial.println(values);
  if(values[0]=='A'){
    digitalWrite(13,HIGH);    
    }
   delay(1000);    
}

主要代码的注释
在这里插入图片描述

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Arduino中,可以使用FreeRTOS结构化队列来接收多个数据。在上述引用\[1\]的代码中,使用了一个队列来接收来自串口数据。首先,在setup()函数中,通过SoftwareSerial库初始化了一个串口对象mySerial,并设置了串口的波特率。然后,在loop()函数中,通过mySerial.available()判断是否有数据可读取。如果有数据可读取,就使用mySerial.read()读取数据,并将数据存储在values数组中。当接收到字符'Z'时,循环读取NUMBER_OF_CHARS个字符,并将它们存储在values数组中。接收数据结束后,将索引值index归零。如果接收到的第一个字符是'A',则将数字引脚13设置为高电平。最后,通过delay()函数延迟1秒。 如果你想发送多个数据Arduino,可以使用引用\[3\]中的代码作为参考。在这个例子中,使用了SoftwareSerial库初始化了一个串口对象JDY,并设置了串口的波特率。然后,在loop()函数中,使用JDY.write()函数将数组a中的数据写入串口。通过delay()函数延迟500毫秒,以便发送下一个数据。 综上所述,通过使用FreeRTOS结构化队列和SoftwareSerial库,你可以在Arduino接收发送多个数据。 #### 引用[.reference_title] - *1* [arduino串口发送多位数据接收多位数据:起始位](https://blog.csdn.net/lin252931/article/details/120780729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Arduino与FreeRTOS-队列多任务数据接收发送](https://blog.csdn.net/wujuxKkoolerter/article/details/122045195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Arduino串口发送接收16进制数据(HEX)(数据乱码)-JDY-10M组网](https://blog.csdn.net/gentle_cool_boy/article/details/129603337)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值