Arduino花式點燈
Arduino作為一款為創(chuàng)客而造的智能硬件,以其簡單,靈活,開源等特點,吸引了大批愛好者。只要稍微有一點c語言基礎(chǔ)和初高中物理知識,就能利用arduino創(chuàng)造出許多好玩的智能小物件。
本篇博文將簡單介紹如何使用arduino逐步實現(xiàn)簡單的物聯(lián)網(wǎng)控制:點燈,串口點燈,利用開發(fā)板點燈。
一、準(zhǔn)備
首先我們需要下載arduino的開發(fā)環(huán)境
去www.arduino.cc 下載 Arduino IDE軟件。一路下一步安裝打開開發(fā)環(huán)境。
代碼區(qū)域主要分為setup和loop函數(shù):setup函數(shù)部分是指開始程序前對一些環(huán)境的測試,而loop代碼段則是執(zhí)行后arduino執(zhí)行的部分。我們只需要簡單對這兩個部分進(jìn)行修改即可。
二、簡單的點燈程序
首先將程序如下寫入至代碼區(qū)域:
void setup(){
pinMode(13,OUTPUT);
}
void loop(){
digitalWrite(13,HIGH);
}
插上arduino設(shè)備,編譯燒錄后,會看到開發(fā)板上的led燈常亮。
arduino板載了一個led,默認(rèn)是連接在13號數(shù)字口上的。
setup函數(shù)中,pinMode是設(shè)置了arduino的13號數(shù)字口為輸出模式,而執(zhí)行l(wèi)oop函數(shù)時,在13號數(shù)字口寫入一個高電平,則led燈會常亮。
三、串口點燈
將如下程序?qū)懭氲絀DE環(huán)境下的代碼區(qū)域內(nèi):
void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop() {
while(Serial.available())
{
char c=Serial.read();
if(c=='1')
{digitalWrite(13,1);}
else if(c=='2')
{digitalWrite(13,0);}
else if(c=='3')
{ while(Serial.available()<=0)
{
digitalWrite(13,1);
delay(100);
digitalWrite(13,0);
delay(100);
}
}
}
}
燒錄代碼后,打開IDE工具里的串口工具。鍵盤輸入1,則燈亮、輸入2,燈滅、輸入3時則一閃一閃;
setup函數(shù)Serial.begin中設(shè)置了串口的波特率為9600;
loop函數(shù)中將讀取串口中的數(shù)據(jù),判別是否是‘1’,‘2’,還是‘3’,對應(yīng)執(zhí)行寫入高電平實現(xiàn)燈亮,寫入低電平實現(xiàn)燈滅,以及延時寫入高低電平實現(xiàn)一閃一閃;
四、開發(fā)板點燈
上述代碼使用了arduino的串口工具實現(xiàn)串口點燈。那么如何實現(xiàn)開發(fā)板點燈呢。
將arduino用usb連接至華清遠(yuǎn)見fs4412 arm cortex-a9開發(fā)板。會識別串口設(shè)備文件(需要在內(nèi)核編譯時加入對相應(yīng)串口的支持,本實驗使用的是ch341)
則在開發(fā)板環(huán)境下打開對應(yīng)的串口設(shè)備,寫入 ‘1’、‘2’、‘3’字符,即可實現(xiàn)燈亮、燈滅、以及一閃一閃。
代碼如下,使用arm交叉編譯運行即可。
#include
#include
#include
#include
#include
#include
#include
#include
int fd;
int uart_device_open()
{
struct termios options;
if((fd=open("/dev/ttyUSB0",O_RDWR|O_NOCTTY|O_NDELAY))<0)
{
perror("open failed");
return -1;
}
tcgetattr(fd, &options);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~CSIZE;
options.c_cflag &= ~CRTSCTS;
options.c_cflag |= CS8;
options.c_cflag &= ~CSTOPB;
options.c_iflag |= IGNPAR;
options.c_iflag &= ~(BRKINT | INPCK | ISTRIP | ICRNL | IXON);
options.c_cc[VMIN] = 12;
options.c_oflag = 0;
options.c_lflag = 0;
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
tcsetattr(fd,TCSANOW,&options);
printf("serial ok!n");
return 0;
}
int my_write(char command)
{
write(fd,&command,sizeof(command));
printf("write %c successn",command);
}
int main(int argc, const char *argv[])
{
uart_device_open();
char command;
while(1)
{
command = getchar();
if((command-'1')==0)
{
my_write('1');
printf("LED ONn");
}
if((command-'2')==0)
{
my_write('2');
printf("LED OFFn");
}
if((command-'3')==0)
{
my_write('3');
printf("bling blingn");
}
}
return 0;
}
五、小結(jié)
逐步通過這個三個小實驗,我們可以簡單對arduino實現(xiàn)代碼控制,串口控制,甚至于使用開發(fā)板控制。最終實現(xiàn)了上位機與下位機的簡單通信。
在以后的博文中我們將采用arduino實現(xiàn)arm開發(fā)板對電機的控制,從而實現(xiàn)一個簡單的智能小車。