Rotary encoder bug

When i turn the rotary encoder it should up the temperature by five degrees but it works a little buggy because most of the time it ads ten degrees instead of five and sometimes it jumps down instead of up. And it is a software bug because i have tried different rotary encoders and they all give the same problem.

#include "Arduino.h"
#include "TM1637Display.h"
#include "max6675.h"

#define switchSolder  5
#define switchHeat    6
#define fan_switch    A1
#define outputA       11
#define outputB       12
#define button        13
#define fanPin        3
#define relay         A2
#define CLK1          A4
#define DIO1          A3
#define CLK2          A4
#define DIO2          A5
#define ktcSO         10
#define ktcCS         9
#define ktcCLK        8

int period = 1000;
int period2 = 2500;
int period3 = 500;
int solderTempSet = 0;
int solderTempNow = 0;
int buttonState = 0;
int heatTempSet = 0;
int heatTempNow = 0;
int fanDisplay = 0;
int fanSet = 0;
int aState;
int aLastState;
int v;

unsigned long time_now = 0;
unsigned long time_now2 = 0;
unsigned long time_now3 = 0;
unsigned long time_now4 = 0;

uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };

TM1637Display display1(CLK1, DIO1);
TM1637Display display2(CLK2, DIO2);
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
  
  void setup() { 
    pinMode (outputA,INPUT);
    pinMode (outputB,INPUT);  
    pinMode (switchSolder, INPUT);
    pinMode (switchHeat, INPUT);
    pinMode (fan_switch, INPUT);
    pinMode (button, INPUT);
    pinMode (fanPin, OUTPUT);
   
    Serial.begin (9600);
      aLastState = digitalRead(outputA);
       display1.setBrightness(0x0f);   
} 

  void loop() { 
      display2.setBrightness(0x0f);
      if (buttonState == 0){
     if (digitalRead(switchHeat) != HIGH){
    if (digitalRead(switchSolder) != HIGH){
     heatTempSet = 0;
     solderTempSet = 0;  
     fanDisplay = 0;
     fanSet = 0;
     analogWrite(fanPin, fanSet);
     off();
    }
   }
  }
  
  if (millis() >= period2 + time_now2){
    buttonState = 0; 
    display1.setBrightness(0x0f);   
  }
  
  if (buttonState == 1){
    fan();
  }
   if (buttonState == 0){ 
  if (digitalRead(switchSolder) == HIGH){
  heatTempSet = 0;
  digitalWrite(relay, LOW);
  solder();
    }
 }
   if (buttonState == 0){
  if (digitalRead(switchHeat) == HIGH ){
  solderTempSet = 0;
  digitalWrite(relay, HIGH);
  heat();
    }
 }
}

void fan(){

 
  display1.showNumberDec(fanDisplay); 
  if (millis() >= period3 + time_now4){
    display1.setBrightness(7);
    time_now4 = millis() + 1000;
    time_now3 = millis();
  } 
  if (millis() >= period3 + time_now3){
    display1.setBrightness(1);
    time_now3 = millis() + 1000;
    time_now4 = millis();
  }
  
  aState = digitalRead(outputA);
     
      if (aState != aLastState){
       time_now2 = millis();     
        if (digitalRead(outputB) != aState) {
          if (fanDisplay <= 90){
            fanDisplay = fanDisplay + 10;
            fanSet = fanSet + 25.5;
          }
        } else {
          if (fanDisplay >= 10){
            fanDisplay = fanDisplay - 10;
            fanSet = fanSet - 25.5;
            }
          }
      } 
      analogWrite(fanPin, fanSet);   
      aLastState = aState;
      
    if (fanDisplay == 0){
      analogWrite(fanPin, LOW);
  }

   
    if (digitalRead(button) == LOW){
      buttonState = 0;
      delay(200);
    } 
}

void heat(){
 display1.showNumberDec(heatTempSet);
 if (digitalRead(button) == LOW){
  buttonState = 1;
  time_now2 = millis();
  delay(200);
 }
 
  if (digitalRead(fan_switch) == LOW){
    if (v == 1);{
      digitalWrite(fan, LOW);
      v = 0;
    }
  }
  
  else{
      digitalWrite(fan, HIGH);
      v = 1;
  }
  
  
     aState = digitalRead(outputA);
     
      if (aState != aLastState){     
        if (digitalRead(outputB) != aState) {
          if (heatTempSet <= 345){
            heatTempSet = heatTempSet + 5;
          }
        } else {
          if (heatTempSet >= 5){
            heatTempSet = heatTempSet - 5;}
          }
          
    Serial.print("Heat Temp Set: ");
    display1.showNumberDec(heatTempSet);
    Serial.println(heatTempSet);
   } 
   
   if(millis() >= time_now + period){
    time_now = millis();
      heatTempNow = ktc.readCelsius();
      Serial.print("Heat Temp Now: ");
      display2.showNumberDec(heatTempNow);
      Serial.println(heatTempNow);
   }
    aLastState = aState; 
}

