首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的RGB-条形驱动程序代码中的意外行为

在我的RGB-条形驱动程序代码中的意外行为
EN

Stack Overflow用户
提问于 2015-06-11 07:57:38
回答 1查看 33关注 0票数 0

我在引脚9,10和11上输出错误。它们是我的RGB驱动电路的输入。它基本上是一个NPN晶体管阵列,从带材中拉出电流。

其基本思想是只需2个控件来设置R、G、B和亮度。我用的是按钮和测压仪。测斜仪用于设置值,并将按钮跳到下一个值设置。有一个设置状态,类似于默认的设置状态。这是一个设置亮度,我将使用这大部分时间。othe是用来设置颜色的,当其中一个设置时,条子将在我当前设置的颜色和alle三种颜色设置的结果之间闪烁。在我添加亮度设置之前,整个代码都运行得很好,我认为我有点迷失在自己的代码中。

我甚至添加了一个序列来读取输出,但我不明白为什么数字是这样的:

代码语言:javascript
复制
  int pinR = 9;
  int pinG = 10;
  int pinB = 11;
  int potPin = A0;
  const int buttonPin = 2;

  int brightR = 0;
  int brightG = 0;
  int brightB = 0;
  int brightness = 50; //

  int R;
  int G;
  int B;

  int potValue = 0;

  int blinky = 0;
  boolean blinking = false;

  int buttonState;
  int lastButtonState = LOW;
  long lastDebounceTime = 0;
  long debounceDelay = 50;

  int setting = 0; //0=R 1=G 2=B 3=Brightness

  void setup() {
    // put your setup code here, to run once:
    pinMode(pinR, OUTPUT);
    pinMode(pinG, OUTPUT);
    pinMode(pinB, OUTPUT);

    Serial.begin(9600);
  }

  void RGBset(int r, int g, int b){
      analogWrite(pinR, r);
      analogWrite(pinG, g);
      analogWrite(pinB, b);
    }

  void loop() {
    // put your main code here, to run repeatedly:
    potValue = analogRead(potPin);
    potValue = map(potValue, 0, 1023, 0, 255); //read pot --> map to values from 0 - 255

    int reading = digitalRead(buttonPin);

    if (reading != lastButtonState) {

      lastDebounceTime = millis();
    }

    if ((millis() - lastDebounceTime) > debounceDelay) {

      if (reading != buttonState) {
        buttonState = reading;

        if (buttonState == HIGH) {
          setting++;
        }
      }
    }

    lastButtonState = reading;

    if(setting > 3){  // 0=R 1=G 2=B 3=Brightness
      setting = 0;    // cant get 4 cause there is no 4
    }

    if(setting == 0){
      brightR = potValue;
      if(blinking){
        RGBset(brightR, brightG, brightB);
      }else{
        RGBset(brightR, 0, 0);
      }
    }

    if(setting == 1){
      brightG = potValue;
      if(blinking){
        RGBset(brightR, brightG, brightB);
      }else{
        RGBset(0, brightG, 0);
      }
    }

    if(setting == 2){
      brightB = potValue;
      if(blinking){
        RGBset(brightR, brightG, brightB);
      }else{
        RGBset(0, 0, brightB);
      }
    }

    if(setting == 3){
      brightness = potValue;
      brightness = map(brightness, 0, 255, 1, 100);  //mapping brightness to values from 1 - 100
      R = brightR * brightness / 100;                //set value * brightness / 100 
      G = brightG * brightness / 100;                //that leads to get % of set value
      B = brightB * brightness / 100;                //255 * 50 / 100 = 127,5 ==> 128
      RGBset(R, G, B);                               //it wont blink in thiss setting
    }

    if(setting != 3){
      blinky++;
      if(blinky > 1000){
        blinking = !blinking;
        blinky = 0;
      }
    }

    String output = (String(brightR) + " " + String(R) + " " + String(brightG) + " " + String(G) + " " + String(brightB) + " " + String(B) + " " + String(brightness) + " " + String(potValue) + " " + String(blinking)); 
    Serial.println(output);

    delay(1);
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-11 15:14:08

首先,在setup中:

代码语言:javascript
复制
pinMode(buttonPin , INPUT);

第二,当setting==3的时候你期望什么?您没有重新加载/更新brightR brightG brightB的变量。所以,当你改变setting时,你会失去亮度的变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30774907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档