наброски кода из видео
приблизительная схема, делал наброски чтобы самому не заблудится.
#include <Wire.h> #include <LiquidCrystal_I2C.h> #define pinB 4 // вход B энкодера #define pwmPin 9 // мосфет нагревателя #define analogIn 1 // вход от усла термопары volatile unsigned int setTemp = 290; LiquidCrystal_I2C lcd(0x27, 16, 2); void setup(){ lcd.begin(); lcd.backlight(); pinMode(pwmPin, OUTPUT); pinMode(pinB, INPUT); attachInterrupt(0, encoder, FALLING); attachInterrupt(1, key, FALLING); } void encoder(){ if (!digitalRead(pinB)) { if (setTemp < 480) setTemp += 10; } else { if (setTemp != 0) setTemp -= 10; } } void key (){ // кнопка энкодера // pwm = 128; } void loop(){ int val = analogRead(analogIn); int temperature = map(val, 0, 580, 20, 480); lcd.setCursor(0, 0); lcd.print("t:"); lcd.print(setTemp); lcd.print("C "); lcd.setCursor(10, 0); lcd.print(temperature); lcd.print("C "); lcd.setCursor(0, 1); lcd.print("val:"); lcd.print(val); lcd.print(" "); if (temperature < setTemp) digitalWrite(pwmPin, HIGH); else digitalWrite(pwmPin, LOW); lcd.setCursor(15, 1); if (digitalRead(pwmPin)) lcd.print("#"); else lcd.print(" "); }
/// без термостата, для паяльников без термопары #include <Wire.h> #include <LiquidCrystal_I2C.h> #define pinB 4 // вход B энкодера #define pwmPin 9 // мосфет нагревателя #define analogIn 1 // вход от усла термопары volatile unsigned int pwm = 500; LiquidCrystal_I2C lcd(0x27, 16, 2); void setup(){ lcd.begin(); lcd.backlight(); pinMode(pwmPin, OUTPUT); pinMode(pinB, INPUT); attachInterrupt(0, encoder, FALLING); attachInterrupt(1, key, FALLING); } void encoder(){ if (!digitalRead(pinB)) { if (pwm < 65500) pwm += 100; } else { if (pwm != 0) pwm -= 100; } } void key (){ // кнопка энкодера // pwm = 128; } void loop(){ // analogWrite(pwmPin, pwm); int val = analogRead(analogIn); int temperature = map(val, 0, 580, 20, 480); lcd.setCursor(0, 0); lcd.print(temperature); lcd.print("t "); lcd.print("val:"); lcd.print(val); lcd.print(" "); lcd.setCursor(0, 1); lcd.print("PWM:"); lcd.print(pwm); lcd.print(" "); ///////// lcd.setCursor(15, 1); digitalWrite(pwmPin, HIGH); lcd.print("#"); delay(250); lcd.setCursor(15, 1); digitalWrite(pwmPin, LOW); lcd.print(" "); delay(pwm); }