极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 27917|回复: 19

求大神指导按键控制三色灯的问题

[复制链接]
发表于 2015-4-23 17:08:11 | 显示全部楼层 |阅读模式
我想做一个按键控制三色灯的东西 就是按下按键  先红灯亮,再按,绿灯亮,再按,蓝灯亮,再按,熄灭,一次循环。我是根据网上的按键控制灯灭的程序修改,可是不行 贴上网上的代码,求指导

  1. int redPin=11;//定义数字11 接口
  2. boolean redState=false;
  3. boolean buttonState=true;
  4. int buttonPin=7;//定义数字7 接口
  5. int val;//定义变量val
  6. void setup()
  7. {
  8. pinMode(redPin,OUTPUT);//定义小灯接口为输出接口
  9. pinMode(buttonPin,INPUT_PULLUP);//定义按键接口为输入接口
  10. }
  11. void loop()
  12. {
  13. val=digitalRead(buttonPin);//读取数字7 口电平值赋给val
  14. if(val==HIGH)//检测按键是否按下,按键按下时小灯亮起
  15. {
  16. while(digitalRead(buttonPin)==HIGH){}
  17. if(redState==true)
  18. {digitalWrite(redPin,HIGH);
  19. redState=!redState;
  20. }
  21. else
  22. {digitalWrite(redPin,LOW);
  23. redState=!redState;
  24. }
  25. delay(200);
  26. }
  27. }


复制代码
回复

使用道具 举报

发表于 2015-4-23 17:22:48 | 显示全部楼层
最近大家都喜歡玩猜謎遊戲, 一句不行, 大家猜猜怎樣不行.  

就連改了什麼也不說, 這個謎面什麼也沒有, 樓主希望大家可以猜什麼?  

要發問也應該提供一些基本資料吧.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-23 17:42:23 | 显示全部楼层
Super169 发表于 2015-4-23 17:22
最近大家都喜歡玩猜謎遊戲, 一句不行, 大家猜猜怎樣不行.  

就連改了什麼也不說, 這個謎面什麼也沒有, 樓 ...

额 这个代码是书上的例子 是按键按下灯亮 再按下 灯灭 我想控制RGB三色灯 按下红灯亮 再按下 绿灯亮(红灯灭) 再按下 蓝灯亮 (绿灯灭) 再按下 全灭  但是不知道该怎么修改  谢谢提醒啊
回复 支持 反对

使用道具 举报

发表于 2015-4-23 17:57:05 | 显示全部楼层
既然你說 "我是根据网上的按键控制灯灭的程序修改,可是不行", 為什麼不把你嘗試過的修改, 以及碰到什麼問題說出來?

流程太簡單了, 用個 array 記下有關引腳, 一個 index 記下要亮的位置, 每次按鍵, 先把原來的引腳 set LOW (注意剛重置的不用), index++, 當 index > 燈數就重置 index, 否則就把對應的引腳 set HIGH.  只要注意 index 跟 array 的關係就可以 (簡單點可以把 0 定為重置, 1 或以上才是相關引腳).
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-23 19:02:21 | 显示全部楼层
Super169 发表于 2015-4-23 17:57
既然你說 "我是根据网上的按键控制灯灭的程序修改,可是不行", 為什麼不把你嘗試過的修改, 以及碰到什麼問題 ...

额 大神 不好意思啊 刚接触这个 很多都不太懂 说的我都蒙了 附上我理解的 还望指正
int redPin=9;//定义数字11 接口
int greenPin=10;//定义数字11 接口
int bluePin=11;//定义数字11 接口
boolean redState=false;
boolean greenState=false;
boolean blueState=false;
boolean buttonState=true;
int buttonPin=7;//定义数字7 接口
void setup()
{
pinMode(redPin,OUTPUT);//定义小灯接口为输出接口
pinMode(greenPin,OUTPUT);//定义小灯接口为输出接口
pinMode(bluePin,OUTPUT);//定义小灯接口为输出接口
pinMode(buttonPin,INPUT_PULLUP);//定义按键接口为输入接口
}
void loop()
{
while(digitalRead(buttonPin)==HIGH){}
if(redState==true)
{digitalWrite(greenPin,LOW);
digitalWrite(bluePin,LOW);
redState=!redState;
}
else if(greenState==true)
{digitalWrite(greenPin,LOW);
digitalWrite(bluePin,LOW);
redState=!redState;
}
else if(blueState==true)
{digitalWrite(redPin,LOW);
digitalWrite(greenPin,LOW);
redState=!redState;
}
}
void setColor(int red, int green, int blue)
{
  analogWrite(redPin, 255-red);
  analogWrite(greenPin, 255-green);
  analogWrite(bluePin, 255-blue);  
}
回复 支持 反对

使用道具 举报

发表于 2015-4-23 19:15:12 | 显示全部楼层
先明白原程式在做什麼才去修改吧.  你有了解過自己刪去的部份有什麼用嗎?

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-23 19:29:04 | 显示全部楼层
Super169 发表于 2015-4-23 19:15
先明白原程式在做什麼才去修改吧.  你有了解過自己刪去的部份有什麼用嗎?

我知道是什么样的流程 但是具体用什么样的程序来写 就比较难了 编程两年前简单学过 不过都快忘了 谢谢啊
回复 支持 反对

使用道具 举报

