Паяльник на ардуино прошу помощи.
- Войдите на сайт для отправки комментариев
Втр, 21/11/2017 - 10:53
Здравствуйте, прошу помощи опытных людей в доработке прошивки.
Собираю паяльник на ардуино от Alex Link, но очень не нравится семисегментный дисплей примененый в данной конструкции, пытаюсь заменить его на олед 128*32 но что то не соображу как вывести на него показания.Никахи украшательств не требуестя просто температура жала как в оригинале.. Может кто подскажет хотя бы в какую сторону дальше копать.. заранее спасибо!
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display( OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
//--------------------- переменные паяльника -----------------------------
int knopka = 3; //Пин кнопок
int tin = 0; // Пин Датчика температуры IN Analog через LM358N
int pinpwm = 11;// порт нагревательного элемента(через транзистор)PWM
int tempust = 230; // установленная температура
int tempmin = 200; // минимальная температура
int tempmax = 480; // максимальная температура
int tempreal = 250; // переменная датчика текущей температуры
int temppwmmin = 40; // минимальное значение PWM нагревателя
int temppwmmax = 180; // максимальное значение PWM нагревателя
int temppwmreal = 0; // текущее значение PWM нагревателя
int temperror = -50; // разница температур(установленная - реальная)
int temprazn = 0; // переменная разницы температуры(установленная - текущая)
int increment = 0; //Стартовое значение на сегментах
void setup() {
pinMode(pinpwm,OUTPUT); // Порт нагрузки(паяльника) настраиваем на выход
analogWrite(pinpwm, temppwmreal); //Вывод шим в нагрузку паяльника (выводим 0 - старт с выключеным паяльником- пока не опредилим состояние температуры)
// инициализация и очистка дисплея
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.display();
delay(500);
display.setTextSize(2); // установка размера шрифта
display.setTextColor(WHITE); // установка цвета текста
display.setCursor(0,0); // установка курсора
display.println("TEMP:");
display.display();
}
void loop() {
if (tempreal < tempust ){ // Если температура паяльника ниже установленной температуры то:
if ((tempust - tempreal) < 16 & (tempust - tempreal) > 6 ) // Проверяем разницу между у становленной температурой и текущей паяльника,
// Если разница меньше 10 градусов то
{
temppwmreal = 99; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
}
else if ((tempust - tempreal) < 7 & (tempust - tempreal) > 3)
{
temppwmreal = 80; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
}
else if ((tempust - tempreal) < 4 )
{
temppwmreal = 45; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
}
else {
temppwmreal = 230; // Иначе Подымаем мощность нагрева(шим 0-255 мы делаем 230) на максимум для быстрого нагрева до нужной температуры
}
analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности
}
else { //Иначе (если температура паяльника равняется или выше установленной)
temppwmreal = 0; // Выключаем мощность нагрева (шим 0-255 мы делаем 0) - таким образом мы отключаем паяльник
analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности
}
{
tempreal = analogRead(0);// считываем текущую температуру
tempreal=map(tempreal,-50,700,0,500); // нужно вычислить
increment=tempreal;
if (analogRead(knopka) == 0) // Если нажата вниз кнопка то понизить температуру на 5
{
if( tempust <= tempmin || (tempust-5) <= tempmin )
{
tempust= tempmin;
increment = tempust;
}
else {
tempust=tempust-5;
increment = tempust;
}
}
else if (analogRead(knopka) > 500 && analogRead(knopka) < 524 ) // Если нажата вверх кнопка то повысить температуру на 5
{
tempust=tempust+5;
if( tempust >=tempmax)
{
tempust= tempmax;
}
increment = tempust;
}
}
}
http://geektimes.ru/post/255366/ вот ссылка на статью...
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display( OLED_RESET); #define NUMFLAKES 10 #define XPOS 0 #define YPOS 1 #define DELTAY 2 //--------------------- переменные паяльника ----------------------------- int knopka = 3; //Пин кнопок int tin = 0; // Пин Датчика температуры IN Analog через LM358N int pinpwm = 11;// порт нагревательного элемента(через транзистор)PWM int tempust = 230; // установленная температура int tempmin = 200; // минимальная температура int tempmax = 480; // максимальная температура int tempreal = 250; // переменная датчика текущей температуры int temppwmmin = 40; // минимальное значение PWM нагревателя int temppwmmax = 180; // максимальное значение PWM нагревателя int temppwmreal = 0; // текущее значение PWM нагревателя int temperror = -50; // разница температур(установленная - реальная) int temprazn = 0; // переменная разницы температуры(установленная - текущая) int increment = 0; //Стартовое значение на сегментах void setup() { pinMode(pinpwm,OUTPUT); // Порт нагрузки(паяльника) настраиваем на выход analogWrite(pinpwm, temppwmreal); //Вывод шим в нагрузку паяльника (выводим 0 - старт с выключеным паяльником- пока не опредилим состояние температуры) // инициализация и очистка дисплея display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); display.display(); delay(500); display.setTextSize(3); // установка размера шрифта display.setTextColor(WHITE); // установка цвета текста display.setCursor(0,5); // установка курсора display.println("T-"); display.display(); } void loop() { display.setTextSize(3); // установка размера шрифта display.setTextColor(WHITE); // установка цвета текста display.setCursor(40,5); // установка курсора display.println(increment); display.display(); if (tempreal < tempust ){ // Если температура паяльника ниже установленной температуры то: if ((tempust - tempreal) < 16 & (tempust - tempreal) > 6 ) // Проверяем разницу между у становленной температурой и текущей паяльника, // Если разница меньше 10 градусов то { temppwmreal = 99; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева } else if ((tempust - tempreal) < 7 & (tempust - tempreal) > 3) { temppwmreal = 80; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева } else if ((tempust - tempreal) < 4 ) { temppwmreal = 45; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева } else { temppwmreal = 230; // Иначе Подымаем мощность нагрева(шим 0-255 мы делаем 230) на максимум для быстрого нагрева до нужной температуры } analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности } else { //Иначе (если температура паяльника равняется или выше установленной) temppwmreal = 0; // Выключаем мощность нагрева (шим 0-255 мы делаем 0) - таким образом мы отключаем паяльник analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности } { tempreal = analogRead(0);// считываем текущую температуру tempreal=map(tempreal,-50,700,0,500); // нужно вычислить increment=tempreal; if (analogRead(knopka) == 0) // Если нажата вниз кнопка то понизить температуру на 5 { if( tempust <= tempmin || (tempust-5) <= tempmin ) { tempust= tempmin; increment = tempust; } else { tempust=tempust-5; increment = tempust; } } else if (analogRead(knopka) > 500 && analogRead(knopka) < 524 ) // Если нажата вверх кнопка то повысить температуру на 5 { tempust=tempust+5; if( tempust >=tempmax) { tempust= tempmax; } increment = tempust; } } }Вот немного подравил как смог, теперь на экране высвечивается буква Т-и после три закрашенных прямоугольника, что то не разберу как фото сюда добавить..
Немного не в тему: те форумчане, которые сначала читают правила оформления постов, знают как сюда добавлять картинки и вставлять тесты своих скетчей так, что бы они не выглядели как бесконечные портянки.
Такого геммороя я еще нигде не видел))) Спасибо, сам разобрался уже...