Created
November 22, 2018 18:17
-
-
Save Ajimi/1f040e242eb2369f3697c4525977a4e2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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