Smart Home Project (2)

把最基础的读取/储存用户设置写好了,现在坐等各种传感器~~Wi-Fi方面留到最后来写。

#include <EEPROM.h>

#pragma mark - EEPROM API

#define EEPROM_write (address, p) {int i = 0; byte *pp = (byte*)&(p);for(; i < sizeof(p); i++) EEPROM.write(address+i, pp[i]);}
#define EEPROM_read  (address, p) {int i = 0; byte *pp = (byte*)&(p);for(; i < sizeof(p); i++) pp[i]=EEPROM.read(address+i);}

#pragma mark - WiFi Type

#define WiFi_Type_None 0
#define WiFi_Type_WEP  1
#define WiFi_Type_WPA  2

#pragma mark - User Default

struct user_default
{
            uint8_t MQ_3_limit_value;
            uint8_t MQ_5_limit_value;
            uint8_t WiFi_type;
            bool    WiFi_is_hidden;
            char  * WiFi_name;
            char  * WiFi_password;
            bool    endOfStruct;
};

#pragma mark - Real Time Data

struct realtime_data
{
            uint8_t MQ_3_value;
            uint8_t MQ_5_value;
            float   temperature;
            float   humidity;
            float   pressure;
};

#pragma mark - Global Vars

user_default config;

#pragma mark - DEBUG

void print_user_default()
{
            EEPROM_read(0,config);
            Serial.print("MQ_3: ");
            Serial.println(config.MQ_3_limit_value);
            Serial.print("MQ_5: ");
            Serial.println(config.MQ_5_limit_value);
            Serial.print("WiFi Type: ");
            Serial.println(config.WiFi_type);
            Serial.print("WiFi is hidden: ");
            Serial.println(config.WiFi_is_hidden?"YES":"NO");
            Serial.print("WiFi Name: ");
            Serial.println(config.WiFi_name);
            Serial.print("WiFi password: ");
            Serial.println(config.WiFi_password);
            delay(1000);
}

void fake_user_default()
{
            user_default config;
            config.MQ_3_limit_value = 450;
            config.MQ_5_limit_value = 500;
            config.WiFi_type                   = WiFi_Type_WPA;
            config.WiFi_is_hidden        = false;
            strcpy(config.WiFi_name,"Airport");
            strcpy(config.WiFi_password,"lalala");
            config.endOfStruct             = true;
            EEPROM_write(0,config);
}

#pragma mark - setup

void setup()
{
        Serial.begin(9600);
        EEPROM_read(0,config);
}


bool is_beyond_limit()
{
        realtime_data data;

#pragma mark - Simulate data start

        data.MQ_3_value  = 100 + random()%300;
        data.MQ_5_value  = 130 + random()%300;
        data.temperature = 12 + random()%30;
        data.humidity = 10 + random()%60;
        data.pressure = 990 + random()%100;
  
#pragma mark - Simulate data end
  
        if(data.MQ_3_value >= config.MQ_3_limit_value) return true;
        if(data.MQ_5_value >= config.MQ_5_limit_value) return true;
        return false;
}

#pragma mark - lifecycle

void loop()
{
        delay(1000);
        if(is_beyond_limit())
        {
                Serial.println("Dangerous!");
        }
        else
        {
                Serial.println("Safe!");
        }
}

声明: 本文为0xBBC原创, 转载注明出处喵~

发表评论

电子邮件地址不会被公开。 必填项已用*标注