宜昌老张

一条能互动的食人鱼

0
阅读(2696)

 

   本实验的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食人鱼互动的程序打包下载:98686075186.zip