void off(){
    display1.setSegments(data);
    display2.setSegments(data);
       aState = digitalRead(outputA);
      if (aState != aLastState){     
        if (digitalRead(outputB) != aState) {
           Serial.println("off");
        } else {
           Serial.println("off");
          }
   } 
    aLastState = aState; 
}

void solder(){
    display1.showNumberDec(solderTempSet);
      aState = digitalRead(outputA);
      if (aState != aLastState){     
        if (digitalRead(outputB) != aState) {
          if (solderTempSet <= 345){
            solderTempSet = solderTempSet + 5;
          }
        } else {
          if (solderTempSet >= 5){
            solderTempSet = solderTempSet - 5;}
          }
    Serial.print("Solder Temp Set: ");

    Serial.println(solderTempSet);
   } 
  if(millis() >= time_now + period){
  time_now = millis();
   solderTempNow = ktc.readCelsius();
    Serial.print("Solder Temp Now: ");
    display2.showNumberDec(solderTempNow);
    Serial.println(solderTempNow);
   
  }
   aLastState = aState; 
}

Video www.timzoet.nl/bug.mp4

if (v == 1);{Oops.

Please use the IDE's auto-format tool before posting your corrected code.

Sorry, should be good now.

timzoet:
Sorry, should be good now.

?

I used the auto format tool and reuploaded the code

timzoet:
I used the auto format tool and reuploaded the code

Where?

I edited the original post

timzoet:
I edited the original post

Nope.

timzoet:
I edited the original post

It's best not to show changes that way. It's better to make a new post and leave the original post unchanged. That process leaves an "audit trail" that the reader can follow. It may be less important on the simple issue presented here, but more valuable when the bugs are more numerous or complex.

good now?

#include "Arduino.h"
#include "TM1637Display.h"
#include "max6675.h"

#define switchSolder  5
#define switchHeat    6
#define fan_switch    A1
#define outputA       11
#define outputB       12
#define button        13
#define fanPin        3
#define relay         A2
#define CLK1          A4
#define DIO1          A3
#define CLK2          A4
#define DIO2          A5
#define ktcSO         10
#define ktcCS         9
#define ktcCLK        8

int period = 1000;
int period2 = 2500;
int period3 = 500;
int solderTempSet = 0;
int solderTempNow = 0;
int buttonState = 0;
int heatTempSet = 0;
int heatTempNow = 0;
int fanDisplay = 0;
int fanSet = 0;
int aState;
int aLastState;
int v;

unsigned long time_now = 0;
unsigned long time_now2 = 0;
unsigned long time_now3 = 0;
unsigned long time_now4 = 0;

uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };

TM1637Display display1(CLK1, DIO1);
TM1637Display display2(CLK2, DIO2);
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

void setup() {
  pinMode (outputA, INPUT);
  pinMode (outputB, INPUT);
  pinMode (switchSolder, INPUT);
  pinMode (switchHeat, INPUT);
  pinMode (fan_switch, INPUT);
  pinMode (button, INPUT);
  pinMode (fanPin, OUTPUT);

  Serial.begin (9600);
  aLastState = digitalRead(outputA);
  display1.setBrightness(0x0f);
}

void loop() {
  display2.setBrightness(0x0f);
  if (buttonState == 0) {
    if (digitalRead(switchHeat) != HIGH) {
      if (digitalRead(switchSolder) != HIGH) {
        heatTempSet = 0;
        solderTempSet = 0;
        fanDisplay = 0;
        fanSet = 0;
        analogWrite(fanPin, fanSet);
        off();
      }
    }
  }

  if (millis() >= period2 + time_now2) {
    buttonState = 0;
    display1.setBrightness(0x0f);
  }

  if (buttonState == 1) {
    fan();
  }
  if (buttonState == 0) {
    if (digitalRead(switchSolder) == HIGH) {
      heatTempSet = 0;
      digitalWrite(relay, LOW);
      solder();
    }
  }
  if (buttonState == 0) {
    if (digitalRead(switchHeat) == HIGH ) {
      solderTempSet = 0;
      digitalWrite(relay, HIGH);
      heat();
    }
  }
}

void fan() {


  display1.showNumberDec(fanDisplay);
  if (millis() >= period3 + time_now4) {
    display1.setBrightness(7);
    time_now4 = millis() + 1000;
    time_now3 = millis();
  }
  if (millis() >= period3 + time_now3) {
    display1.setBrightness(1);
    time_now3 = millis() + 1000;
    time_now4 = millis();
  }

  aState = digitalRead(outputA);

  if (aState != aLastState) {
    time_now2 = millis();
    if (digitalRead(outputB) != aState) {
      if (fanDisplay <= 90) {
        fanDisplay = fanDisplay + 10;
        fanSet = fanSet + 25.5;
      }
    } else {
      if (fanDisplay >= 10) {
        fanDisplay = fanDisplay - 10;
        fanSet = fanSet - 25.5;
      }
    }
  }
  analogWrite(fanPin, fanSet);
  aLastState = aState;

  if (fanDisplay == 0) {
    analogWrite(fanPin, LOW);
  }


  if (digitalRead(button) == LOW) {
    buttonState = 0;
    delay(200);
  }
}

void heat() {
  display1.showNumberDec(heatTempSet);
  if (digitalRead(button) == LOW) {
    buttonState = 1;
    time_now2 = millis();
    delay(200);
  }

  if (digitalRead(fan_switch) == LOW) {
    if (v == 1); {
      digitalWrite(fan, LOW);
      v = 0;
    }
  }

  else {
    digitalWrite(fan, HIGH);
    v = 1;
  }


  aState = digitalRead(outputA);

  if (aState != aLastState) {
    if (digitalRead(outputB) != aState) {
      if (heatTempSet <= 345) {
        heatTempSet = heatTempSet + 5;
      }
    } else {
      if (heatTempSet >= 5) {
        heatTempSet = heatTempSet - 5;
      }
    }

    Serial.print("Heat Temp Set: ");
    display1.showNumberDec(heatTempSet);
    Serial.println(heatTempSet);
  }

  if (millis() >= time_now + period) {
    time_now = millis();
    heatTempNow = ktc.readCelsius();
    Serial.print("Heat Temp Now: ");
    display2.showNumberDec(heatTempNow);
    Serial.println(heatTempNow);
  }
  aLastState = aState;
}


void off() {
  display1.setSegments(data);
  display2.setSegments(data);
  aState = digitalRead(outputA);
  if (aState != aLastState) {
    if (digitalRead(outputB) != aState) {
      Serial.println("off");
    } else {
      Serial.println("off");
    }
  }
  aLastState = aState;
}

void solder() {
  display1.showNumberDec(solderTempSet);
  aState = digitalRead(outputA);
  if (aState != aLastState) {
    if (digitalRead(outputB) != aState) {
      if (solderTempSet <= 345) {
        solderTempSet = solderTempSet + 5;
      }
    } else {
      if (solderTempSet >= 5) {
        solderTempSet = solderTempSet - 5;
      }
    }
    Serial.print("Solder Temp Set: ");

    Serial.println(solderTempSet);
  }
  if (millis() >= time_now + period) {
    time_now = millis();
    solderTempNow = ktc.readCelsius();
    Serial.print("Solder Temp Now: ");
    display2.showNumberDec(solderTempNow);
    Serial.println(solderTempNow);

  }
  aLastState = aState;
}

if (v == 1); No.

Whats wrong with that? ok it's unnecessary and i forgot to take it out but i dont see the problem.

#include "Arduino.h"
#include "TM1637Display.h"
#include "max6675.h"

#define switchSolder  5
#define switchHeat    6
#define fan_switch    A1
#define outputA       11
#define outputB       12
#define button        13
#define fanPin        3
#define relay         A2
#define CLK1          A4
#define DIO1          A3
#define CLK2          A4
#define DIO2          A5
#define ktcSO         10
#define ktcCS         9
#define ktcCLK        8

int period = 1000;
int period2 = 2500;
int period3 = 500;
int solderTempSet = 0;
int solderTempNow = 0;
int buttonState = 0;
int heatTempSet = 0;
int heatTempNow = 0;
int fanDisplay = 0;
int fanSet = 0;
int aState;
int aLastState;

unsigned long time_now = 0;
unsigned long time_now2 = 0;
unsigned long time_now3 = 0;
unsigned long time_now4 = 0;

uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };

TM1637Display display1(CLK1, DIO1);
TM1637Display display2(CLK2, DIO2);
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

