【问题标题】:how to solve else/if statement issue?如何解决 else/if 语句问题?
【发布时间】:2022-12-07 03:00:25
【问题描述】:
#include <Wire.h>
#include "DFRobot_LCD.h"

DFRobot_LCD lcd(16, 2); //16 characters and 2 lines of show

#define PH_PIN 25 
float voltage,phvalue,temperature = 25;

float acidVoltage =  (1990); //buffer solution at 4.o 
float neutralVoltage = (1389);   //buffer solution at 7.o 

const int Sensor_MINvalue1 = 3.8; // +-0.5 from ph 4.0
const int Sensor_MAXvalue1 = 4.1;

const int Sensor_MINvalue2 = 6.8; // +-0.5 from ph 7.0
const int Sensor_MAXvalue2 = 7.1;

const int Sensor_MINvalue3 = 9.8; // +-0.5 from ph 10.0
const int Sensor_MAXvalue3 = 10.1;


void breath(unsigned char color){
     for(int i=0; i<255; i++){
        lcd.setPWM(color, i);
        delay(5);
    }

    delay(500);
    for(int i=254; i>=0; i--){
        lcd.setPWM(color, i);
        delay(1000);
    }

    delay (300);
}

void setup()
{
    Serial.begin(11520);
    // LCD Begin //
   lcd.init();
   lcd.setCursor(4,0);
   lcd.print("Welcome");
   delay(3000);
   lcd.clear();

   lcd.setCursor(3,0);
   lcd.print("Reading PH");
    delay(5000);
   lcd.clear();

  lcd.setCursor(3,0);
   lcd.print("Please  Wait");
   delay(5000);
   lcd.clear();

   
}

void loop()
{
    static unsigned long timepoint = millis();
    if(millis()-timepoint>1000U){
      
      timepoint = millis();
      // timepoint = read temperature 

      voltage = analogRead (PH_PIN)/4095.0*3300; 

      float slope = (7.0-4.0)/((neutralVoltage-1500)/30 - (acidVoltage-1500)/3.0);
      float intercept = 7.0 - slope*(neutralVoltage-1500)/3.0;

      phvalue = slope*(voltage-1500)/3.0 + intercept;   // y=k*x + b [formula]

    if( phvalue < Sensor_MAXvalue1 && phvalue > Sensor_MINvalue1 ){    //if( phvalue < 4.1 && phvalue > 3.8 )
    
      Serial.print("Voltage:");
      Serial.print(voltage,1);
      Serial.print("PH:");
      Serial.println(phvalue,2);

      //LCD setting 16x2
      lcd.setCursor(0,0);
      lcd.print("PH :     ");
      lcd.print(phvalue,2);

      lcd.setCursor(0,1);
      lcd.print("Volt :     ");
      lcd.print(voltage/1000,2);

      if( phvalue < Sensor_MINvalue1 && phvalue > Sensor_MAXvalue1 ){
        lcd.setCursor(3,0);
        lcd.print("Dosing is required");
        delay(5000);
        lcd.clear();
      }
    }
    else if (phvalue < Sensor_MAXvalue2 && phvalue > Sensor_MINvalue2){ //if( phvalue < 7.1 && phvalue > 6.8 )

      Serial.print("Voltage:");
      Serial.print(voltage,1);
      Serial.print("PH:");
      Serial.println(phvalue,2);

      //LCD setting 16x2
      lcd.setCursor(0,0);
      lcd.print("PH :     ");
      lcd.print(phvalue,2);

      lcd.setCursor(0,1);
      lcd.print("Volt :     ");
      lcd.print(voltage/1000,2);

      if( phvalue < Sensor_MINvalue2 && phvalue > Sensor_MAXvalue2 ){
        lcd.setCursor(3,0);
        lcd.print("Dosing is required");
        delay(5000);
        lcd.clear();
      }

    }  
    else (phvalue < Sensor_MAXvalue3 && phvalue > Sensor_MINvalue3); { //if( phvalue < 10.1 && phvalue > 9.8 )

      Serial.print("Voltage:");
      Serial.print(voltage,1);
      Serial.print("PH:");
      Serial.println(phvalue,2);

      //LCD setting 16x2
      lcd.setCursor(0,0);
      lcd.print("PH :     ");
      lcd.print(phvalue,2);

      lcd.setCursor(0,1);
      lcd.print("Volt :     ");
      lcd.print(voltage/1000,2);

      if( phvalue < Sensor_MINvalue3 && phvalue > Sensor_MAXvalue3 ){
        lcd.setCursor(3,0);
        lcd.print("Dosing is required");
        delay(5000);
        lcd.clear();
      }
      }
    }

} 

这是我的代码,在应用它不起作用的代码后,我正在尝试读取一系列值,以便它读取 ph 值并向我显示这些值,例如如果 ph = 6.8-7.1 它将显示ph,如果该值低于或高于它,它将打印“需要加药,但现在不显示”。我不确定我是否应该创建一个 main 以便我可以分离 if, else if, esle statemant

【问题讨论】:

  • 调试提示:从所有间隔中选择一些数字,替换,然后它应该很明显为什么它不起作用。

标签: arduino arduino-uno arduino-ide arduino-esp32


【解决方案1】:
if( phvalue < Sensor_MINvalue1 && phvalue > Sensor_MAXvalue1 )

phvalue 怎么能同时小于你的 min 和大于你的 max 呢?

你应该在这里使用逻辑或||

同为

if( phvalue < Sensor_MINvalue2 && phvalue > Sensor_MAXvalue2 )

if( phvalue < Sensor_MINvalue3 && phvalue > Sensor_MAXvalue3 )

【讨论】:

  • 然而,即使使用 || 它仍然不会做任何事情因为它被if (phvalue &lt; Sensor_MAXvalue1 &amp;&amp; phvalue &gt; Sensor_MINvalue1排除了
猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2013-12-07
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多