You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
2.6 KiB
154 lines
2.6 KiB
#include "simpleReflowController.h" |
|
|
|
boolean start = false; |
|
|
|
unsigned int uiSec; |
|
unsigned long timestamp = 0; |
|
short fuzziness = 5; |
|
|
|
|
|
CRGB leds[NUM_LEDS]; |
|
|
|
void setup() { |
|
initPorts(); |
|
|
|
Serial.begin(9600); |
|
Serial.println("Hello World!"); |
|
|
|
initTFT(); |
|
initTermocouple(); |
|
|
|
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); |
|
|
|
leds[0] = CRGB::Black; |
|
FastLED.show(); |
|
|
|
start = true; |
|
uiSec = 0; |
|
timestamp = millis(); |
|
|
|
} |
|
|
|
void loop() { |
|
|
|
while (!start) { |
|
//wait for start press and show current temp |
|
// wait for cooling down |
|
} |
|
//clearTFT(); |
|
|
|
if (millis() > (timestamp + 1000)) { |
|
timestamp = millis(); |
|
secIncrease(); |
|
} |
|
|
|
double currentTemp = getTemp(); |
|
profileStep currentProfile = getProfile(uiSec); |
|
|
|
if (getTemp() < ((currentProfile.temp) - fuzziness)) { |
|
|
|
leds[0] = CRGB::Red; |
|
FastLED.show(); |
|
|
|
digitalWrite(SSR1, LOW); |
|
digitalWrite(SSR2, LOW); |
|
|
|
} |
|
|
|
if (getTemp() > currentProfile.temp) { |
|
|
|
leds[0] = CRGB::Green; |
|
FastLED.show(); |
|
|
|
digitalWrite(SSR1, HIGH); |
|
digitalWrite(SSR2, HIGH); |
|
} |
|
|
|
if ((uiSec % 5) == 0) { |
|
clearTFT(); |
|
setHeader(currentTemp, uiSec, currentProfile.temp); |
|
setProfile(); |
|
setGraph(currentProfile.name, uiSec); |
|
setStatus("active"); |
|
} |
|
|
|
} |
|
|
|
void initPorts() { |
|
pinMode(SSR1, OUTPUT); |
|
pinMode(SSR2, OUTPUT); |
|
pinMode(PIEZO, OUTPUT); |
|
|
|
digitalWrite(SSR1, HIGH); |
|
digitalWrite(SSR2, HIGH); |
|
digitalWrite(PIEZO, HIGH); |
|
} |
|
|
|
void secIncrease() { |
|
historyTemp[uiSec] = getTemp(); |
|
uiSec++; |
|
Serial.print("sec: "); |
|
Serial.println(uiSec); |
|
//double testTemp = getProfileTemp(uiSec).temp; |
|
|
|
} |
|
|
|
profileStep getProfile(int pSec) { |
|
// from https://www.compuphase.com/electronics/solderprofile-standard-timepoints.png |
|
|
|
profileStep step; |
|
step.temp = 0.0; |
|
step.name = "404"; |
|
step.starttime = 0; |
|
step.endtime = 0; |
|
|
|
if (pSec == -1) { |
|
step.temp = 50; |
|
step.name = "start cooling"; |
|
step.starttime = 0; |
|
step.endtime = 0; |
|
return step; |
|
} |
|
|
|
if (pSec <= 90) { |
|
step.temp = map(pSec, 0, 90, 0.0, 150.0); |
|
step.name = "preheating"; |
|
step.starttime = 0; |
|
step.endtime = 90; |
|
return step; |
|
} |
|
|
|
if (pSec <= 180) { |
|
step.temp = 150.0; |
|
step.name = "soak"; |
|
step.starttime = 91; |
|
step.endtime = 180; |
|
return step; |
|
} |
|
|
|
if (pSec <= 240) { |
|
step.temp = map(pSec, 180, 240, 150, 240); |
|
step.name = "reflow"; |
|
step.starttime = 181; |
|
step.endtime = 240; |
|
return step; |
|
} |
|
|
|
if (pSec <= 270) { |
|
step.temp = 240; |
|
step.name = "reflow"; |
|
step.starttime = 241; |
|
step.endtime = 270; |
|
return step; |
|
} |
|
if (pSec > 270) { |
|
step.temp = map(pSec, 270, 320, 240, 0); |
|
step.name = "cooling"; |
|
step.starttime = 271; |
|
step.endtime = 320; |
|
return step; |
|
} |
|
|
|
return step; |
|
} |
|
|
|
|