极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9886|回复: 3

求助求助。。键盘控制led亮灭。。

[复制链接]
发表于 2013-6-5 15:05:43 | 显示全部楼层 |阅读模式
一共12个灯
想要的效果:(1)可以用键盘的12个按键控制每个灯的亮暗,比如说按一下键盘上的“1",一号灯亮,再按一下灭。

                   (2)12个灯中每4个灯编一个组,按一个键盘上的某个键4个灯亮,再按一下灭

                    (3)整个12个灯,按一下全亮,按一下全灭(总开关)

                  3个效果之间是否相互冲突{:soso_e132:} 请教代码如何编写?
回复

使用道具 举报

发表于 2013-6-5 17:41:27 | 显示全部楼层
不冲突
就是通过串口接收键盘输入吧
不过我还没学到arduino的这一步
不过伪代码还是可以的
我觉得可读性强的方案就是用12个变量保存12个灯的状态
比如l1,l2,l3……开始都是0表示不亮

setup(){
l1=0;l2=0;……l12=0;
1到12全灭
}
loop(){
if (keycode="1"){
  if(l1=0){
    l1=1;
    亮1号灯;
  }
  else{
    l1=0;
    亮0号灯;
  }
}
………………
依此类推;
}



虽然没有冲突,但是有一个问题要定义一下
你的四个灯一组,如果1234一组,按了相应的键,如果按之前是全或全灭倒还好办,如果有亮有灭,你按了这个键是要个什么效果?
如果定义好了,那就好编了。

反正键是没冲突的,倒是2和3要定义一下。比如3的情况下,如果亮的灯比灭的灯多,则全亮,否则全灭,如果一样多就保持原状之类的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-5 18:06:40 | 显示全部楼层
pumpitup 发表于 2013-6-5 17:41
不冲突
就是通过串口接收键盘输入吧
不过我还没学到arduino的这一步

我觉得 是不是要个优先级, 我想要的是总开关>分组开关>单个开关,就是组内有灯亮的的时候,按组的开关还是会全亮全灭,以组的开关优先;总开关也是,总开关是优先级最高的,不管12个灯的亮暗情况如何,就和总闸的感觉差不多哦~
另外2个问题:(1)按一下常亮,再按一下常灭 怎么写
                    (2)串口通信,我现在按键盘只能在Serial Monitor里输入,然后按回车,可以在任意界面,不按                       回车,就可以输入吗?
  1. void setup (){
  2.   Serial.begin(9600);}

  3. void loop()
  4. {
  5.   if (Serial.available()>0){
  6.     int val = Serial.read();
  7.   
  8.     if(val=='1'){
  9.       digitalWrite(13,HIGH);
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-6-10 17:00:14 | 显示全部楼层
优先级的话,只要你不需要考虑同时按下去的情况,那就不需要了
组内有灯亮的时候,你按组的开关,是让这组亮呢,还是让这组灭?
串口倒是已经学到了,但是还没有开始实践。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-4 21:31 , Processed in 0.036279 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表