Witam.
Z Arduino bawię się przelotnie od 2 lat (ale nadal jestem noob ), wykonując już czyjeś projekty, jak laser dla kota na serwo motorach.
Tym razem chciałem zrobić coś od podstaw, a mianowicie domową płytę grzewczą do lutowania jednostronnych układów smd wykorzystując do tego Arduino Uno, Max6675, przekażnik, potencjometr, lcd HD44780 16x2 z I2C oraz stare żelazko.
Kod to składak z podglądniętych rozwiązań, o ile się nie mylę to z czterech.
Jedyny problem który napotkałem rozwiązałem przez dodanie delay(500) na końcu pętli ale to spowodowało mruganie LCD.
Przed tym rozwiązaniem nie odczytywał w ogóle temperatury oraz jak ustawiałem potencjometrem temperaturę od 0 do 500, a potem wracałem z powrotem do zera na wyświetlaczu było widać poprzednie cyfry np. zamiast 0 było 034.
Przerobiłem kod ale wrócił problem z wyświetlaniem zbędnych liczb ..
Z Arduino bawię się przelotnie od 2 lat (ale nadal jestem noob ), wykonując już czyjeś projekty, jak laser dla kota na serwo motorach.
Tym razem chciałem zrobić coś od podstaw, a mianowicie domową płytę grzewczą do lutowania jednostronnych układów smd wykorzystując do tego Arduino Uno, Max6675, przekażnik, potencjometr, lcd HD44780 16x2 z I2C oraz stare żelazko.
Kod to składak z podglądniętych rozwiązań, o ile się nie mylę to z czterech.
Kod:
#include <max6675.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
int soPin = 13;// SO=Serial Out
int csPin = 12;// CS = chip select CS pin
int sckPin = 11;// SCK = Serial Clock pin
int przekaznik = 2;
int potencjometr = A0;
int stanPotencjometru;
int ustawionaTemperatura;
int temperatura;
MAX6675 thermocouple(sckPin, csPin, soPin);
void setup()
{
pinMode(przekaznik, OUTPUT);
pinMode(potencjometr, INPUT);
lcd.begin (16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.setCursor(1, 0);
lcd.print("LUTOWNICA SMD");
lcd.setCursor(3, 1);
lcd.print("wersja 0.3");
delay(5000);
lcd.clear();
}
void loop()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("JEST:");
lcd.setCursor(7,0);
lcd.print(temperatura);
lcd.setCursor(14, 0);
lcd.print((char)223);
lcd.setCursor(15, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("MA BYC:");
lcd.setCursor(9,1);
lcd.print(ustawionaTemperatura);
lcd.setCursor(14, 1);
lcd.print((char)223);
lcd.setCursor(15, 1);
lcd.print("C");
temperatura = thermocouple.readCelsius();
stanPotencjometru = analogRead(potencjometr);
ustawionaTemperatura = map(stanPotencjometru, 0, 1023, 0, 500);
if (temperatura < ustawionaTemperatura) {
digitalWrite(przekaznik, HIGH);
}
else {
digitalWrite(przekaznik, LOW);
}
delay(500);
}
Jedyny problem który napotkałem rozwiązałem przez dodanie delay(500) na końcu pętli ale to spowodowało mruganie LCD.
Przed tym rozwiązaniem nie odczytywał w ogóle temperatury oraz jak ustawiałem potencjometrem temperaturę od 0 do 500, a potem wracałem z powrotem do zera na wyświetlaczu było widać poprzednie cyfry np. zamiast 0 było 034.
Przerobiłem kod ale wrócił problem z wyświetlaniem zbędnych liczb ..
Kod:
#include <max6675.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
int soPin = 13;// SO=Serial Out
int csPin = 12;// CS = chip select CS pin
int sckPin = 11;// SCK = Serial Clock pin
int przekaznik = 2;
int potencjometr = A0;
int stanPotencjometru;
int ustawionaTemperatura;
int temperatura;
MAX6675 thermocouple(sckPin, csPin, soPin);
void setup()
{
pinMode(przekaznik, OUTPUT);
pinMode(potencjometr, INPUT);
lcd.begin (16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.setCursor(1, 0);
lcd.print("LUTOWNICA SMD");
lcd.setCursor(3, 1);
lcd.print("wersja 0.6");
delay(5000);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("JEST:");
lcd.setCursor(14, 0);
lcd.print((char)223);
lcd.setCursor(15, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("MA BYC:");
lcd.setCursor(14, 1);
lcd.print((char)223);
lcd.setCursor(15, 1);
lcd.print("C");
}
void loop()
{
temperatura = thermocouple.readCelsius();
stanPotencjometru = analogRead(potencjometr);
ustawionaTemperatura = map(stanPotencjometru, 0, 1023, 0, 300);
lcd.setCursor(9,0);
lcd.print(temperatura);
lcd.setCursor(9,1);
lcd.print(ustawionaTemperatura);
if (temperatura < ustawionaTemperatura) {
digitalWrite(przekaznik, HIGH);
}
else {
digitalWrite(przekaznik, LOW);
}
delay(500);
}