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

该博客介绍了如何使用Arduino的SoftwareSerial库实现软串口通信,发送和接收以'Z'为起始位的多位数据。发送端通过特定按键发送3位数字字符串,如'ZAG'或'ZCF',并点亮指示灯;接收端接收到'Z'开头的字符串后存储并处理数据,当接收到特定组合时点亮LED。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值