Arduino 1---Transmitter

void setup(){
Serial.begin(115200);
}
void loop(){
Serial.write(1);
delay(2000);
Serial.write(0);
delay(2000);

}


Arduino 2---Receiver

#define led 12
void setup(){
Serial.begin(115200);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
}
void loop(){
if(Serial.available()){
    if(Serial.read()==1)
  digitalWrite(led,HIGH);
  else
  digitalWrite(led,LOW);
  delay(2000);
}
}


晶片<----->晶片
2 個 Arduino
使用Serial.write() 與Serial.read()傳送2 Byte data


傳送端

union uData
{
byte b[2];
int value;
};


union uData data;
void setup() {
Serial.begin(9600);
delay(1000);
}

void loop() {
data.value=0x3456;
Serial.write(0x21);//起始 字元
Serial.write(data.b[0]);
Serial.write(data.b[1]);
delay(1000);
}
或
union uData
{
byte b[2];
int value;
};

union uData data;
void setup() {
Serial.begin(9600);
delay(1000);
}

void loop() {
data.value=0x3456;
Serial.write(0x21);//起始 字元
Serial.write(data.b,2);
delay(1000);
}



接收端

#define Led  12
union uData
{
byte b[2];
int value;
};

union uData data;
 
void setup() {
 Serial.begin(9600);
pinMode(Led,OUTPUT);
digitalWrite(Led,1);
}

void loop() {
  if(Serial.available()>0)
{
  if(Serial.read()==0x21) //判斷是否為起始字元
  {
   //delay(10);//若資料傳遞不正確 可再加長
   // Wait until data is received  (不用delay)
   while ( !(UCSR0A & (1 << RXC0)) )  ;
   data.b[0]=Serial.read();
  
//delay(10);//若資料傳遞不正確 可再加長
  // Wait until data is received  (不 用delay) 
   while ( !(UCSR0A & (1 << RXC0)) )  ;
   data.b[1]=Serial.read();
   if(data.value==0x3456)
    { //Toggle D12
        digitalWrite(Led,1-digitalRead(Led));
      //asm("SBI 0x03,4");
    }
  }
 
  }
 }

或

#define Led  12
union uData
{
byte b[2];
int value;
};

union uData data;
 
void setup() {
 Serial.begin(9600);
pinMode(Led,OUTPUT);
digitalWrite(Led,1);
}

void loop() {
  if(Serial.available()>0)
{
  if(Serial.read()==0x21) //判斷是否為起始字元
  {
 // delay(10);//若資料傳遞不正確 可再加長
  Serial.readBytes(data.b,2);
   if(data.value==0x3456)
    {
     //Toggle D12
        digitalWrite(Led,1-digitalRead(Led));
      //asm("SBI 0x03,4");
    }
  }
 
  }
 }
或 使用interrupt
#define Led  12
union uData
{
byte b[2];
int value;
};

union uData data;

void serialEvent() {
   if(Serial.available()>0)
{
  if(Serial.read()==0x21) //判斷是否為起始字元
  {
   Serial.readBytes(data.b,2);
   if(data.value==0x3456)
    {
     //Toggle D12
        digitalWrite(Led,1-digitalRead(Led));
      //asm("SBI 0x03,4");
    }
  }
 
  }
}
 
void setup() {
 Serial.begin(9600);
pinMode(Led,OUTPUT);
digitalWrite(Led,1);
}

void loop() {
 
 }

或
#define Led  12
volatile int flag=0;
union uData
{
byte b[2];
int value;
};

union uData data;

void serialEvent() {
   if(Serial.available()>0)
{
  if(Serial.read()==0x21) //判斷是否為起始字元
  {
 
  Serial.readBytes(data.b,2);
   if(data.value==0x3456)
    {
      flag=1-flag;
    }
  }
 
  }
}
 
void setup() {
 Serial.begin(9600);
pinMode(Led,OUTPUT);
digitalWrite(Led,1);
}

void loop() {
          digitalWrite(Led,flag);
   }