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);
}
主要代码的注释