#include <Wire.h>
#include <SPI.h>
#include <RTClib.h>
#include <Wire.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 or 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define I2CADDR 0x20 // กำหนด Address ของ I2C
const byte ROWS = 4; // กำหนดจำนวนของ Rows
const byte COLS = 4; // กำหนดจำนวนของ Columns
// กำหนด Key ที่ใช้งาน (4x4)
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {0, 1, 2, 3}; // เชื่อมต่อกับ Pin แถวของปุ่มกด
byte colPins[COLS] = {4, 5, 6, 7}; // เชื่อมต่อกับ Pin คอลัมน์ของปุ่มกด
Keypad_I2C keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR, PCF8574 );
int Ledpin = 13;
RTC_DS3231 RTC;
int T1 = 0;
int T2 = -1;
int T3 = -1;
int T4 = -1;
int T5 = -1;
int T6 = -1;
int T7 = -1;
int T22 = 0;
int T33 = 0;
int T44 = 0;
float T55 = 0;
float T66 = 0;
int T77 = 0;
int H = 0;
int M = 0;
int TT = 0;
float LGT = 100.7745;
float LTT = 13.72747;
float LT = 17.00;
int LSTM = 105;
float TC = 0;
float tc = 0;
float LST = 0;
float LST1 = 0;
float LST2 = 0;
int LST3 = 0;
int LST4 = 0;
float Eot = 0;
float B = 0;
int d = 29;
int nloop = 0;
float A = 0;
float AA = 0;
float aa = 0;
float AAA = 0;
float AAAA = 0;
float gamma = 0;
float gamma1 = 0;
float gamma2 = 0;
float gamma3 = 0;
int gamma4 = 0;
int gamma5 = 0;
int gamma6 = 0;
float beta = 0;
float delta = 0;
float alpha = 0;
float alpha1 = 0;
float alpha2 = 0;
float alpha3 = 0;
float alpha4 = 0;
float alpha5 = 0;
float alpha6 = 0;
float alpha7 = 0;
float alpha8 = 0;
void setup() {
pinMode(Ledpin, OUTPUT);
Serial.begin(9600);
Wire.begin();
keypad.begin( makeKeymap(keys) ); // เรียกกาเชื่อมต่อ
RTC.begin();
// อัพโหลดโคดลงบอร์ด Arduino แล้ว ให้ใส่คอมมเนต์บรรทัดนี้ออก แล้วอัพโหลดใหม่ เพื่อไม่ให้ตั้งเวลทับซ้อนกัน
//RTC.adjust(DateTime(__DATE__, __TIME__)); // คำสั่งตั้งเวลาให้นาฬิกา
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// ตั้งค่าเวลาบรรทัดนี้
// อัพโหลดโคดลงบอร์ด Arduino แล้ว ให้ใส่คอมมเนต์บรรทัดนี้ออก แล้วอัพโหลดใหม่ เพื่อไม่ให้ตั้งเวลทับซ้อนกัน
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
DateTime now = RTC.now();
// RTC.setAlarm1Simple(21, 58);
// RTC.turnOnAlarm(1);
// if (RTC.checkAlarmEnabled(1)) {
// Serial.println("Alarm Enabled");
// }
// initialize the LCD
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
}
void loop() {
DateTime now = RTC.now();
char key = keypad.getKey();
if ( key == '*') {
lcd.clear();
TT = 1;
}
while (TT == 1) {
setLT();
char key = keypad.getKey();
if ( key == '#') {
lcd.clear();
TT = 0;
}
}
// ดึงค่าเวลาจากโมดูลมาคำนวนตามต้องการ
// Serial.print(now.year(), DEC);
// Serial.print('/');
// Serial.print(now.month(), DEC);
// Serial.print('/');
// Serial.print(now.day(), DEC);
// Serial.print(' ');
// Serial.print(now.hour(), DEC);
// Serial.print(':');
// Serial.print(now.minute(), DEC);
// Serial.print(':');
// Serial.print(now.second(), DEC);
// Serial.println();
d = now.day();
H = now.hour();
M = now.minute();
LT = (H + (M * 0.01));
Serial.println(d);
Serial.println(LT);
B = (0.986) * (d - 81);
//Serial.println(B);
Eot = (9.87 * sin(2 * B * 0.01746)) - (7.53 * cos(B * 0.01746)) - (1.5 * sin(B * 0.01746));
//Serial.println(Eot);
TC = (4 * (LGT - LSTM)) + (Eot);
tc = TC;
Serial.println(tc);
nloop = 0;
if (tc >= 0) {
while (tc > 60) {
tc = tc - 60;
nloop = nloop + 1;
}
A = (tc / 60) * 100;
Serial.println(A);
AA = map(A, 0, 100, 100, 40);
if (AA < 100) {
Serial.println(AA);
AAA = (AA / 100) + nloop;
Serial.println(AAA);
LST = LT + AAA;
}
if (AA == 100) {
LST = LT;
}
}
if (tc < 0) {
while (tc < -60) {
tc = tc + 60;
nloop = nloop + 1;
}
A = (tc / 60) * -100;
Serial.println(A);
AA = map(A, 0, 100, 100, 40);
if (AA < 100) {
Serial.println(AA);
AAA = (AA / -100) - nloop;
Serial.println(AAA);
LST = LT + AAA;
}
if (AA == 100) {
LST = LT;
}
}
Serial.println(LST);
delta = -23.45 * cos((0.986 * (d + 10)) * 0.01746);
Serial.print("delta ");
Serial.println(delta);
if (LST < 12) {
LST3 = LST;
//Serial.print("LST3 ");
//Serial.println(LST3);
gamma1 = (12 - LST);
//Serial.print("gamma1 ");
//Serial.println(gamma1);
gamma4 = gamma1;
gamma5 = gamma4 * -1;
//Serial.print("gamma5 ");
//Serial.println(gamma5);
gamma3 = (gamma1 - gamma4) * 100;
gamma3 = 100 - gamma3;
//Serial.print("gamma3 ");
//Serial.println(gamma3);
gamma2 = map(gamma3, 0, 60, 0, 100);
gamma2 = gamma2 / -100;
//Serial.print("gamma2 ");
//Serial.println(gamma2);
gamma = 15 * (gamma2 + gamma5);
Serial.println("000000");
}
if (LST >= 12) {
gamma1 = (LST - 12);
if (gamma1 < 1 && gamma1 > 0) {
gamma3 = gamma1 * 100;
gamma2 = map(gamma3, 0, 60, 0, 100);
gamma2 = gamma2 / 100;
gamma = 15 * gamma2;
Serial.println("111111");
}
if (gamma1 == 1) {
gamma = 15 * 1;
Serial.println("222222");
}
if (gamma1 > 1) {
gamma4 = gamma1;
gamma5 = gamma4;
gamma3 = (gamma1 - gamma4) * 100;
gamma2 = map(gamma3, 0, 60, 0, 100);
gamma2 = gamma2 / 100;
gamma = 15 * (gamma2 + gamma5);
Serial.println("333333");
}
}
Serial.print("gamma ");
Serial.println(gamma);
alpha1 = sin(delta * 0.01746);
alpha2 = sin(LTT * 0.01746);
alpha3 = cos(delta * 0.01746);
alpha4 = cos(LTT * 0.01746);
alpha5 = cos(gamma * 0.01746);
alpha6 = alpha1 * alpha2;
alpha7 = alpha3 * alpha4 * alpha5;
alpha8 = alpha6 + alpha7;
// Serial.print("alpha8 ");
// Serial.println(alpha8);
alpha = asin(alpha8) * 57.3248; // มุมElevation
Serial.print("Elevation ");
Serial.println(alpha);
/////////////////////////////////// มุมAzimute //////////////////////////////////////////////////////
if (gamma < 0) {
beta = acos(((alpha1 * alpha4) - (alpha3 * alpha2 * alpha5)) / cos(alpha * 0.01746)) * 57.3248;
Serial.print("Azimute ");
Serial.println(beta);
}
if (gamma >= 0) {
beta = 360 - acos(((alpha1 * alpha4) - (alpha3 * alpha2 * alpha5)) / cos(alpha * 0.01746)) * 57.3248;
Serial.print("Azimute ");
Serial.println(beta);
}
lcd.setCursor(0, 0);
lcd.print("DAY");
lcd.setCursor(4, 0);
lcd.print(d);
lcd.setCursor(8, 0);
lcd.print("TIME");
lcd.setCursor(13, 0);
lcd.print(H);
lcd.setCursor(16, 0);
lcd.print(":");
lcd.setCursor(18, 0);
lcd.print(M);
lcd.setCursor(0, 1);
lcd.print("EL");
lcd.setCursor(3, 1);
lcd.print(alpha);
lcd.setCursor(11, 1);
lcd.print("AZ");
lcd.setCursor(14, 1);
lcd.print(beta);
lcd.setCursor(0, 2);
lcd.print("LGT");
lcd.setCursor(4, 2);
lcd.print(LGT);
lcd.setCursor(0, 3);
lcd.print("LTT");
lcd.setCursor(4, 3);
lcd.print(LTT);
}
void setLT() {
lcd.setCursor(0, 0);
lcd.print("LGT");
lcd.setCursor(0, 1);
lcd.print("LTT");
char key = keypad.getKey();
if ( key == '#') {
lcd.clear();
TT = 0;
}
if ( key == 'C') {
LGT = LGT * -1;
if (LGT > 0 ) {
lcd.setCursor(4, 0);
lcd.print("+");
}
if (LGT < 0 ) {
lcd.setCursor(4, 0);
lcd.print("-");
}
}
if ( key == 'D') {
LTT = LTT * -1;
if (LTT > 0 ) {
lcd.setCursor(4, 1);
lcd.print("+");
}
if (LTT < 0 ) {
lcd.setCursor(4, 1);
lcd.print("-");
}
}
if ( key == 'A') {
T1 = 1;
Serial.print(T1);
}
if ( key == 'B') {
T1 = 2;
Serial.print(T1);
}
while (T1 == 1) {
Serial.print("OK A");
char key = keypad.getKey();
if (( T2 != -1) && ( T3 != -1) && ( T4 != -1) && ( T5 != -1) && ( T6 != -1)) {
Serial.println(T66);
Serial.println(T55);
Serial.println(T44);
Serial.println(T33);
Serial.println(T22);
LGT = (T66 + T55 + T44 + T33 + T22);
Serial.println(LGT);
T2 = -1;
T3 = -1;
T4 = -1;
T5 = -1;
T6 = -1;
T7 = -1;
T1 = 0;
Serial.print("OUT A");
}
if (( T2 != -1) && ( T3 != -1) && ( T4 != -1) && ( T5 != -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T6 = 0; break;
case '1': T6 = 1; break;
case '2': T6 = 2; break;
case '3': T6 = 3; break;
case '4': T6 = 4; break;
case '5': T6 = 5; break;
case '6': T6 = 6; break;
case '7': T6 = 7; break;
case '8': T6 = 8; break;
case '9': T6 = 9; break;
}
T66 = T6 * 0.01;
lcd.setCursor(10, 0);
lcd.print(T6);
}
}
if (( T2 != -1) && ( T3 != -1) && ( T4 != -1) && ( T5 == -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T5 = 0; break;
case '1': T5 = 1; break;
case '2': T5 = 2; break;
case '3': T5 = 3; break;
case '4': T5 = 4; break;
case '5': T5 = 5; break;
case '6': T5 = 6; break;
case '7': T5 = 7; break;
case '8': T5 = 8; break;
case '9': T5 = 9; break;
}
T55 = T5 * 0.1;
lcd.setCursor(9, 0);
lcd.print(T5);
}
}
if (( T2 != -1) && ( T3 != -1) && ( T4 == -1) && ( T5 == -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T4 = 0; break;
case '1': T4 = 1; break;
case '2': T4 = 2; break;
case '3': T4 = 3; break;
case '4': T4 = 4; break;
case '5': T4 = 5; break;
case '6': T4 = 6; break;
case '7': T4 = 7; break;
case '8': T4 = 8; break;
case '9': T4 = 9; break;
}
T44 = T4 * 1;
lcd.setCursor(7, 0);
lcd.print(T4);
lcd.setCursor(8, 0);
lcd.print(".");
}
}
if (( T2 != -1) && ( T3 == -1) && ( T4 == -1) && ( T5 == -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T3 = 0; break;
case '1': T3 = 1; break;
case '2': T3 = 2; break;
case '3': T3 = 3; break;
case '4': T3 = 4; break;
case '5': T3 = 5; break;
case '6': T3 = 6; break;
case '7': T3 = 7; break;
case '8': T3 = 8; break;
case '9': T3 = 9; break;
}
T33 = T3 * 10;
lcd.setCursor(6, 0);
lcd.print(T3);
}
}
if (( T2 == -1) && ( T3 == -1) && ( T4 == -1) && ( T5 == -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T2 = 0; break;
case '1': T2 = 1; break;
case '2': T2 = 2; break;
case '3': T2 = 3; break;
case '4': T2 = 4; break;
case '5': T2 = 5; break;
case '6': T2 = 6; break;
case '7': T2 = 7; break;
case '8': T2 = 8; break;
case '9': T2 = 9; break;
}
T22 = T2 * 100;
lcd.setCursor(5, 0);
lcd.print(T2);
}
}
}
//---------------------------------------------------------------------------------------------------------------------
while (T1 == 2) {
Serial.print("OK b");
char key = keypad.getKey();
if (( T3 != -1) && ( T4 != -1) && ( T5 != -1) && ( T6 != -1)) {
Serial.println(T66);
Serial.println(T55);
Serial.println(T44);
Serial.println(T33);
LTT = (T66 + T55 + T44 + T33 );
Serial.println(LGT);
T2 = -1;
T3 = -1;
T4 = -1;
T5 = -1;
T6 = -1;
T7 = -1;
T1 = 0;
Serial.print("OUT A");
}
if (( T3 != -1) && ( T4 != -1) && ( T5 != -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T6 = 0; break;
case '1': T6 = 1; break;
case '2': T6 = 2; break;
case '3': T6 = 3; break;
case '4': T6 = 4; break;
case '5': T6 = 5; break;
case '6': T6 = 6; break;
case '7': T6 = 7; break;
case '8': T6 = 8; break;
case '9': T6 = 9; break;
}
T66 = T6 * 0.01;
lcd.setCursor(9, 1);
lcd.print(T6);
}
}
if (( T3 != -1) && ( T4 != -1) && ( T5 == -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T5 = 0; break;
case '1': T5 = 1; break;
case '2': T5 = 2; break;
case '3': T5 = 3; break;
case '4': T5 = 4; break;
case '5': T5 = 5; break;
case '6': T5 = 6; break;
case '7': T5 = 7; break;
case '8': T5 = 8; break;
case '9': T5 = 9; break;
}
T55 = T5 * 0.1;
lcd.setCursor(8, 1);
lcd.print(T5);
}
}
if (( T3 != -1) && ( T4 == -1) && ( T5 == -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T4 = 0; break;
case '1': T4 = 1; break;
case '2': T4 = 2; break;
case '3': T4 = 3; break;
case '4': T4 = 4; break;
case '5': T4 = 5; break;
case '6': T4 = 6; break;
case '7': T4 = 7; break;
case '8': T4 = 8; break;
case '9': T4 = 9; break;
}
T44 = T4 * 1;
lcd.setCursor(6, 1);
lcd.print(T4);
lcd.setCursor(7, 1);
lcd.print(".");
}
}
if (( T3 == -1) && ( T4 == -1) && ( T5 == -1) && ( T6 == -1)) {
if ((key == '0') || (key == '1') || (key == '2') || (key == '3') || (key == '4') || (key == '5') || (key == '6') || (key == '7') || (key == '8') || (key == '9')) {
switch (key) {
case '0': T3 = 0; break;
case '1': T3 = 1; break;
case '2': T3 = 2; break;
case '3': T3 = 3; break;
case '4': T3 = 4; break;
case '5': T3 = 5; break;
case '6': T3 = 6; break;
case '7': T3 = 7; break;
case '8': T3 = 8; break;
case '9': T3 = 9; break;
}
T33 = T3 * 10;
lcd.setCursor(5, 1);
lcd.print(T3);
}
}
}
}