void setup() {
  pinMode (outputA, INPUT);
  pinMode (outputB, INPUT);
  pinMode (switchSolder, INPUT);
  pinMode (switchHeat, INPUT);
  pinMode (fan_switch, INPUT);
  pinMode (button, INPUT);
  pinMode (fanPin, OUTPUT);

  Serial.begin (9600);
  aLastState = digitalRead(outputA);
  display1.setBrightness(0x0f);
}

void loop() {
  display2.setBrightness(0x0f);
  if (buttonState == 0) {
    if (digitalRead(switchHeat) != HIGH) {
      if (digitalRead(switchSolder) != HIGH) {
        heatTempSet = 0;
        solderTempSet = 0;
        fanDisplay = 0;
        fanSet = 0;
        analogWrite(fanPin, fanSet);
        off();
      }
    }
  }

  if (millis() >= period2 + time_now2) {
    buttonState = 0;
    display1.setBrightness(0x0f);
  }

  if (buttonState == 1) {
    fan();
  }
  if (buttonState == 0) {
    if (digitalRead(switchSolder) == HIGH) {
      heatTempSet = 0;
      digitalWrite(relay, LOW);
      solder();
    }
  }
  if (buttonState == 0) {
    if (digitalRead(switchHeat) == HIGH ) {
      solderTempSet = 0;
      digitalWrite(relay, HIGH);
      heat();
    }
  }
}


void fan() {


  display1.showNumberDec(fanDisplay);
  if (millis() >= period3 + time_now4) {
    display1.setBrightness(7);
    time_now4 = millis() + 1000;
    time_now3 = millis();
  }
  if (millis() >= period3 + time_now3) {
    display1.setBrightness(1);
    time_now3 = millis() + 1000;
    time_now4 = millis();
  }

  aState = digitalRead(outputA);

  if (aState != aLastState) {
    time_now2 = millis();
    if (digitalRead(outputB) != aState) {
      if (fanDisplay <= 90) {
        fanDisplay = fanDisplay + 10;
        fanSet = fanSet + 25.5;
      }
    } else {
      if (fanDisplay >= 10) {
        fanDisplay = fanDisplay - 10;
        fanSet = fanSet - 25.5;
      }
    }
  }
  analogWrite(fanPin, fanSet);
  aLastState = aState;

  if (fanDisplay == 0) {
    analogWrite(fanPin, LOW);
  }


  if (digitalRead(button) == LOW) {
    buttonState = 0;
    delay(200);
  }
}


void heat() {
  display1.showNumberDec(heatTempSet);
  if (digitalRead(button) == LOW) {
    buttonState = 1;
    time_now2 = millis();
    delay(200);
  }

  aState = digitalRead(outputA);

  if (aState != aLastState) {
    if (digitalRead(outputB) != aState) {
      if (heatTempSet <= 345) {
        heatTempSet = heatTempSet + 5;
      }
    } else {
      if (heatTempSet >= 5) {
        heatTempSet = heatTempSet - 5;
      }
    }

    Serial.print("Heat Temp Set: ");
    display1.showNumberDec(heatTempSet);
    Serial.println(heatTempSet);
  }

  if (millis() >= time_now + period) {
    time_now = millis();
    heatTempNow = ktc.readCelsius();
    Serial.print("Heat Temp Now: ");
    display2.showNumberDec(heatTempNow);
    Serial.println(heatTempNow);
  }
  aLastState = aState;
}


void off() {
  display1.setSegments(data);
  display2.setSegments(data);
  aState = digitalRead(outputA);
  if (aState != aLastState) {
    if (digitalRead(outputB) != aState) {
      Serial.println("off");
    } else {
      Serial.println("off");
    }
  }
  aLastState = aState;
}

void solder() {
  display1.showNumberDec(solderTempSet);
  aState = digitalRead(outputA);
  if (aState != aLastState) {
    if (digitalRead(outputB) != aState) {
      if (solderTempSet <= 345) {
        solderTempSet = solderTempSet + 5;
      }
    } else {
      if (solderTempSet >= 5) {
        solderTempSet = solderTempSet - 5;
      }
    }
    Serial.print("Solder Temp Set: ");

    Serial.println(solderTempSet);
  }
  if (millis() >= time_now + period) {
    time_now = millis();
    solderTempNow = ktc.readCelsius();
    Serial.print("Solder Temp Now: ");
    display2.showNumberDec(solderTempNow);
    Serial.println(solderTempNow);

  }
  aLastState = aState;
}