看到那条光彩夺目的食人鱼LED了吗?它正在和两个按钮互动,按下Open按钮,食人鱼亮,按下Close按钮,食人鱼熄。
按钮是输入,食人鱼LED为输出,输入与输出之间的逻辑关系靠Arduino控制器来编程。
/* 按下Open按钮,食人鱼LED亮,按下Close按钮,食人鱼LED亮熄。
注意:大按钮模块和食人鱼模块都是低电平有效。
大按钮模块按下时,为低电平,松开为高电平,
食人鱼模块,低电平亮,高电平熄。
这个电路:
* 食人鱼LED连在数字接口9上
* Open按钮连在数字接口7上
* Close按钮连在数字接口6上 */
// int 前面有 const说明Open_button、Close_button和ledPin是常量
// 设置数字接口:
const int Open_button = 7;
const int Close_button = 6;
const int ledPin = 9;
void setup() {
pinMode(Open_button,INPUT);//设置按钮为输入
pinMode(Close_button,INPUT);
pinMode(ledPin, OUTPUT);//设置食人鱼LED为输出
digitalWrite(ledPin,HIGH);//熄灭食人鱼
}
void loop()
{
// int 前面有 const说明以下定义的是变量:
// 读Open按钮状态到局部变量read_Openbutton:
int read_Openbutton = digitalRead(Open_button);
// 读Close按钮状态到局部变量read_Closebutton:
int read_Closebutton = digitalRead(Close_button);
if (read_Openbutton ==LOW) //判断Open按钮是否按下
{
delay(50);//延时50毫秒
read_Openbutton = digitalRead(Open_button);
if (read_Openbutton ==LOW)//为防抖,再次判断Open按钮是否按下
{
digitalWrite(ledPin, LOW);//点亮食人鱼
}
}
if (read_Closebutton ==LOW)//判断Close按钮是否按下
{
delay(50);//延时50毫秒
read_Closebutton = digitalRead(Close_button);
if (read_Closebutton ==LOW)//为防抖,再次判断Close按钮是否按下
{
digitalWrite(ledPin,HIGH);//熄灭食人鱼
}
}
}
不要按钮,上位机软件labview也可以与这条食人鱼互动。
在Labview的前面板上,按下“点亮”按钮,与下位机Arduino控制器相连的食人鱼LED被点亮,同时LED被点亮的状态反馈到上位机,labview的绿灯也亮。前面板上,按下“熄灭”按钮,食人鱼LED被熄灭,labview的绿灯也随之熄灭。上下位机通过串口都执行了读写命令。可以看看以下labview程序框图和Arduino串行通信的C程序。
labview程序框图:
Arduino串行通信的C程序:这个程序和食人鱼与按钮互动的程序不同,仔细看有啥不同。
int ledpin=9;//声明食人鱼LED的数字接口编号
int val;
int led_state;
void setup()
{
pinMode(ledpin,OUTPUT);//设置食人鱼为输出
digitalWrite(ledpin,HIGH);//初始化是食人鱼熄灭
Serial.begin(9600);//设置串行通信的波特率
}
void loop()
{
val=Serial.read();//读取labview下达的命令
if(val=='a')//如果labview发送字符'a',则点亮食人鱼
{
digitalWrite(ledpin,LOW);//食人鱼点亮
led_state=1;
}
if(val=='b')//如果labview发送字符'b',则熄灭食人鱼
{
digitalWrite(ledpin,HIGH);//食人鱼熄灭
led_state=0;
}
delay(100);
if(led_state==1)//把食人鱼LED亮或者灭的状态上传给Labview
{Serial.print('a');}
else
{ Serial.print('b');}
}
labview与Arduino食人鱼互动的程序打包下载:
文章评论(0条评论)
登录后参与讨论