/*
* Arduino Soldering station By SymbolTech
* Pins diagram :
* ARDUINO PIN B4 connected to IR sensor
* ARDUINO PIN A8 connected to DIODE cathode and anode to the MOSFET gate
* ARDUINO PIN A15 connected to SET push button
* ARDUINO PIN A12 connected to UP push button
* ARDUINO PIN A11 connected to DOWN push button
* Arduino PIN A0 connected to LM358 PIN 1
* ARDUINO PIN B7 connected to SDA OLED display
* ARDUINO PIN B6 connected to SCL or SCK OLED display
* The oled display is I2C intarface
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306_STM32.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
int limita = 1500; // Here you can modify the STANDBY period the higher is the number the longer will be the STANDBY period
int schimbstatut = 1;
int statutIron = 1;
int handle_sensor = PB4; // IR Sensor pin
int handleStatus;
int senzor = PA0; // LM358 pin 1
int mosfet = PA8; // The output to the mosfet
int set = PA15; // Set button
int up = PA12; // UP button
int down = PA11; // DOWN button
int setValue = 0;
int setValueStandby = 0;
int mosfetValue = 0;
int mosfetOff = 0;
int valueSenzor;
int valueSenzor1;
int grade;
int setGrade;
int setGradeStandby;
int percent;
String iron_mode;
String statut;
void setup() {
//Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(4,0);
display.println("SymbolTech");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(18,19);
display.println("YouTube Channel");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9,30);
display.println("SOLDERING");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(22,50);
display.println("STATION");
display.display();
delay(6000);
pinMode(handle_sensor, INPUT);
pinMode(senzor, INPUT);
pinMode(mosfet, OUTPUT);
pinMode(set, INPUT_PULLUP);
pinMode(up, INPUT_PULLUP);
pinMode(down, INPUT_PULLUP);
}
void loop() {
handleStatus = digitalRead(handle_sensor);
//Serial.println(handleStatus);
if(statutIron == 1 && handleStatus == 0)
{
limita = limita - 1;
delay(1);
statut = " ";
setValueStandby = 120;
setGradeStandby = setValueStandby;
valueSenzor = analogRead(senzor);
valueSenzor1 = map(valueSenzor, 0, 5400, 0, 800);
grade = map(valueSenzor1, 0, 800, 0, 500);
percent = map(mosfetValue, 0, 254, 0, 100);
//Serial.println(grade);
analogWrite(mosfet, mosfetValue);
if(grade < setGradeStandby)
{
mosfetValue = mosfetValue + 10;
//Serial.println(mosfetValue);
//Serial.println(grade);
if(mosfetValue > 245)
{
mosfetValue = 254;
}
}
if(grade >= setGradeStandby)
{
mosfetValue = 0;
//Serial.println(mosfetValue);
//Serial.println(grade);
}
if(grade > 35)
{
iron_mode = " Hot";
}
if(grade < 30)
{
iron_mode = "Cold";
}
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(1,12);
display.println("STANDBY");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10,44);
display.println(grade);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(68,44);
display.println(iron_mode);
display.display();
//Serial.println(limita);
if(limita <= schimbstatut)
{
statutIron = 2;
limita = 0;
analogWrite(mosfet, mosfetOff);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(4,0);
display.println("SymbolTech");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(18,19);
display.println("YouTube Channel");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9,30);
display.println("SOLDERING");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(22,50);
display.println("STATION");
display.display();
}
}
if(statutIron == 2 && handleStatus == 1)
{
limita = 1500;
statutIron = 1;
}
if(statutIron == 1 && handleStatus == 1)
{
limita = 1500;
valueSenzor = analogRead(senzor);
//Serial.println(valueSenzor);
//delay(200);
valueSenzor1 = map(valueSenzor, 0, 5400, 0, 800);
grade = map(valueSenzor1, 0, 800, 0, 500);
percent = map(mosfetValue, 0, 254, 0, 100);
//Serial.println(grade);
analogWrite(mosfet, mosfetValue);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(17,0);
display.println("SET");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(51,0);
display.println(":");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(100,0);
display.println("C");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(62,0);
display.println(setValue);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5,50);
display.println(iron_mode);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(47,50);
display.println(statut);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(3,22);
display.println("IRON");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(51,22);
display.println(":");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(62,22);
display.println(grade);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(100,22);
display.println("C");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(95,50);
display.println(percent);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(115,50);
display.println("%");
display.display();
if(digitalRead(up) == LOW)
{
statut = " ";
setValue = setValue + 10;
delay(100);
if(setValue > 390)
{
setValue = 400;
}
}
if(digitalRead(down) == LOW)
{
statut = " ";
setValue = setValue - 10;
delay(100);
//Serial.println(setValue);
if(setValue < 10)
{
setValue = 0;
}
}
if(digitalRead(set) == LOW)
{
statut = " ";
setGrade = setValue;
//Serial.println(setGrade);
}
if(grade < setGrade)
{
mosfetValue = mosfetValue + 10;
//Serial.println(mosfetValue);
//Serial.println(grade);
if(mosfetValue > 245)
{
mosfetValue = 254;
}
}
if(grade >= setGrade)
{
mosfetValue = 0;
//Serial.println(mosfetValue);
//Serial.println(grade);
}
if(grade > 55)
{
iron_mode = " Hot";
if(grade == setValue)
{
statut = "Ready";
}
}
if(grade < 50)
{
iron_mode = "Cold";
}
}
}