c++ - 我们的柔性电阻器给出的值不正确
问题描述
我们正在开发一个 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 波动。我们的故障之一可能是柔性电阻器故障。但我们认为也可能隐藏了一些代码问题。
解决方案
推荐阅读
- google-sheets-formula - 如何根据两个下拉列表条件过滤单元格?
- terraform - 是否可以以编程方式取消 terraform 安装?
- python - 从最后一个元素到第一个元素的数组
- electron - 如何获取打包电子应用程序错误的完整日志?
- php - 如何在PHP中获取具有html同名类的数组
- r - R:按多个组计数(dplyr) - 这是正确的
- r - R - deSolve 包(ode 函数):根据时间更改 SIR 模型中的参数矩阵
- java - 尝试制作一个接受简单字符串输入并将其存储在 Java 中的棋盘
- r - 在 R 中解释对数转换的多元回归模型
- javascript - 尝试将我的“aws-amplify”包导入我的入口点时收到 JSLint 错误