//128x64 Ekran
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
//U8G2_ST7920_128X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18 /* A4 */, /*cs=*/ U8X8_PIN_NONE, /*dc/rs=*/ 17 /* A3 */, /*reset=*/ 15 /* A1 */); // Remember to set R/W to 0
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 17 /* A3 */, /* CS=*/ 16 /* A2 */, /* reset=*/ U8X8_PIN_NONE);
//U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
//U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 14, /* data=*/ 13, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS
//U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);
//U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS
// Röle devresi
const int onikiv PROGMEM = 3;
const int yirmialtiv PROGMEM = 4;
const int otuzikiv PROGMEM = 5;
const int fan_led PROGMEM = 2;
// End of constructor list
const int currentSensor PROGMEM = A5;
const int voltageSensor PROGMEM = A1;
float vOUT = 0.0;
static float vIN = 0.0;
const float R1 PROGMEM = 10000.0;
const float R2 PROGMEM = 1500.0;
float Vdata = 0;
float V, I;
float Cdata;
float value;
static char buffer[100];
// LM35 Sıcaklık Sensörü
const int lm35Pin PROGMEM = A7;
int lm35 = 0;
float sicaklik_gerilim = 0;
int sicaklik = 0;
////////////////////////
void setup(void) {
Serial.begin(9600);
pinMode(onikiv, OUTPUT);
pinMode(yirmialtiv, OUTPUT);
pinMode(otuzikiv, OUTPUT);
pinMode(fan_led, OUTPUT);
digitalWrite(onikiv, HIGH);
digitalWrite(yirmialtiv, LOW);
digitalWrite(otuzikiv, LOW);
digitalWrite(fan_led, LOW);
// initialize the LCD
u8g2.begin();
}
//// ÇERÇEVE OLUŞTURMA FONKSİYONU/////////////
void drawF(int x, int y, int width, int height, int x2, int y2, int width2, int height2) {
u8g2.drawFrame(x, y, width, height);
u8g2.drawFrame(x2, y2, width2, height2);
}
/////////////////////////////////////////////
//// SICAKLIĞI EKRANA BASMA FONKSİYONU /////
void temp(int temp) {
u8g2.setFont(u8g2_font_6x10_tr);
u8g2.drawStr(90, 32, "Tem");
u8g2.setFont(u8g2_font_6x10_tr);
u8g2.drawStr(108, 31, "p");
u8g2.setFont(u8g2_font_unifont_t_weather);
u8g2.drawStr(113, 39, "\u0031");
u8g2.setFont(u8g2_font_chikita_tr);
u8g2.setCursor(94, 40);
u8g2.print(temp);
u8g2.setFont(u8g2_font_chikita_tr);
u8g2.drawStr(107, 40, "C");
}
///////////////////////////////////////////
void loop(void) {
// LM35 Sıcaklık Sensörü
for (int i = 0; i < 350; i++) // daha kararlı ortalama bir sonuç almak için 50 kez okuma yapma
{
lm35 = lm35 + analogRead(lm35Pin);
delay(1);
}
lm35 = lm35 / 350;
sicaklik_gerilim = (5000.0 / 1023.0) * lm35;
sicaklik = sicaklik_gerilim / 10.0;
///////////////////////////////////
for (int i = 0; i < 300; i++) // daha kararlı ortalama bir sonuç almak için 300 kez okuma yapma
{
Cdata = Cdata + analogRead(currentSensor);
Vdata = Vdata + analogRead(voltageSensor);
delay(1);
}
Cdata = Cdata / 300;
V = (Cdata / 1024.0) * 5000;
I = ((V - 2484) / 66);
//I = (2.5 - (Cdata * (5.0 / 1024.0)) )/0.066;
Vdata = Vdata / 300;
vOUT = (Vdata * 5.0) / 1024.0;
vIN = (vOUT / (R2 / (R1 + R2)));
u8g2.clearBuffer();
//// Volt Çerçeve ////////////////////////
drawF(0, 0, 85, 25, 1, 1, 83, 23);
//////////////////////////////////////////
//// Voltaj değerini ekrana yazdırma /////
//drawPrnt(u8g2_font_VCR_OSD_tr, 21, 0, 5, 5, 21, "V", buffer, 1);
int ival = vIN * 100;
sprintf(buffer, "%02d.%02d", ival / 100, ival % 100);
u8g2.setFont(u8g2_font_VCR_OSD_tr);
u8g2.drawStr(21, 0, 5);
u8g2.setCursor(5, 21);
u8g2.print(buffer);
u8g2.setCursor(69, 21);
u8g2.print(F("V"));
ival = 0;
/////////////////////////////////////////
//// Akım Çerçeve ////////////////////////
drawF(0, 26, 85, 25, 1, 27, 83, 23);
//////////////////////////////////////////
//// Amper değerini ekrana yazdırma //////
double valueI = (I <= 0) ? 00.00 : I;
ival = valueI * 100;
sprintf(buffer, "%02d.%02d", ival / 100, ival % 100);
u8g2.setFont(u8g2_font_VCR_OSD_tr);
u8g2.drawStr(69, 0, 5);
u8g2.setCursor(5, 47);
u8g2.print(buffer);
u8g2.setCursor(69, 47);
u8g2.print(F("A"));
/////////////////////////////////////////
//// CV ÇERÇEVE ////////////////////////
drawF(0, 52, 42, 12, 1, 53, 40, 10);
//////////////////////////////////////////
//// CV DEĞERİNİ EKRANA YAZDIRMA ////////////////////////
/* u8g2.setFont(u8g2_font_micro_tr );
u8g2.setCursor(6, 61);
u8g2.print("CV:12.52");*/
//////////////////////////////////////////
//// CC ÇERÇEVE ////////////////////////
drawF(43, 52, 42, 12, 44, 53, 40, 10);
//////////////////////////////////////////
//// CC DEĞERİNİ EKRANA YAZDIRMA ////////////////////////
/*u8g2.setFont(u8g2_font_micro_tr );
u8g2.setCursor(49, 61);
u8g2.print("CC:02.52");*/
//////////////////////////////////////////
//// Kademe Çerçeve //////////////////////
drawF(86, 0, 42, 21, 87, 1, 40, 19);
if (vIN <= 11.00) {
digitalWrite(yirmialtiv, LOW);
digitalWrite(otuzikiv, LOW);
delay(100);
digitalWrite(onikiv, HIGH);
u8g2.setFont(u8g2_font_6x10_tr);
u8g2.drawStr(90, 10, "Kademe");
u8g2.setFont(u8g2_font_chikita_tr);
u8g2.drawStr(93, 17, "12 Volt");
} else if ((vIN >= 11.10) && (vIN <= 25.00)) {
digitalWrite(onikiv, LOW);
digitalWrite(otuzikiv, LOW);
delay(100);
digitalWrite(yirmialtiv, HIGH);
u8g2.setFont(u8g2_font_6x10_tr);
u8g2.drawStr(90, 10, "Kademe");
u8g2.setFont(u8g2_font_chikita_tr);
u8g2.drawStr(92, 17, "26 Volt");
} else if (vIN >= 25.10) {
digitalWrite(onikiv, LOW);
digitalWrite(yirmialtiv, LOW);
delay(100);
digitalWrite(otuzikiv, HIGH);
u8g2.setFont(u8g2_font_6x10_tr);
u8g2.drawStr(90, 10, "Kademe");
u8g2.setFont(u8g2_font_chikita_tr);
u8g2.drawStr(92, 17, "32 Volt");
}
//////////////////////////////////////////
//// Temp Çerçeve ////////////////////////
drawF(86, 22, 42, 22, 87, 23, 40, 20);
if (sicaklik <= 38) {
digitalWrite(fan_led, LOW);
temp(sicaklik);
} else if (sicaklik >= 45) {
digitalWrite(fan_led, HIGH);;
temp(sicaklik);
} else {
temp(sicaklik);
}
//////////////////////////////////////////
//// Watt Çerçeve ////////////////////////
drawF(86, 45, 42, 19, 87, 46, 40, 17);
//////////////////////////////////////////
//// Watt hesaplama ve ekrana yazdırma ///
double value = (I * vIN < 0) ? 0.00 : I * vIN;
u8g2.setFont(u8g2_font_chikita_tr);
u8g2.drawStr(119, 60, "W");
u8g2.setFont(u8g2_font_chikita_tr);
//u8g2.setFont(u8g2_font_profont10_tn);
u8g2.setCursor(93, 58);
u8g2.print(value);
//////////////////////////////////////////
u8g2.sendBuffer();
//// Değerleri sıfırlama ////////////////
Cdata = 0;
I = 0;
V = 0;
Vdata = 0;
vIN = 0;
value;
delay(500);
}