Arduino的源代碼如下所示:
#define LED_ON_COMMAND 0x10
//打開LED命令字
#define LED_OFF_COMMAND 0x20
//關(guān)閉LED命令字
unsigned int comdata[3];
//定義數(shù)組數(shù)據(jù),存放串口命令數(shù)據(jù)
int
led = 13;
//定義LED連接的管腳
int
ON_mark=0;
//定義ON 的標(biāo)志位
int
OFF_mark=0;
//定義OFF的標(biāo)志位
void
receive_data(void);
//接受串口數(shù)據(jù)
void
test_data(void);
//測(cè)試串口數(shù)據(jù)是否正確,并更新數(shù)據(jù)
void
do_command(void);
//執(zhí)行更新的數(shù)據(jù)
void
setup()
{
Serial.begin(9600);
pinMode(led,
OUTPUT);
}
void
loop()
{
while (Serial.available()
> 0) //不斷檢測(cè)串口是否有數(shù)據(jù)
{
receive_data();
//接受串口數(shù)據(jù)
test_data();
//測(cè)試數(shù)據(jù)是否正確并更新數(shù)據(jù)
do_command();
//執(zhí)行更新的數(shù)據(jù)
}
}
void
receive_data(void)
{
int i
;
for(i=0;i<3;i++)
{
comdata[i] =(unsigned
char)(Serial.read());
//延時(shí)一會(huì),讓串口緩存準(zhǔn)備好下一個(gè)字節(jié),不延時(shí)可能會(huì)導(dǎo)致數(shù)據(jù)丟失,
delay(2);
}
}
void
test_data(void) //驗(yàn)證命令的正確性
{
if(comdata[0] == 0x55)
//0x55和0xAA均為判斷是否為有效命令
{
if(comdata[1] == 0xAA)
{
switch(comdata[2])
{
case
LED_ON_COMMAND:
{
ON_mark=1;
//ON數(shù)據(jù)更新位置位
}
case
LED_OFF_COMMAND:
{
OFF_mark=1;
//OFF數(shù)據(jù)更新位置位
}
}
}
}
}
void
do_command(void) //執(zhí)行命令
{
if(OFF_mark==1)
{
OFF_mark=0;
//復(fù)位OFF更新位
digitalWrite(led, LOW);
//關(guān)閉LED燈
}
if(ON_mark==1)
{
ON_mark=0;
//復(fù)位ON 更新位
digitalWrite(led, HIGH);
//打開LED燈
}
}