本实验的Arduino设备源于DFrobot官方旗舰店: http://dfrobot.taobao.com/
看到那条光彩夺目的食人鱼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食人鱼互动的程序打包下载:开关食人鱼(用Labview控制).rar |