把最基础的读取/储存用户设置写好了,现在坐等各种传感器~~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!");
}
}