專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> Arduino >> 瀏覽文章

Arduino-電位器調(diào)速并帶蜂鳴的跑馬燈

作者:快樂的堯   來源:快樂的堯   點擊數(shù):  更新時間:2014年07月31日   【字體:

這個實驗比較麻煩,因為這個實驗包含了跑馬燈、蜂鳴器和電位器。電位器阻值越大,跑馬燈速度越慢,間隔時間根據(jù)電位器的阻值采樣為:(100+2×采樣值)毫秒,采樣值為0~1023。即100~2146毫秒之間,每次點亮LED時,蜂鳴器都會蜂鳴一次(20毫秒)

程序如下:
 
#define Pot A0   
#define Buzzer 12   //以電位器引腳創(chuàng)建
byte ledPin[] = {2,3,4,5,6,7,8,9,10};    //Port 2~10 LED輸出,低電平有效
int ledDelay;
int dir = 1;
int currentLED = 0;
int PotBuffer = 0;
unsigned long changeTime;
 
void setup() {
  pinMode(Buzzer,OUTPUT); //蜂鳴器為IO輸出
  digitalWrite(Buzzer,HIGH); //蜂鳴器初始為不鳴叫  
    for (int x=0; x<9; x++) 
    {
      pinMode(ledPin[x], OUTPUT);  // LED初始全滅
    }
    changeTime = millis();
}
void loop()  
{
  PotBuffer = analogRead(Pot);      //讀取AD值
    if((millis() - changeTime) > 20)   //判斷蜂鳴時間是否到了20ms
    {
      digitalWrite(Buzzer,HIGH);    //到了則關(guān)斷蜂鳴器
    }
    if((millis() - changeTime) > ledDelay)   //判斷是否到了LED持續(xù)點亮的時間
    {
      changeLED();   //到了則點亮下一個LED
      changeTime = millis();    //再設(shè)置現(xiàn)在點亮的起始時間
    }
}
 
void changeLED() {
  for (int x=0; x<9; x++) {
    digitalWrite(ledPin[x], HIGH);
  }
digitalWrite(ledPin[currentLED], LOW);
//BuzzerDi();
digitalWrite(Buzzer,LOW);
ledDelay = 20 + 2*PotBuffer;
currentLED+=dir;
if (currentLED == 8) {dir = -1;}
if (currentLED == 0) {dir = 1;} 
}
 
效果:
關(guān)閉窗口