Go Down

Topic: Why is this true? (Read 304 times) previous topic - next topic

filipsons11

Dec 13, 2019, 02:29 am Last Edit: Dec 13, 2019, 02:48 am by filipsons11
Trying to understand what I did wrong.
Using a ESP32 dev kit 1
keeps thinking the Cfsrvalue value is high enough to make the "if" statement true.

thanks.

Code: [Select]

const int Carfsr = 34;  //pin link for car side FSR
const int Phonefsr = 35;  //pin link for phone side FSR
const int QiwirelessI = 32; //pink link for Qi wireless chearger
const int Threeway = 27;  //pin link for 3 way electronic valve
const int PumpL = 26; // pin link for Pump
const int Mswitch = 25; // manual switch

int Cfsrvalue = 0;  // setting value for car side to start at 0
int Pfsrvalue = 0;  // setting value for phone side to start at 0
int ManualS;
int QwirelessA;

void setup()
{
 Serial.begin(115200);
 delay(1000);

 // Setting pins I/O mode
 pinMode(Threeway, OUTPUT);
 pinMode(PumpL, OUTPUT);
 pinMode(Mswitch, INPUT);
 pinMode(QiwirelessI, INPUT);
 pinMode(Carfsr, INPUT);
 pinMode(Phonefsr, INPUT);
 
 // Setting pin state
 digitalWrite(Threeway, LOW);
 digitalWrite(PumpL, LOW);
 digitalWrite(Mswitch, LOW);
 digitalWrite(QiwirelessI, HIGH);


 int adcAttachPin(Carfsr);
}

void loop()

{

 // Manual switch reading
 ManualS = digitalRead(Mswitch);

 // Qi wireless charger current sensor trigger reading
 QwirelessA = digitalRead(QiwirelessI);

 // Presure reading from car side
 Cfsrvalue = analogRead(Carfsr);

 // Presure reading from phone side
 Pfsrvalue = analogRead(Phonefsr);




// if both manual switch and phone is on 
if(  ManualS == HIGH && QwirelessA == LOW)
{
       digitalWrite(Threeway, HIGH);
       delay(10);
       digitalWrite(PumpL, HIGH);     
}

// manual switch pump trigger
if( ManualS == HIGH )
{
       digitalWrite(Threeway, HIGH);
       delay(10);
       digitalWrite(PumpL, HIGH);
}
if( ManualS == LOW )
{
       digitalWrite(Threeway, LOW);
       delay(10);
       digitalWrite(PumpL, LOW);
}

// wireless charger current senese pump trigger
if (QwirelessA == LOW)
{
       digitalWrite(PumpL, HIGH); 
}


// on condtions for car presure
if( Cfsrvalue >= 3000 || Cfsrvalue <= 3800)
{
       digitalWrite(Threeway,HIGH);
       digitalWrite(PumpL, HIGH);   
       delay(1000);
       Serial.println(Cfsrvalue);
}



Serial.println(Cfsrvalue);

Serial.println(ManualS);
Serial.println(QwirelessA);


}

Klaus_K

You are testing for smaller than or equal 3000.

filipsons11

sorry that was something I was trying out, look again.


DrAzzy

 analogRead only returns values in the range 0-1023

Print the values of those variables that you're getting from analogRead for debugging purposes.
ATTinyCore and megaTinyCore for all ATtiny, DxCore for DA/DB-series! github.com/SpenceKonde
http://drazzy.com/package_drazzy.com_index.json
ATtiny breakouts, mosfets, awesome prototyping board in my store http://tindie.com/stores/DrAzzy

filipsons11

analogRead only returns values in the range 0-1023

Print the values of those variables that you're getting from analogRead for debugging purposes.
"Reading an analog value with the ESP32 means you can measure varying voltage levels between 0 V and 3.3 V.

The voltage measured is then assigned to a value between 0 and 4095, in which 0 V corresponds to 0, and 3.3 V corresponds to 4095. Any voltage between 0 V and 3.3 V will be given the corresponding value in between."

https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/

I followed this website guide.

Klaus_K

#5
Dec 13, 2019, 03:15 am Last Edit: Dec 13, 2019, 03:15 am by Klaus_K
Place the print before the if statement to make sure you know what the A/D converter results are.

david_2018

Is this the section of code you are asking about?
Code: [Select]

// on condtions for car presure
if( Cfsrvalue >= 3000 || Cfsrvalue <= 3800)
{
       digitalWrite(Threeway,HIGH);
       digitalWrite(PumpL, HIGH);  
       delay(1000);
       Serial.println(Cfsrvalue);
}


The if statement will be true if Cfsrvalue is >= 3000 OR Cfsrvalue is <= 3800.  How can that ever be false?  One or the other condition will always be true, for values from 3000 to 3800 both will be true.  For the if statement to be false, both conditions must be false.

ToddL1962

It looks like you were intending to call this function but what you really did was declare a function prototype so this line of code does nothing.

Code: [Select]
int adcAttachPin(Carfsr);

TomGeorge

Hi,
I think you wanted;

Code: [Select]
// on condtions for car presure
if( Cfsrvalue >= 3000 && Cfsrvalue <= 3800)
{
       digitalWrite(Threeway,HIGH);
       digitalWrite(PumpL, HIGH);  
       delay(1000);
       Serial.println(Cfsrvalue);
}

&&    AND,   not ||   OR, for Cfsrvalue to be true between   3000 and 3800.

Tom.... :)
Everything runs on smoke, let the smoke out, it stops running....

filipsons11

Ahh yes I see now, looks like this fixed the issue.

and yes the int adcAttachPin code was for testing as I thought it was conflicting for the pin, and I read that command clear all others.

Thanks

this helped immensely 

Go Up