Цифровой выбор для регулировки усиления не работает, вместо этого отображается 0
Я делаю устройство, которое будет иметь кнопку для измерения входа и еще одну кнопку для сброса, а входы будут переменными аналоговыми значениями (от 0 до 5 В), а выход будет отношением двух аналоговых входных напряжений. У него также будут клавиши выбора (две кнопки) для четырех вариантов выбора (например, усиление, например, если клавиша 1 == LOW клавиша 2 == LOW тогда J = 1 и т. д.) Но проблема в том, что когда я умножаю на него j, вывод показывает ноль. Если я умножаю числа, такие как 1, 2, 3 и т. д., не используя j, то значение отношения умножается.
вот код
void setup() // put your setup code here, to run once:
{
Serial.begin(9600);
pinMode( K1, INPUT );
pinMode( K2, INPUT );
pinMode( MeasureButton, INPUT );
pinMode( ResetButton, INPUT );
dsp.begin(20, 4);
current = millis();
}
void loop()
{
while(current < wait)
{
Serial.println("INITIALIZING");
delay(1000);
current = millis();
}
Serial.println(" ");
delay(1000);
Serial.println(" READY TO MEASURE ");
delay(2000);
while (digitalRead(MeasureButton) == LOW)
{
if(K1 == LOW && K2 == LOW)
{J = 1; // SOMETHING VALUE
showMessage1();
i = 0;
delay(1000);
}if(K1 == LOW && K2 == HIGH)
J= 2; // SOMETHING VALUE
showMessage1();
i = 0;
delay(1000);
if(K1 == HIGH && K2 == LOW )
J= 3; // SOMETHING VALUE
showMessage1();
i = 0;
delay(1000);
if(K1 == HIGH && K2 == HIGH )
J= 4; // SOMETHING VALUE
showMessage1();
i = 0;
delay(1000);
}
while (digitalRead(ResetButton) == HIGH)
{
dsp.setCursor(1,0);
dsp.print(" ");
Serial.println(" ");
delay(1000);
dsp.setCursor(1,0);
dsp.print("RESETED");
Serial.println("RESETED");
delay(1000);
}
while (digitalRead(ResetButton) == LOW)
{
dsp.setCursor(1,0);
dsp.print(" ");
Serial.println(" ");
delay(1000);
dsp.setCursor(1,0);
dsp.print("PRESS MEASURE");
Serial.println("PRESS MEASURE");
delay(1000);
}
}
void showMessage1()
{
while(i<5)
{
A = analogRead(A0);
B = analogRead(A1);
C = analogRead(A2);
D = analogRead(A3);
N = analogRead(A4);
W1 = (A/N)*J; // J is another variable whose value is dependent on K selection values
W2 = (B/N)*J; // J is another variable whose value is dependent on K selection values
W3 = (C/N)*J; // J is another variable whose value is dependent on K selection values
W4 = (D/A)*J; // J is another variable whose value is dependent on K selection values
sumW1 = sumW1 + W1;
sumW2 = sumW2 + W2;
sumW3 = sumW3 + W3;
sumW4 = sumW4 + W4;
i++;
}
Serial.print("W1-");
Serial.print(sumW1);
Serial.print("W2-");
Serial.println(sumW2);
Serial.print("W3-");
Serial.print(sumW2);
Serial.print("W4-");
Serial.println(sumW4);
sumW1 = 0;
sumW2 = 0;
sumW3 = 0;
sumW4 = 0;
}
@Peouse Dutta, 👍0
1 ответ
Лучший ответ:
pinMode( K1, INPUT );
с
if(K1 == LOW && K2 == LOW)
не имеет смысла. K1
— это номер контакта. LOW
— это макрос для 0
(HIGH
для 1
). Вы сравниваете статический номер контакта со статическим числом.
Если K1
не равно 0, внутренняя часть этого оператора if никогда не может быть достигнута.
Вы имели в виду «если напряжение на выводе K1 низкое». Для этого вам нужно считать текущее значение вывода и проверить его.
Для этого вам необходимо заменить операторы типа if(K1 == LOW)
на if( digitalRead(K1) == LOW)
.
Я также хотел бы упомянуть, что для работы этой логики "LOW"/"HIGH" на кнопках должен быть подтягивающий контакт. Либо внешний, либо используйте INPUT_PULLUP
вместо INPUT
в pinMode
.
- Цифровой горшок с Arduino
- Как эмулировать аналоговый потенциометр с помощью ШИМ
- ЖК-дисплей странные символы
- Отправка цифрового сигнала с одного Arduino на другой для запуска события
- Отправка информации (например, строки) через цифровые контакты
- Как контролировать скорость двухпроводного вентилятора с помощью Arduino и только потенциометра?
- ЖК-дисплей не отображает текст
- Считанное значение не меняется при вращении потенциометра в Arduino?