首页 > 解决方案 > 我们的柔性电阻器给出的值不正确

问题描述

我们正在开发一个 Arduino 项目,我们使用不同的方法来改变三个 LED 的功率,从而制作我们自己的“RGB”灯,当前的问题是柔性电阻器。这个想法是使用三个柔性电阻器来控制每个灯。我们使用了地图函数,没有最低和最高值,使我们的最低数字为 0,最高为 255。问题主要是我们的数字波动很大,圈数像疯了一样闪烁。有什么建议吗?

我们已经尝试改变我们的映射数字,最大值和最小值。我们也玩过代码,但没有成功。

#include <LiquidCrystal.h>

int bend1 = A0;
int bend2 = A4;
int bend3 = A5;
int green = 6;
int red = 10;
int blue = 9;
unsigned long previous = 0;
const long interval = 500;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  Serial.begin(9600);
  Serial.println("Started");
  lcd.begin(16,2);
  pinMode(green, OUTPUT);
  pinMode(red, OUTPUT);
  pinMode(blue, OUTPUT);
}

void loop() {

  unsigned long currentMillis = millis();
  if (currentMillis - previous >= interval)
  {
    previous = currentMillis;
    lcd.clear();
  }

  int value1 = analogRead(bend1);
  int value2 = analogRead(bend2);
  int value3 = analogRead(bend3);
  value1 = map(value1, 510, 910, 0, 255);
  value2 = map(value2, 490, 905, 0, 255);
  value3 = map(value3, 500, 900, 0, 255);

  if(value3 > 20)
  {
    analogWrite(blue, value3);
  }
  else
  {
    analogWrite(blue, 0);
  }
  if(value2 > 20)
  {
    analogWrite(red, value3);
  }
  else
  {
    analogWrite(red, 0);
  }
  if(value1 > 20)
  {
    analogWrite(green, value3);
  }
  else
  {
    analogWrite(green, 0);
  }


  lcd.setCursor(0, 0);
  lcd.print("GREEN");
  lcd.setCursor(7, 0);
  lcd.print("RED");
  lcd.setCursor(12, 0 );
  lcd.print("BLUE");

  lcd.setCursor(0, 1);
  lcd.print(value1);
  lcd.setCursor(7, 1);
  lcd.print(value2);
  lcd.setCursor(12, 1);
  lcd.print(value3);

}

当所有柔性电阻器都平坦时,我们应该得到值 0,0,0,但在某些情况下它们会从 -10 ---> 90 波动。我们的故障之一可能是柔性电阻器故障。但我们认为也可能隐藏了一些代码问题。

标签: c++arduinoarduino-unoarduino-c++

解决方案


推荐阅读