Skip to content

Instantly share code, notes, and snippets.

@Ajimi
Created November 22, 2018 18:17
Show Gist options
  • Select an option

  • Save Ajimi/1f040e242eb2369f3697c4525977a4e2 to your computer and use it in GitHub Desktop.

Select an option

Save Ajimi/1f040e242eb2369f3697c4525977a4e2 to your computer and use it in GitHub Desktop.
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include "rgb_lcd.h"
#include "string.h"
#include <cstring>
rgb_lcd lcd;
const int PIN_SOUND = A0;
const int PIN_TEMP = A1;
const int PIN_LIGHT = A2;
const int PIN_BUTTON = 6;
const int PIN_LED = 13;
const int PIN_BUZZER = 1;
String LIGHT_SEUIL_TYPE = "light_seuil";
String SOUND_SEUIL_TYPE = "sound_seuil";
String TEMP_SEUIL_TYPE = "temp_seuil";
String LIGHT_TYPE = "light";
String SOUND_TYPE = "sound";
String TEMP_TYPE = "temp";
String BUZZER_TOGGLABLE_TYPE = "buzzer";
String LED_TOGGLABLE_TYPE = "led";
String POWER_TOGGLABLE_TYPE = "power";
String LCD_MESSAGE_TYPE ="lcd";
/*
*/
int LIGHT_VALUE_GLOBAL = 30;
int SOUND_VALUE_GLOBAL = 30;
float TEMP_VALUE_GLOBAL = 30;
String LCD_MESSAGE_GLOBAL = "Init ...";
int LIGHT_SEUIL_VALUE_GLOBAL = 30;
int SOUND_SEUIL_VALUE_GLOBAL = 30;
int TEMP_SEUIL_VALUE_GLOBAL = 30;
bool IS_BUZZER_ACTIVE_GLOBAL = false;
bool IS_LED_ACTIVE_GLOBAL = false;
bool IS_POWER_ACTIVE_GLOBAL = true;
bool IS_BUTTON_ACTIVE_GLOBAL = true;
char LIGHT = 'l';
char TEMP = 't';
char SOUND = 's';
char BUZZER = 'b';
char LED = 'l';
char POWER = 'p';
String BASE_URL = "GET /api";
// Temperature Related
const int B = 3975;
byte mac[] = {
0x98, 0x4F, 0xEE, 0x08, 0x33, 0xF};
// Change PORT Number
const int PORT = 3000;
IPAddress server(172, 16, 197, 90);
EthernetClient ethernetClient;
void setup(){
Serial.begin(9600);
delay(2000);
initLcd();
initEthernet();
initPins();
}
void loop() {
executeWithPowerCheckFromServer();
// execute();
}
void executeWithPowerCheckFromServer(){
updateTogglableValues();
if(IS_POWER_ACTIVE_GLOBAL){
execute();
} else {
turnOff();
}
}
void turnOff(){
setLcdMessage("OFF");
turnOffLed();
}
void execute(){
update();
}
void update(){
updateTogglableValues();
updateSeuilValues();
updateSensorValues();
sendSensorToServer();
updateLcdMessage();
}
#pragma region FINAL WORKING
void updateSeuilValues () {
LIGHT_SEUIL_VALUE_GLOBAL = getLightSeuilFromServer();
SOUND_SEUIL_VALUE_GLOBAL = getSoundSeuilFromServer();
TEMP_SEUIL_VALUE_GLOBAL = getTemperatureSeuilFromServer();
}
void updateSensorValues(){
LIGHT_VALUE_GLOBAL = getLight();
SOUND_VALUE_GLOBAL = getSound();
TEMP_VALUE_GLOBAL = getTemperature();
}
void sendSensorToServer() {
sendLightToServer();
sendSoundToServer();
sendTemperatureToServer();
}
void updateSensorValuesFromServer () {
LIGHT_VALUE_GLOBAL = getLightFromServer();
SOUND_VALUE_GLOBAL = getSoundFromServer();
TEMP_VALUE_GLOBAL = getTemperatureFromServer();
}
void updateTogglableValues() {
IS_BUZZER_ACTIVE_GLOBAL = getBuzzerIsActive();
IS_LED_ACTIVE_GLOBAL = getLedIsActive();
IS_POWER_ACTIVE_GLOBAL = getPowerIsActive();
}
void updateLcdMessage(){
LCD_MESSAGE_GLOBAL = getLcdMessageFromServer();
setLcdMessage(LCD_MESSAGE_GLOBAL);
}
#pragma endregion
// Important Functions
#pragma region GETTING LCD message
String getLcdMessageFromServer(){
// TODO : change LCD TYPE
String url = createGetUrl(LCD_MESSAGE_TYPE);
return getStringFromServer(url);
}
#pragma endregion
#pragma region GETTING SENSOR DATA
/** ANALOGIC DATA RECEIVEING*/
int getLightFromServer(){
return getSensorsDataFromServer(LIGHT);
}
// SOUND Data
int getSoundFromServer(){
return getSensorsDataFromServer(SOUND);
}
// LIGHT Data
int getTemperatureFromServer(){
return getSensorsDataFromServer(TEMP);
}
/**--END ANALOGIC DATA RECEIVEING */
#pragma endregion
#pragma region SENDING SENSOR DATA TO SERVER
/** ANALOGIC DATA SENDING */
void sendLightToServer(){
sendSensorsDataToServer(LIGHT, LIGHT_VALUE_GLOBAL);
}
void sendSoundToServer(){
sendSensorsDataToServer(SOUND, SOUND_VALUE_GLOBAL);
}
void sendTemperatureToServer(){
sendSensorsDataToServer(TEMP, TEMP_VALUE_GLOBAL);
}
/**-- END ANALOGIC DATA SENDING */
#pragma endregion
#pragma region GETTING SEUIL DATA FROM SERVER
/** SEUIL DATA RECEIVEING */
int getLightSeuilFromServer(){
return getSeuilFromServer(LIGHT);
}
// SOUND SEUIL
int getSoundSeuilFromServer(){
return getSeuilFromServer(SOUND);
}
// LIGHT SEUIL
int getTemperatureSeuilFromServer(){
return getSeuilFromServer(TEMP);
}
/**--END SEUIL DATA RECEIVEING */
#pragma endregion
#pragma region ISACTIVE
/** GET IS ACTIVE FROM SERVER */
bool getLedIsActive(){
return getIsActiveFromServer(LED);
}
bool getBuzzerIsActive(){
return getIsActiveFromServer(BUZZER);
}
bool getPowerIsActive(){
return getIsActiveFromServer(POWER);
}
/**--END GET IS ACTIVE FROM SERVER*/
#pragma endregion
#pragma region HELPER FUNCTIONS FOR GETTING DATA FROM SERVER
/** HELPER FUNCTIONS */
void sendSensorsDataToServer(char sensor, int value){
String sensorType= LIGHT_TYPE;
switch(sensor) {
case 'l':
sensorType = LIGHT_TYPE;
break;
case 's':
sensorType = SOUND_TYPE;
break;
case 't':
sensorType = TEMP_TYPE;
break;
default:
break;
}
String url = createSendUrl(sensorType, String("sensor") , value);
sendRequest(url);
}
int getSensorsDataFromServer(char sensor){
String sensorType= LIGHT_TYPE;
switch(sensor) {
case 'l':
sensorType = LIGHT_TYPE;
break;
case 's':
sensorType = SOUND_TYPE;
break;
case 't':
sensorType = TEMP_TYPE;
break;
default:
break;
}
String url = createGetUrl(sensorType);
return getIntFromServer(url);
}
int getSeuilFromServer(char sensor){
String seuilType= LIGHT_SEUIL_TYPE;
switch(sensor) {
case 'l':
seuilType = LIGHT_SEUIL_TYPE;
break;
case 's':
seuilType = SOUND_SEUIL_TYPE;
break;
case 't':
seuilType = TEMP_SEUIL_TYPE;
break;
default:
break;
}
String url = createGetUrl(seuilType);
return getIntFromServer(url);
}
// Return is Active
bool getIsActiveFromServer(char togglable){
String togglableType = BUZZER_TOGGLABLE_TYPE;
switch(togglable) {
case 'b': // BUZZER
togglableType = BUZZER_TOGGLABLE_TYPE;
break;
case 'l': // LED
togglableType = LED_TOGGLABLE_TYPE;
break;
case 'p': // POWER
togglableType = POWER_TOGGLABLE_TYPE;
break;
default:
break;
}
String url = createGetUrl(togglableType);
int state = getIntFromServer(url);
if(state > 0){
return true;
}
return false;
}
#pragma endregion
#pragma region URL CREATOR
String createSendUrl(String type, String category, int value){
String url = BASE_URL;
url += "/insert?type=" + type;
url += "&category=" + category;
url += "&value=" + value;
return url;
}
String createGetUrl(String type){
String url = BASE_URL;
url += "/data?type=" + type;
return url;
}
#pragma endregion
#pragma region GET REQUEST SENDING HELPERS
void sendRequest(String url){
getMessageFromServer(url, false);
}
// Return Int From Server
int getIntFromServer(String url){
int number = 0;
String message = getMessageFromServer(url, true);
// ---> THIS LINE Uncoment if an error occurs
// number = toInt(message);
number = message.toInt();
return number;
}
// Return String from Server
String getStringFromServer(String url) {
return getMessageFromServer(url, false);
}
String getMessageFromServer(String url, boolean isNumber){
EthernetClient client;
String result = "";
if(client.connect(server,PORT)) {
client.println(url);
client.println();
if(client.available()){
delay(500);
if(isNumber){
result = getIntMessage(client);
} else {
result = getStringMessage(client);
}
}
} else {
Serial.println("Client connection Failed");
}
client.stop();
return result;
}
String getIntMessage(EthernetClient client){
String result = "";
while(client.available()) {
// If an errors occurs uncoment this win and comment the line below
// also make sure to uncoment toInt() function in getIntFromServer
// result += client.read() - '0';
result += (char)client.read();
}
return result;
}
String getStringMessage(EthernetClient client){
String result = "";
while(client.available()) {
result += client.read();
}
return result;
}
#pragma endregion
#pragma region INITIALIZATION
void initLcd(){
lcd.begin(16,2);
}
void initEthernet(){
system("ifup eth0");
if (Ethernet.begin(mac) == 0) {
Serial.print("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for(;;)
;
} else {
Serial.println("connection succsessufl");
}
}
void initPins(){
pinMode(PIN_BUTTON, INPUT);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BUZZER, OUTPUT);
}
#pragma endregion
/** UTILS DATA */
#pragma region UTILS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment