#include <EEPROM.h>
#include <Wire.h> // A4(SDA) ve A5(SCL) haberleşme kütüphanesi eklendi.
// #include <LiquidCrystal.h> Gerçekte bu kütüphane çalışacak. Alttaki pasif yapılacak.
#include <LiquidCrystal_I2C_Hangul.h> // LCD 16x2 kütüphanesi eklendi.
LiquidCrystal_I2C_Hangul lcd(0x27,16,2); // LCD özellikleri ile baeraber değişkene atandı.
// EEPROM'A KAYDETME
int kayitAdresi, kayitVerisi;
int kayitAdresiOku, kayitVerisiOku;
// BAĞLI PİNLER. SABİTLER
const int rezistans = A0; // Termostat veri değeri. Analog
const byte dir = 2; // Motor dönüş Yönü
const byte step = 4; // Motor dönüş Hızı
const byte relay = 5; // Resizdans rölesi
const byte red = 9; // Mavi ışık. Menüde gezerken yanacak.
const byte green = 10; // Yeşil ışık. Makine aktif çalışırken yanacak.
const byte blue = 11; // Kırmızı ışık. Resiztans ısınana kadar yanacak.
const byte btn[] = {7, 8, 12, 13}; // Aşağı(7),Yukarı(8),Seç(12),Menü(13)
// DEĞİŞKENLER...
#define hizVar 50 // Motorun varsayılan hızı.
#define isiVar 200 // Rezistans varsaylan ısısı.
const int adim = 200; // Nema17 motorun bir turda adım sayısı.
byte rezistansDurum= 0;
byte sayac = 0;
void setup() // Buradakiler bir defa görülür.
{
Serial.begin(9600); // Seri port 9600 olarak başlatıldı.
lcd.begin(16,2); // LCD ekran başlatıdı.
// Butonların varsayılan değerleri 1 (HIGH).
for(int i=0; i<4; i++) pinMode(btn[i], INPUT_PULLUP);
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(green,OUTPUT);
pinMode(relay, OUTPUT);
pinMode(rezistans, INPUT);
/*========================EEPROM============================*/
/* PASİFE AL ÇALIŞTIR, FİŞİ ÇEK!
// ARDUİNO 1 KEZ ÇALIŞTIĞINDA PASİF EDİLECEK!
// 0-255 ARASI RAKAM YAZILABİLİR!
kayitAdresi = 10; // Motor hız adresi
kayitVerisi = 50; // Motor hız değeri. RPM mikrosaniye cinsinden yaz!
EEPROM.write(hizAdresi, hizVerisi);
kayitAdresi = 11; // Rezistans ısı adresi.
kayitVerisi = 200; // Rezistans ısı değeri.
EEPROM.write(hizAdresi, hizVerisi);
hizAdresiOku = 10;
hizVerisiOku = EEPROM.read(10);
PASİFE AL ÇALIŞTIR, FİŞİ ÇEK! */
/*========================EEPROM============================*/
girisEKRAN();
ledKONTROL();
}
void loop() // Buradakiler sürekli döner.
{
sabitEKRAN();
}
// GİRİŞ EKRANI
// Makine açılırken görülecek ekran.
void girisEKRAN()
{
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("AYSUBEY");
lcd.setCursor(2, 1);
lcd.print("FILAMENT MAK.");
delay(2000);
}
// SABİT EKRAN.
// Makine çalışırken anlık hız ve ısı değerini görebileceğimiz ekran.
void sabitEKRAN()
{
int isiDegeri = ntc(); // Rezistans ısısını anlık okuma.
lcd.clear();
lcd.setCursor(0, 0 );
lcd.print("HIZ:");
lcd.setCursor(4, 0);
lcd.print("200"); // Nema17 200devir sabit!
lcd.setCursor(7, 0);
lcd.print("/");
lcd.setCursor(8, 0);
lcd.print("100");
lcd.setCursor(13, 0);
lcd.print("RPM"); // Değer düzenlenecek!
lcd.setCursor(0, 1);
lcd.print("ISI:");
lcd.setCursor(4, 1);
lcd.print("250"); // Ayarlı değer!
lcd.setCursor(7, 1);
lcd.print("/");
lcd.setCursor(8, 1);
lcd.print(isiDegeri); // Termestatın okuduğu değer!
lcd.setCursor(13, 1);
lcd.print("C");
}
// Parametre almayan değer döndürmeyen fonksiyon.
// Ledlerin sağlamlığını kontrol etmek için.
void ledKONTROL()
{
digitalWrite(red, HIGH);
delay(200);
digitalWrite(green, HIGH);
delay(200);
digitalWrite(blue, HIGH);
delay(200);
digitalWrite(red, LOW);
delay(100);
digitalWrite(green, LOW);
delay(100);
digitalWrite(blue, LOW);
delay(400);
}
// Parametre alan değer döndürmeyen fonksiyon.
// Anlık rezistans sıcaklık değeri.
// Kullanımı: int isiDegeri = ntc();
int ntc()
{
int isi = analogRead(A0);
int relayDurum = digitalRead(relay);
isi = isi*0.40;
delay(1000);
if(isi<1) digitalWrite(relay, HIGH);
if(relayDurum==1) digitalWrite(red, HIGH); else digitalWrite(red, LOW);
if(isi>300) digitalWrite(relay, LOW);
return isi;
}
// Parametre almayan değer döndürmeyen fonksiyon.
// Örnek kullanım: ornek(10,250);
// while(1); İşlemi keser, döngüden çıkar!
void ornek(int a, int b)
{
for(int i=0; i<a; i++)
{
digitalWrite(red, HIGH);
delay(200);
digitalWrite(red, LOW);
delay(200);
}
}
// Parametre alıp değer döndüren fonksiyon.
int toplam()
{
}