蓝色骨骨头 发表于 2015-4-23 17:08:11

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

我想做一个按键控制三色灯的东西 就是按下按键先红灯亮,再按,绿灯亮,再按,蓝灯亮,再按,熄灭,一次循环。我是根据网上的按键控制灯灭的程序修改,可是不行 贴上网上的代码,求指导
int redPin=11;//定义数字11 接口
boolean redState=false;
boolean buttonState=true;
int buttonPin=7;//定义数字7 接口
int val;//定义变量val
void setup()
{
pinMode(redPin,OUTPUT);//定义小灯接口为输出接口
pinMode(buttonPin,INPUT_PULLUP);//定义按键接口为输入接口
}
void loop()
{
val=digitalRead(buttonPin);//读取数字7 口电平值赋给val
if(val==HIGH)//检测按键是否按下,按键按下时小灯亮起
{
while(digitalRead(buttonPin)==HIGH){}
if(redState==true)
{digitalWrite(redPin,HIGH);
redState=!redState;
}
else
{digitalWrite(redPin,LOW);
redState=!redState;
}
delay(200);
}
}


Super169 发表于 2015-4-23 17:22:48

最近大家都喜歡玩猜謎遊戲, 一句不行, 大家猜猜怎樣不行.

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

要發問也應該提供一些基本資料吧.:L

蓝色骨骨头 发表于 2015-4-23 17:42:23

Super169 发表于 2015-4-23 17:22 static/image/common/back.gif
最近大家都喜歡玩猜謎遊戲, 一句不行, 大家猜猜怎樣不行.

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

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

Super169 发表于 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 static/image/common/back.gif
既然你說 "我是根据网上的按键控制灯灭的程序修改,可是不行", 為什麼不把你嘗試過的修改, 以及碰到什麼問題 ...

额 大神 不好意思啊 刚接触这个 很多都不太懂 说的我都蒙了 附上我理解的 还望指正
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);
}

Super169 发表于 2015-4-23 19:15:12

先明白原程式在做什麼才去修改吧.你有了解過自己刪去的部份有什麼用嗎?

蓝色骨骨头 发表于 2015-4-23 19:29:04

Super169 发表于 2015-4-23 19:15 static/image/common/back.gif
先明白原程式在做什麼才去修改吧.你有了解過自己刪去的部份有什麼用嗎?

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

darkorigin 发表于 2015-4-23 19:47:44

先读懂代码再说

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

蓝色骨骨头 发表于 2015-4-23 19:54:25

darkorigin 发表于 2015-4-23 19:47 static/image/common/back.gif
先读懂代码再说

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

能帮我指点一下么
/*
 Fading
 
 This example shows how to fade an LED using the analogWrite() function.
 
 The circuit:
 * LED attached from digital pin 9 to ground.
 
 Created 1 Nov 2008
 By David A. Mellis
 modified 30 Aug 2011
 By Tom Igoe
 
 http://arduino.cc/en/Tutorial/Fading
 
 This example code is in the public domain.
 
 */
 
 
int redPin = 9;
int greenPin = 10;
int bluePin = 11;
int inPin=7;//定义数字7 接口
int i;
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() {
  i=0;
  i=digitalRead(inPin);//读取数字7 口电平值赋给val
  if(i==LOW){
i +=1;}   
j=i;
  // fade in from min to max in increments of 5 points:
  switch ( j%3 ) {
    case 0:
    digitalWrite(redPin,HIGH);digitalWrite(greenPin,HIGH);digitalWrite(bluePin,HIGH);delay(1000);
    //low means light on
    break;
    case 1:
    digitalWrite(redPin,HIGH);digitalWrite(greenPin,LOW);digitalWrite(bluePin,HIGH);delay(1000);
    break;
    case 2:
    digitalWrite(redPin,LOW);digitalWrite(greenPin,HIGH);digitalWrite(bluePin,HIGH);delay(2000);
    break;
      default:
      break;
  }
    
}

mc.six 发表于 2015-4-23 22:04:11

蓝色骨骨头 发表于 2015-4-23 19:54 static/image/common/back.gif
能帮我指点一下么

应该对了,上机试一下呗,就知道对不对了

逝去の唯一 发表于 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;
}
}
   
}
这个程序我试过了可以了了!

darkorigin 发表于 2015-4-23 23:11:11


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

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

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

蓝色骨骨头 发表于 2015-4-24 09:08:51

逝去の唯一 发表于 2015-4-23 22:40 static/image/common/back.gif
int redPin = 8;
int greenPin = 9;
int bluePin = 10;


谢谢大神了

蓝色骨骨头 发表于 2015-4-24 09:09:21

darkorigin 发表于 2015-4-23 23:11 static/image/common/back.gif
自己写的话:
首先考虑逻辑流程,自己可以尝试画个流程图
然后根据流程图进行编程。


感谢大神指点

蓝色骨骨头 发表于 2015-4-24 09:09:57

mc.six 发表于 2015-4-23 22:04 static/image/common/back.gif
应该对了,上机试一下呗,就知道对不对了

好的 我试一下 感谢指点啊
页: [1] 2
查看完整版本: 求大神指导按键控制三色灯的问题