7-segment calculating problem

Hi all !

I am currently trying to make a 7-segment 2 digit display that can display numbers from 00 - 99. I found a code that can show numbers from 0-20 and the display functioned fine. Then I wanted to show on the display value from a potentiometer. I added and changed the code the code and it works quite well for numbers 80 - 99... everything else is weird.

int pin1 = 2;
int pin2 = 3;                                    //                            --6--
int pin3 = 4;                                    //                         5 |     | 7
int pin4 = 5;                                    //                           |--4--|
int pin5 = 6;                                    //                         1 |     | 3
int pin6 = 7;                                    //                            --2--
int pin7 = 8;
int gnd1 = 11;                                 //                          gnd1 is display 1's gnd
int gnd2 = 9;                                   //                          gnd2 is display 2's gnd
int timer = 500;                               //   A timer, to run the for loop 500 times, which turns out as 1 second.
int sens1 = 0;                                  //   Analog measurement pin
int gildi = 0;
int gildi1 = 0;
int fyrritala = 0;                              //  The first 7-segment display
int seinnitala = 0;                             //  The second 7-segment display
//int gamla = 0;

void setup(){
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);           //The following sets up all of the pins for use.
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin7, OUTPUT);
  pinMode(gnd1, OUTPUT);
  pinMode(gnd2, OUTPUT);
  pinMode(sens1, INPUT);
  
  Serial.begin(9600);
}
void loop()
{
  gildi1 = analogRead(sens1);
  int gildi = map(gildi1, 0, 1023, 0, 99);
  
  Serial.println(gildi);
  
  if (0 <= gildi < 10){
   fyrritala = 0;
   seinnitala = gildi; 
  }

  if (10 <= gildi < 20){
   fyrritala = 1;
   seinnitala = gildi - 10; 
  }

  if (20 <= gildi < 30){
   fyrritala = 2;
   seinnitala = gildi - 20; 
  }


  if (30 <= gildi < 40){
   fyrritala = 3;
   seinnitala = gildi - 30; 
  }  
  
  if (40 <= gildi < 50){
   fyrritala = 4;
   seinnitala = gildi - 40; 
  }
  
  if (50 <= gildi < 60){
   fyrritala = 5;
   seinnitala = gildi - 50; 
  }
  
  if (60 <= gildi < 70){
   fyrritala = 6;
   seinnitala = gildi - 60; 
  }
  
  if (70 <= gildi < 80){
   fyrritala = 7;
   seinnitala = gildi - 70; 
  }
  
  if (80 <= gildi < 90){
   fyrritala = 8;
   seinnitala = gildi - 80; 
  }
  
  if (90 <= gildi){
   fyrritala = 9;
   seinnitala = gildi - 90; 
  }
  Serial.println(fyrritala);
  Serial.println(seinnitala);
  
  for (int i=0; i<timer; i++){
    
    digitalWrite(gnd1, B0);
    if (fyrritala == 0){
      tala0();
    }
    if (fyrritala == 1){
      tala1();
    }
    if (fyrritala == 2){
      tala2();
    }    
    if (fyrritala == 3){
      tala3();
    }    
    if (fyrritala == 4){
      tala4();
    }    
    if (fyrritala == 5){
      tala5();
    }    
    if (fyrritala == 6){
      tala6();
    }    
    if (fyrritala == 7){
      tala7();
    }    
    if (fyrritala == 8){
      tala8();
    }    
    if (fyrritala == 9){
      tala9();
    }
    
       delay(0.5);
       digitalWrite(gnd2, B0);
       digitalWrite(gnd1, B1);
      
      if (seinnitala == 0){
      tala0();
      }
      if (seinnitala == 1){
      tala1();
      }
      if (seinnitala == 2){
      tala2();
      }
      if (seinnitala == 3){
      tala3();
      }
      if (seinnitala == 4){
      tala4();
      }
      if (seinnitala == 5){
      tala5();
      }
      if (seinnitala == 6){
      tala6();
      }
      if (seinnitala == 7){
      tala7();
      }
      if (seinnitala == 8){
      tala8();
      }
      if (seinnitala == 9){
      tala9();
      }
   
   delay(0.5);
   digitalWrite(gnd2, B1);
     

  }
     fyrritala = 0;
     seinnitala = 0;
  

  }
  
  void tala0(){                //Writes the number 0 to the display
   digitalWrite(pin1, B1);
   digitalWrite(pin2, B1);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B0);
   digitalWrite(pin5, B1);
   digitalWrite(pin6, B1);
   digitalWrite(pin7, B1);
}
  void tala1(){
   digitalWrite(pin1, B0);
   digitalWrite(pin2, B0);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B0);
   digitalWrite(pin5, B0);
   digitalWrite(pin6, B0);
   digitalWrite(pin7, B1);
  }
   
   void tala2(){
   digitalWrite(pin1, B1);
   digitalWrite(pin2, B1);
   digitalWrite(pin3, B0);
   digitalWrite(pin4, B1);
   digitalWrite(pin5, B0);
   digitalWrite(pin6, B1);
   digitalWrite(pin7, B1);
  }
   
    void tala3(){
   digitalWrite(pin1, B0);
   digitalWrite(pin2, B1);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B1);
   digitalWrite(pin5, B0);
   digitalWrite(pin6, B1);
   digitalWrite(pin7, B1);
  }
   
    void tala4(){
   digitalWrite(pin1, B0);
   digitalWrite(pin2, B0);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B1);
   digitalWrite(pin5, B1);
   digitalWrite(pin6, B0);
   digitalWrite(pin7, B1);
  }
   
    void tala5(){
   digitalWrite(pin1, B0);
   digitalWrite(pin2, B1);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B1);
   digitalWrite(pin5, B1);
   digitalWrite(pin6, B1);
   digitalWrite(pin7, B0);
  }
  
    void tala6(){
   digitalWrite(pin1, B1);
   digitalWrite(pin2, B1);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B1);
   digitalWrite(pin5, B1);
   digitalWrite(pin6, B1);
   digitalWrite(pin7, B0);
  }
  
    void tala7(){
   digitalWrite(pin1, B0);
   digitalWrite(pin2, B0);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B0);
   digitalWrite(pin5, B0);
   digitalWrite(pin6, B1);
   digitalWrite(pin7, B1);
  }
  
    void tala8(){
   digitalWrite(pin1, B1);
   digitalWrite(pin2, B1);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B1);
   digitalWrite(pin5, B1);
   digitalWrite(pin6, B1);
   digitalWrite(pin7, B1);
  }
  
    void tala9(){
   digitalWrite(pin1, B0);
   digitalWrite(pin2, B0);
   digitalWrite(pin3, B1);
   digitalWrite(pin4, B1);
   digitalWrite(pin5, B1);
   digitalWrite(pin6, B1);
   digitalWrite(pin7, B1);
  }

It is like it doesn´t matter what numbers there are below 80, the computer always subtracts 80 from what ever the number is. Serial shows me that for the number 79, the first digit is 8 and the second is -1. For the number 63 the first is 8 and second -17

What is wrong with my logic ?

if (0 <= gildi < 10){

This is NOT the way to determine if a value is within a range. C does not have an operator to perform this test.

Instead, you must perform two comparisons.

if ((0 <= gildi) && (gildi < 10)){

So would an if() statement like this work?

if (val1 >= val2 && val3 && val4)
{
}

It works in the sense that it compiles and runs. I suspect it does not do what you want, though.

Essentially, it becomes this...

if ( (val1 >= val2) && (val3 != 0) && (val4 != 0) )
{
}

Code:

if (0 <= gildi < 10){

This is NOT the way to determine if a value is within a range. C does not have an operator to perform this test.

Instead, you must perform two comparisons.

Code:

if ((0 <= gildi) && (gildi < 10)){

Yep ! That did the trick. Thanks :slight_smile: