Mega 2560 if...else ?'s

Hello All,

I am attempting to control 2 LED's independently using input from both an POT and a digital pulseIn count.

Using several if/else statements yields satisfactory results for the most part until... the design function is to start with both LEDs on, then after a certain threshold of pulseIn is met one LED turns off as long as the POT level is within a specified range.
Example

const int ssa = 10;
const int ssb = 11;
const int vss = 48;
const int tps = A0;
unsigned int vssval;
unsigned int tpsval;

void setup()
{
pinMode(ssa, OUTPUT);
pinMode(ssb, OUTPUT);
pinMode(vss, OUTPUT);
}

void loop()
{
if (vssval >= 0 && vssval <= 7100 && tpsval >= 150)
{
digitalWrite(ssa, HIGH);
digitalWrite(ssb, HIGH);
}
else if (vssval >= 0 && vssval <= 7100 && tpsval <= 149)
{
digitalWrite(ssa, LOW);
digitalWrite(ssb, HIGH);
}
etc...vssval from 0 to 38500 and tpsval from 0 to 1023 each with a step between values. 7100, 8600, etc & 0, 50, 100, etc respectively.
}

As the vssval increases ssa & ssb should change state depending on vssval vs. tpsval. What I'm getting is at a certain point of vssval the program reverts back to "default" ssa & ssb both high regardless of tpsval. If this isn't clear feel free to constructively criticize. I guess what Im asking is why would the LED control go awry after a certain point while the code is consistent throughout. Any help is appreciated, thank you in advance.

Bill

void loop()
{
if (vssval >= 0 && vssval <= 7100 && tpsval >= 150)

So, where do these values come from?

vssval comes from vss = pin 48 (signal supplied by function generator)
tpsval comes from POT connected to vref and gnd and A0.

the code I posted is an exact example leaving out the other 50 lines of if statements and the Serial.begin...etc for viewing on the serial monitor.

forgot to put ion the analogRead(tps) in the example sorry.

the code I posted is an exact example leaving out the other 50 lines of if statements an

Why did you leave out the lines where you actually furnish the values you're comparing?

Why did you leave out the code tags?

I am currently on my computer at work, I don't have a copy of my code nor do I recall all the vssval values off the top of my head so I will try to revisit this post tomorrow with a "working" version of my code.

Ok as promised here is to code I'm running though. Lemme know what you think I should do/change/etc... Thanks.
You will notice that several of the inputs are currently not implemented in the code, it is this way till I can debug the current code and will be enabled in final version just not necessary right now.

// this section names the input and output pins
const int vss = 48;  //sets pin 48 to vss signal
unsigned int vssval;  //declares vssval 
const int ssa = 10;  //sets pin 10 to ssa(shfit solenoid A
int ssast;
const int ssb = 11;  //sets pin 11 to ssb)shift solenoid B
int ssbst;
const int tps = A0;  //sets analog pin 0 to tps(throttle position sensor
unsigned int tpsval;  //declares tpsval
const int epc = 12;  //sets pin 12 to epc(electronic pressure sontrol solenoid
const int rev = 30;  //sets pin 30 to reverse switch
const int drv = 32;  //sets pin 32 to drive switch
const int thd = 34;  //sets pin 34 to third switch
const int scd = 36;  //sets in 36 to second switch
const int fst = 38;  //sets pin 38 to first switch
const int tcc = 40;  //sets pin 40 to tcc(torque converter clutch solenoid

void setup()
{
  Serial.begin(9600);
pinMode(ssa, OUTPUT);   // ssa-HIGH in first and fourth gears, LOW in second and third
pinMode(ssb, OUTPUT);   // ssb_HIGH in first and second gears, LOW in third and fourth
pinMode(vss, INPUT);    // vehivle speed sensor input  
pinMode(epc, OUTPUT);    //electronic pressure control solenoid control pin
pinMode(rev, INPUT);    // reverse switch input-tells arduino transmission is in reverse range and raises line pressure
pinMode(drv, INPUT);    // drive switch input-tells arduino trans is indrive range and allows for upshifting and downshifting 
pinMode(thd, INPUT);    // third switch input-used for manual shift mode
pinMode(scd, INPUT);    // second switch input-used for manual shift mode
pinMode(fst, INPUT);    // first switch input-used for manual shift mode
pinMode(tcc, OUTPUT);  //applied only in fourth gear
}
void loop()
{
  Serial.print("TPS % =");
 Serial.println(tpsval / 10.23);
 delay(175);
 Serial.print("PPM/VSS = ");
  Serial.println(vssval);
delay(175);
Serial.print("ssa = ");
Serial.println(ssast, HIGH);
  vssval = pulseIn(vss, HIGH);
tpsval = analogRead(tps);

analogWrite(epc, tpsval / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255

{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, HIGH);  //FIRST GEAR
} 
 // Upshift at 0-5% TPS
  if (vssval >= 5700 && vssval <= 7100 && tpsval <= 50)
  {
    digitalWrite(ssa, LOW);  //1-2 SHIFT
    digitalWrite(ssb, HIGH);
  }
 if (vssval >= 11400 && vssval <= 12900 && tpsval <= 50)
  {
    digitalWrite(ssa, LOW);  //2-3 SHIFT
    digitalWrite(ssb, LOW);
  }
   if (vssval >= 27200 && tpsval >= 0 && tpsval <= 50)
  {
    digitalWrite(ssa, HIGH);  //3-4 SHIFT
    digitalWrite(ssb, LOW);
  }
 // Upshift at 5-10% TPS
 //
  
  {
    digitalWrite(ssa, HIGH);  //FIRST GEAR
    digitalWrite(ssb, HIGH);
  }
   if (vssval >= 7100 && vssval <= 8600 && tpsval <= 100)
  {
    digitalWrite(ssa, LOW);
    digitalWrite(ssb, HIGH);  //1-2
}
if (vssval >= 12900 && vssval <= 14300 && tpsval <= 100)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);  // 2-3
}
if (vssval >= 28600 && tpsval >= 0 && tpsval <= 100)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
//Upshift at 10-15% TPS
//