发表于 2015-4-23 19:47:44 | 显示全部楼层
先读懂代码再说

如果想玩ARDUINO连基本语法或者读别人现成的代码都想偷懒 那真的就没必要了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-23 19:54:25 | 显示全部楼层
darkorigin 发表于 2015-4-23 19:47
先读懂代码再说

如果想玩ARDUINO连基本语法或者读别人现成的代码都想偷懒 那真的就没必要了

能帮我指点一下么

  1. /*
  2.  Fading
  3.  
  4.  This example shows how to fade an LED using the analogWrite() function.
  5.  
  6.  The circuit:
  7.  * LED attached from digital pin 9 to ground.
  8.  
  9.  Created 1 Nov 2008
  10.  By David A. Mellis
  11.  modified 30 Aug 2011
  12.  By Tom Igoe
  13.  
  14.  http://arduino.cc/en/Tutorial/Fading
  15.  
  16.  This example code is in the public domain.
  17.  
  18.  */
  19.  
  20.  
  21. int redPin = 9;
  22. int greenPin = 10;
  23. int bluePin = 11;
  24. int inPin=7;//定义数字7 接口
  25. int i;
  26. int j;
  27. void setup() {
  28.    Serial.begin(9600);
  29.   // nothing happens in setup
  30.   pinMode(redPin,OUTPUT);
  31.   pinMode(greenPin,OUTPUT);
  32.   pinMode(bluePin,OUTPUT);
  33.   pinMode(inPin,INPUT);//定义按键接口为输入接口
  34.    
  35. }
  36.  
  37. void loop() {
  38.   i=0;
  39.   i=digitalRead(inPin);//读取数字7 口电平值赋给val
  40.   if(i==LOW){
  41. i +=1;}   
  42. j=i;
  43.   // fade in from min to max in increments of 5 points:
  44.   switch ( j%3 ) {
  45.     case 0:
  46.     digitalWrite(redPin,HIGH);digitalWrite(greenPin,HIGH);digitalWrite(bluePin,HIGH);delay(1000);
  47.     //low means light on
  48.     break;
  49.     case 1:
  50.     digitalWrite(redPin,HIGH);digitalWrite(greenPin,LOW);digitalWrite(bluePin,HIGH);delay(1000);
  51.     break;
  52.     case 2:
  53.     digitalWrite(redPin,LOW);digitalWrite(greenPin,HIGH);digitalWrite(bluePin,HIGH);delay(2000);
  54.     break;
  55.       default:
  56.       break;
  57.   }
  58.     
  59. }

复制代码
回复 支持 反对

使用道具 举报

发表于 2015-4-23 22:04:11 | 显示全部楼层
蓝色骨骨头 发表于 2015-4-23 19:54
能帮我指点一下么

应该对了,上机试一下呗,就知道对不对了
回复 支持 反对

使用道具 举报

发表于 2015-4-23 22:40:45 | 显示全部楼层

int redPin = 8;
int greenPin = 9;
int bluePin = 10;
int inPin=7;//定义数字7 接口
int i=0;
int j;
void setup() {
   Serial.begin(9600);
  // nothing happens in setup
  pinMode(redPin,OUTPUT);
  pinMode(greenPin,OUTPUT);
  pinMode(bluePin,OUTPUT);
  pinMode(inPin,INPUT);//定义按键接口为输入接口
  
}

void loop() {
  digitalWrite(inPin,HIGH);
  Serial.println(i);
  //i=digitalRead(inPin);//读取数字7 口电平值赋给val
  if(digitalRead(inPin)==LOW){
  
  while(digitalRead(inPin)==HIGH)return;
  
  i +=1;  
  // fade in from min to max in increments of 5 points:
  switch (i) {
    case 1:
    digitalWrite(redPin,HIGH);digitalWrite(greenPin,LOW);digitalWrite(bluePin,LOW);delay(500);
    //HIGH means light on
    break;
    case 2:
    digitalWrite(redPin,LOW);digitalWrite(greenPin,HIGH);digitalWrite(bluePin,LOW);delay(500);
    break;
    case 3:
    digitalWrite(redPin,LOW);digitalWrite(greenPin,LOW);digitalWrite(bluePin,HIGH);delay(500);i=0;
    break;
   default:
      break;
  }
  }
   
}
这个程序我试过了可以了了!
回复 支持 反对

使用道具 举报

发表于 2015-4-23 23:11:11 | 显示全部楼层

自己写的话:
首先考虑逻辑流程,自己可以尝试画个流程图
然后根据流程图进行编程。

改代码 自己要耐心的看懂原来的代码

提问题 你要把你的问题说清楚 比如目标 然后你的硬件架构
接着还有就是已经提供的代码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-24 09:08:51 | 显示全部楼层
逝去の唯一 发表于 2015-4-23 22:40
int redPin = 8;
int greenPin = 9;
int bluePin = 10;

谢谢大神了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-24 09:09:21 | 显示全部楼层
darkorigin 发表于 2015-4-23 23:11
自己写的话:
首先考虑逻辑流程,自己可以尝试画个流程图
然后根据流程图进行编程。

感谢大神指点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-24 09:09:57 | 显示全部楼层
mc.six 发表于 2015-4-23 22:04
应该对了,上机试一下呗,就知道对不对了

好的 我试一下 感谢指点啊
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 04:12 , Processed in 0.052674 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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