arduino自助饮料机程序,一共三个按键,分别对应三种饮料,按下按键之后,需要用手去触发红外感应开关,这个时候全彩led灯会亮起来,然后出饮料,手离开则停止出饮料。
代码:
#define button_delay 5 //单按钮消除抖动延时
#define button_every_delay 50 //多按钮操作间隔
//io高低点吧状态标志位,0代表低电平,1代表高电平
bool io_flag[3]={0,0,0};
//按钮变化标志位,0代表无变化,1代表有变化
bool button_flag[3]={0,0,0};
int i;
long time_last=0;
void anjian_jiance(){
for(i=2;i<=4;i++)
{
if(digitalRead(i)==HIGH)
{
delay(button_delay);
if(digitalRead(i)==HIGH)
{
if(io_flag[i-2]==0)
{
io_flag[i-2]=1;
delay(button_every_delay);
}
}
}
if(digitalRead(i)==LOW)
{
delay(button_delay);
if(digitalRead(i)==LOW)
{
if(io_flag[i-2]==1)
{
io_flag[i-2]=0;
//print_s(); //按钮松开,打印消息
delay(button_every_delay);
}
}
}
}
}
bool hongwai_jiance(){
if(digitalRead(11)==true)
{
delay(button_delay);
if(digitalRead(11)==true)
return true;
else
return false;
}
else
return false;
}
//5 6 9接红绿蓝
//全彩二极管呼吸灯
void led_light(){
Serial.println("Led lighting!");
for(int i=0;i<=255;i++)
{
analogWrite(5,255);
analogWrite(6,map(i,0,255,204,0));
analogWrite(9,map(i,0,255,226,0));
delay(4);
}
for(int i=0;i<=255;i++)
{
analogWrite(5,map(i,0,255,255,175));
analogWrite(6,map(i,0,255,0,18));
analogWrite(9,map(i,0,255,0,88));
delay(4);
}
Serial.println("Led lighted!");
}
void bengshui(){
Serial.println("Out watering");
while(hongwai_jiance())
{
if(io_flag[0])
{
digitalWrite(7,HIGH);
}
if(io_flag[1])
{
digitalWrite(8,HIGH);
}
if(io_flag[2])
{
digitalWrite(10,HIGH);
}
delay(50);
}
Serial.println("Out watered!");
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(10,LOW);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//2到4为3个按钮
for(i=2;i<=4;i++)
pinMode(i,INPUT);
//5 6 9为三个控制全彩led的引脚,7,8,10为控制3个水泵的引脚
for(i=5;i<=10;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
//11号口为检测红外感应引脚
pinMode(11,INPUT);
Serial.println("Init succ");
}
void loop() {
// put your main code here, to run repeatedly:
anjian_jiance();
if(io_flag[0]||io_flag[1]||io_flag[2])
{
Serial.print("key 1 :");
Serial.print(io_flag[0]);
Serial.print("*********key 2 :");
Serial.print(io_flag[1]);
Serial.print("*********key 3 :");
Serial.println(io_flag[2]);
time_last=millis();
while(!hongwai_jiance()){
if((millis()-time_last)>5000)
{
Serial.println("5 seconed tiem out!");
return;
}
}
led_light();
bengshui();
}
else
return;
}