Паяльник на ардуино прошу помощи.

rumit
Offline
Зарегистрирован: 21.11.2017

Здравствуйте, прошу помощи опытных людей в доработке прошивки.

Собираю паяльник на ардуино от 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;
                                       
                                      
                                       } 
  }
  } 

 

rumit
Offline
Зарегистрирован: 21.11.2017

http://geektimes.ru/post/255366/ вот ссылка на статью...

rumit
Offline
Зарегистрирован: 21.11.2017
#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;
                                       
                                      
                                       } 
  }
  } 

 

rumit
Offline
Зарегистрирован: 21.11.2017

Вот немного подравил как смог, теперь на экране высвечивается буква Т-и после три закрашенных прямоугольника, что то не разберу как фото сюда добавить..

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

rumit пишет:
...что то не разберу как фото сюда добавить..

Немного не в тему: те форумчане, которые сначала читают правила оформления постов, знают как сюда добавлять картинки и вставлять тесты своих скетчей так, что бы они не выглядели как бесконечные портянки.

 

rumit
Offline
Зарегистрирован: 21.11.2017

Такого геммороя я еще нигде не видел))) Спасибо, сам разобрался уже...