专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

Arduino-电位器调速并带蜂鸣的跑马灯

作者:快乐的尧   来源:快乐的尧   点击数:  更新时间:2014年07月31日   【字体:

这个实验比较麻烦,因为这个实验包含了跑马灯、蜂鸣器和电位器。电位器阻值越大,跑马灯速度越慢,间隔时间根据电位器的阻值采样为:(100+2×采样值)毫秒,采样值为0~1023。即100~2146毫秒之间,每次点亮LED时,蜂鸣器都会蜂鸣一次(20毫秒)

程序如下:
 
#define Pot A0   
#define Buzzer 12   //以电位器引脚创建
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);    //到了则关断蜂鸣器
    }
    if((millis() - changeTime) > ledDelay)   //判断是否到了LED持续点亮的时间
    {
      changeLED();   //到了则点亮下一个LED
      changeTime = millis();    //再设置现在点亮的起始时间
    }
}
 
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;} 
}
 
效果:
关闭窗口