原创 一条能互动的食人鱼

2010-8-3 21:15 2241 8 8 分类: MCU/ 嵌入式

917da83c-615d-40cc-a861-1834bd26fd98.jpg


看到那条光彩夺目的食人鱼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也可以与这条食人鱼互动。


f73db9a4-72d1-4cc2-a9b3-c19e987d3bf4.jpg


在Labview的前面板上,按下“点亮”按钮,与下位机Arduino控制器相连的食人鱼LED被点亮,同时LED被点亮的状态反馈到上位机,labview的绿灯也亮。前面板上,按下“熄灭”按钮,食人鱼LED被熄灭,labview的绿灯也随之熄灭。上下位机通过串口都执行了读写命令。可以看看以下labview程序框图和Arduino串行通信的C程序。


labview程序框图:


bca45f98-8bed-4805-b98a-9663bf80eb2c.jpg


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食人鱼互动的程序打包下载:


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条