timzoet
February 10, 2020, 8:03pm
1
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.
timzoet
February 10, 2020, 8:15pm
3
Sorry, should be good now.
timzoet
February 10, 2020, 8:38pm
5
I used the auto format tool and reuploaded the code
timzoet
February 10, 2020, 8:48pm
7
I edited the original post
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.
timzoet
February 10, 2020, 9:09pm
10
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;
}
timzoet
February 10, 2020, 9:16pm
12
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;
}