{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, HIGH);
}
 if (vssval  >= 8600 && vssval <= 10000 && tpsval <= 150)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 14300 && vssval <= 15700 && tpsval <= 150)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 30100 && tpsval >= 0 && tpsval  <= 150)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 15-20% TPS
//
if (vssval >= 10000 && vssval <= 11400 && tpsval <= 200)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 15700 && vssval <= 17200 && tpsval <= 200)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 32900 && tpsval >= 151 && tpsval <= 200)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 20-25% TPS
//
if (vssval >= 11400 && vssval <= 17200 && tpsval <= 250)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 17200 && vssval <= 18600 && tpsval <= 250)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 34400 && tpsval >= 0 && tpsval <= 250)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 25-30% TPS
//
if (vssval >= 12900 && vssval <= 14300 && tpsval <= 300)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 18600 && vssval <= 20000 && tpsval <= 300)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 35800 && tpsval >= 0 && tpsval <= 300)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 30-35% TPS
//
if (vssval >= 14300 && vssval <= 15700 && tpsval <= 350)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 20000 && vssval <= 21500 && tpsval <= 350)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 37200 && tpsval >= 0 && tpsval <= 350)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 35-40% TPS
//
if (vssval >= 15700 && vssval <= 17200 && tpsval <= 400)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 21500 && vssval <= 22900 && tpsval <= 400)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 38700&& tpsval >= 0 && tpsval <= 400)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 40-45% TPS
//
if (vssval >= 17200 && vssval <= 18600 && tpsval <= 450)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 22900 && vssval <= 24300 && tpsval <= 450)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW); 
}
if (vssval >= 40100 && tpsval >= 0 && tpsval <= 450)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Ushift at 45-50% TPS
//
if (vssval >= 18600 && vssval <= 20000 && tpsval <= 500)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 24300 && vssval <= 25800 && tpsval <= 500)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 41500 && tpsval >= 0 && tpsval <= 500)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 50-55% TPS
//
if (vssval >= 20000 && vssval <= 21500 && tpsval <= 550)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 27200 && vssval <= 28600 && tpsval <= 550)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 43000 && tpsval >= 0 && tpsval <= 550)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 55-60% TPS
//
if (vssval >= 21500 && vssval <= 22900 && tpsval <= 600)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 28600 && vssval <= 30100 && tpsval <= 600)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 44400 && tpsval >= 0 && tpsval <= 600)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
// Upshift at 60-65% TPS
//
if (vssval >= 22900 && vssval <= 24300 && tpsval <= 650)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, HIGH);
}
if (vssval >= 30100 && vssval <= 31500 && tpsval <= 650)
{
  digitalWrite(ssa, LOW);
  digitalWrite(ssb, LOW);
}
if (vssval >= 45800 && tpsval >= 0 && tpsval <= 650)
{
  digitalWrite(ssa, HIGH);
  digitalWrite(ssb, LOW);
}
}

Bill