Цифровой выбор для регулировки усиления не работает, вместо этого отображается 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;
    }

, 👍0


1 ответ


Лучший ответ:

4
 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.

,