久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> Arduino >> 瀏覽文章

Arduino機器人第3課:創意LED

作者:謝作如   來源:本站原創   點擊數:  更新時間:2014年05月04日   【字體:
《創意LED》是第一章《LED》的第三個專題。通過前兩個專題的學習,學生已經具備一定的編程能力,熟悉了Arduino的基本語法,掌握了變量、選擇結構以及digitalWrite()和digitalRead()函數。本專題通過增加傳感器使學生掌握analogWrite()、analogRead()函數、循環結構等內容。但是學習這些的最終目的是讓學生有足夠的技術基礎設計有創意的LED作品。
 
相關資源下載地址:http://pan.baidu.com/s/1kTqOYs3
 
1.理解PWM
 
PWM——脈沖寬度調制,可以將數字信號轉換成模擬信號。Arduino板子上有6個引腳支持PWM信號,分別是3、5、6、9、10、11。通過數字口的PWM輸出analogWrite()函數可以改變LED的亮度。analogWrite(pin,vlaue)——pin 接引腳(3、5、6、9、10、11) value值為0~255。
 
2.按鈕控制LED明暗
 
這個部分,我們主要是和學生一起完成按下按鈕,led慢慢亮,延遲一段時間,led慢慢暗的任務。這個時候我們就需要用到循環結構了,循環結構有兩種,一種是while,一種是for,兩種都可以實現,這次我們用while結構來實現。
 
程序如下:
 
 int b;  int i=0;
 
void setup()
 
 {
 
  pinMode(3,OUTPUT);
 
  pinMode(5,INPUT);
 
}
 
void loop()
 
 {
 
  b=digitalRead(5);
 
  if(i==LOW)
 
{
 
while(i<255) 
 
{
 
analogWrite(3,i);  
 
  i=i+1;    
 
}
 
    delay(3000);//延時時間
 
     while(i>0)
 
{
 
    analogWrite(3,i);
 
    i=i-1;
 
}
 
}
 
}
 
 
 
在上面的程序中,可以看到我們在每個while()函數里面都加了delay(10),這里的延時是很重要的,如果去掉延時,很多情況下,我們都看不到燈光漸變的效果,這是因為loop()循環的非常快,有時候肉眼看不出來燈光的明暗變化,加了延時,就相當于將led漸變拉成慢鏡頭,從而呼吸燈的效果也就非常明顯了。
 
3. 光控LED亮滅
 
在這一部分,我們引導學生使用光線傳感器控制LED的亮滅,我們用analogRead(pin)函數了。該函數可以讀取模擬口的輸入值,pin是模擬輸入口的編號。在講解完光控LED亮滅,進一步啟發學生通過光線傳感器控制燈光暗滅時,有個學生自己寫出了如下程序:
 
int a;
 
void setup()
 
{
 
 pinMode(6 , OUTPUT);//LED接數字口6
 
}
 
void loop()
 
{
 
 a = analogRead(A0) ;//讀取傳感器值
 
    analogWrite( 3 , a);/
 
}  
 
光線傳感器讀取到外界的值是0-1023的,我們那天上課的時候光線傳感器讀出來的值大約在1000左右,但是我們知道PWM的值是0到255,所以學生產生了疑問,為什么analogWrite( 3 , a)中a是1000多,我們的led燈還是有明暗變化的,0到1023和0到255又有什么對應轉化關系。值得高興的是,我們的這個同學在經過多次嘗試以后,發現了兩者之間的周期性關系。雖然是一個很小的探索,但是學生的這種求知和實踐還是很讓人高興的。我們以后在上課的時候,也可以提一提兩者之間的轉換關系,正好這個知識點與下面的map()函數的教學相對應,也過度自然。
 
 
 
最后一個光控LED明暗小實驗中,因為analogRead()函數讀出來的值是0~1023之間的值;而PWM值為0~255,這兩者之間就需要用到轉換。在這里我們使用map()函數。
 
map(value, fromLow, fromHigh, toLow, toHigh),在這里value指要轉換的值,fromLow指值現在的下界,romHigh指值現在的上界,toLow指值目標范圍的上界,oHigh指值目標范圍的上界。因為我們要完成的是0-1023到0-255的轉換,所以map(a,0,1023,0,255)是可以理解的,但是我們給的程序顯示的是map(a,800,1023,0,255),在這里,需要讓學生自己測試兩個寫法的不同效果,進而總結出把0改成800的原因,代碼如下:
 
int b;
 
int i;
 
void setup() {
 
pinMode(3,OUTPUT);
 
pinMode(0,INPUT);
 
}
 
void loop() {
 
  b=analogRead(0);
 
  i=map(b,800,1023,0,255);
 
  analogWrite(3,i);
 
}
關閉窗口

相關文章

主站蜘蛛池模板: 婷婷成人在线 | 国产午夜精品久久久 | 国产目拍亚洲精品99久久精品 | 久久久精彩视频 | 狠狠视频 | 久久黄色网 | 国内精品久久久久 | 四虎永久免费在线 | 天天躁日日躁xxxxaaaa | 国产精品精品久久久 | 免费天天干 | 精品日本中文字幕 | 日本亚洲欧美 | 韩日一区二区三区 | 中文字幕一区在线 | 国产精品一区在线 | 亚洲精品乱码久久久久v最新版 | 欧美13videosex性极品 | 成人午夜免费福利视频 | 亚洲激情在线观看 | 超碰在线人人 | 亚洲啪啪| 另类 综合 日韩 欧美 亚洲 | 国产精品久久久久久久免费大片 | 国产精品免费av | 日韩综合网 | 色毛片| 欧美日韩国产在线观看 | 日韩欧美一区二区三区免费看 | 久久亚洲一区 | 日韩av黄色 | 国产a级黄色录像 | 国产美女自拍视频 | 精品免费视频 | 91精品在线播放 | 久久精品视频一区二区三区 | 精品国产aⅴ| 91成人小视频| 韩日一区二区 | 免费在线观看一区二区 | 久久久精品一区 |