Skip to content

Commit

Permalink
Merge pull request #8 from spothings/dev-code
Browse files Browse the repository at this point in the history
implement NTP time
  • Loading branch information
bukanspot authored May 30, 2023
2 parents f74399b + 7f4cdce commit 3a7eef0
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 48 deletions.
6 changes: 3 additions & 3 deletions src/main/ldr.ino
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ int MinLdr(int _new, int _old){
}
}

int IntensitasAverage(int _intensitas, int _max, int _min){
int ldrmaxvalue = MaxLdr(_intensitas, _max);
int ldrminvalue = MinLdr(_intensitas, _min);
int IntensityAverage(int _intensity, int _max, int _min){
int ldrmaxvalue = MaxLdr(_intensity, _max);
int ldrminvalue = MinLdr(_intensity, _min);
return (ldrmaxvalue + ldrminvalue)/2;
}
60 changes: 25 additions & 35 deletions src/main/main.ino
Original file line number Diff line number Diff line change
Expand Up @@ -5,63 +5,53 @@ const int
pin_ldr = A0, // pin LDR
pin_relay = 16, // pin relay
pin_led = LED_BUILTIN, // pin LED
relay_delay = 60; // relay delay to turn on or off relay
relay_delay = 600; // relay delay to turn on or off relay

int
RELAYWAIT = 0, // increment value to wait condision
MAXLDR = 0, // min value for LDR by default
MINLDR = 1024; // max value for LDR by default

bool
RELAYSTATUS = true, // relay status on or off
GELAP = true, // light status (gelap or terang)
MALAM = true;
RELAYSTATUS; // relay status (on or off)

void setup() {
Serial.begin(115200);
pinMode(pin_ldr, INPUT);
pinMode(pin_relay, OUTPUT);
pinMode(pin_led, OUTPUT);

// Relay(pin_relay, false); // by default turn off relay
// setup Wifi
WifiSetup();

// setup time ntp
setupNTP();
}

void loop() {
// get LDR value
int intensitas = LdrAverage(pin_ldr);

// set max and min LDR value with average
int nilaigelap = IntensitasAverage(intensitas, MAXLDR, MINLDR);
// get time (morning or night)
int night = GetTime();

// set light status (gelap or terang)
if (MALAM) {
if (intensitas < nilaigelap) {
if (GELAP == false) {
RELAYWAIT = 0;
GELAP = true;
}
} else {
if (GELAP == true) {
RELAYWAIT = 0;
GELAP = false;
}
}
} else {
GELAP = false;
RELAYSTATUS = false;
}
// LDR sensor set only works at night
if (night) {
// get LDR value with average
int intensity = LdrAverage(pin_ldr);

// CODE FOR NTP CLIENT
// amen peteng, set variabel -> MALAM = true | amen tengai, set variablel -> MALAM = false
// set value for lightLimit with auto sampling
int lightLimit = IntensityAverage(intensity, MAXLDR, MINLDR);

// turn on built in led by light status
Leds(pin_led, !RELAYSTATUS);

// turn on built in led by light status
Leds(pin_led, GELAP);
// turn on or off relay
RelayStatus(pin_relay, intensity, lightLimit, RELAYSTATUS, !RELAYSTATUS, relay_delay);

// turn on or off relay
RelayStatus(pin_relay, RELAYSTATUS, GELAP, relay_delay);
// print to serial monitor
PrintMonitor(intensity, RELAYWAIT, MAXLDR, MINLDR, lightLimit, RELAYSTATUS);
}

// print to serial monitor
SerialMonitor(intensitas, RELAYWAIT, MAXLDR, MINLDR, nilaigelap, GELAP);
// if morning, it's time to rest 😴
else {
Relay(pin_relay, false);
}
}
27 changes: 27 additions & 0 deletions src/main/ntpTime.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include <NTPClient.h>
#include <WiFiUdp.h>

// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

void setupNTP() {
// Initialize a NTPClient to get time
timeClient.begin();
timeClient.setTimeOffset(28800); // add 3600 each 1 GMT (8*3600 = 28800)
}

int getTimeNTP() {
timeClient.update();
int currentHour = timeClient.getHours(); // get current hours ntp time (24 hour)
return currentHour;
}

bool GetTime() {
int ntpTime = getTimeNTP();
if (ntpTime > 18 and ntpTime < 7) {
return true;
} else {
return false;
}
}
18 changes: 14 additions & 4 deletions src/main/relay.ino
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,24 @@ void Relay(int _pin, bool _status){
}
}

void RelayStatus(int _pin, bool _status, bool _value, int _delay) {
void RelayStatus(int _pin, int _intensity, int _lightLimit, bool _relay, bool _bright, int _delay) {
if (_intensity < _lightLimit) {
if (!RELAYSTATUS) {
RELAYWAIT = 0;
}
} else {
if (RELAYSTATUS) {
RELAYWAIT = 0;
}
}

if (RELAYWAIT < _delay * 10) {
if (_status != _value){
if (_relay != _bright) {
RELAYWAIT++;
}
} else {
RELAYWAIT = 0;
RELAYSTATUS = _value;
Relay(_pin, _value);
RELAYSTATUS = _bright;
Relay(_pin, _bright);
}
}
22 changes: 16 additions & 6 deletions src/main/serial-monitor.ino
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
void SerialMonitor(int _potencia, int _waiting, int _maxldr, int _minldr, int _nilaimalam, bool _malam){
void PrintMonitor(int _potencia, int _waiting, int _maxldr, int _minldr, int _lightLimit, bool _relayStatus) {
Serial.print(_potencia);
Serial.print("\t");
Serial.print(_waiting/10);
Serial.print(_waiting / 10);
Serial.print("\t");
Serial.print(_maxldr);
Serial.print("\t");
Serial.print(_minldr);
Serial.print("\t");
Serial.print(_nilaimalam);
Serial.print(_lightLimit);
Serial.print("\t");
if (_malam){
Serial.print("gelap");

if (_potencia < _lightLimit) {
Serial.print("dark");
} else {
Serial.print("terang");
Serial.print("bright");
}

Serial.print("\t");

if (_relayStatus) {
Serial.print("On");
} else {
Serial.print("Off");
}

Serial.print("\n");
}

0 comments on commit 3a7eef0

Please sign in to comment.