#include <SD.h>
#include <Ethernet.h>
#include <SPI.h>
#include <TimedAction.h>
#define led 3
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,3 };
byte server[] = { x,x,x,x };
byte gateway[] = { 192,168,1,1 };
byte subnet[] = { 255, 255, 255, 0 };
int i = 1;
int compteur=0;
Client client(server, 80);
File myFile;
TimedAction timeconnection = TimedAction(50,connection);
int batMonPin = A0;
int val = 0;
float pinVoltage = 0;
float batteryVoltage = 0;
float ratio = 5.5;
int batMonPin1 = A1;
int val1 = 0;
float pinVoltage1 = 0;
float batteryVoltage1 = 0;
float ratio1 = 5.5;
int led1 = 9;
int tempsaullume = 0;
int sensibilite = 0;
int photocellPin = A4;
int photocellVal = 0;
void setup()
{
pinMode(3, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(led, OUTPUT);
pinMode(photocellPin, INPUT);
pinMode(batMonPin, INPUT);
pinMode(batMonPin1, INPUT);
if (!SD.begin(4)) {
Serial.println("failed!");
return;
}
Serial.println("done.");
Ethernet.begin(mac, ip,gateway,subnet);
Serial.begin(9600);
Serial.println("Connexion");
Serial.println();
delay(1000);
Serial.println("connecting...");
if (client.connect()) {
Serial.println("connected");
client.println("GET /~pilote/test.txt\n");
client.println();
if (SD.exists("test.txt")) {
SD.remove("test.txt");
Serial.println("efface test.txt...");
}
}
else {
Serial.println("failed");
i=0;
}
}
void loop()
{
switch (i){
case 1:
timeconnection.check();
//Serial.println( i );
break;
case 0:
recup();
break;
case 10:
ledon();
break;
case 20:
Serial.println("En attente");
break;
case 36:
Serial.println( i );
resetFunc();
break;
case 2:
alarm();
break;
case 30:
twit();
break;
}
}
int ar_strlen(const char *s)
{
const char *p = s;
while (*p != '\0')
p++;
return (size_t)(p - s);
}
char *ar_strchr(const char *s, int c)
{
while (*s != '\0' && *s != (char)c)
s++;
return ( (*s == c) ? (char *) s : NULL );
}
char *ar_strstr(const char *haystack, const char *needle)
{
size_t needlelen;
if (*needle == '\0')
return (char *) haystack;
needlelen = ar_strlen(needle);
for (; (haystack = ar_strchr(haystack, *needle)) != NULL; haystack++)
if (ar_strncmp(haystack, needle, needlelen) == 0)
return (char *) haystack;
return NULL;
}
int ar_strncmp(const char *s1, const char *s2, size_t n)
{
unsigned char uc1, uc2;
if (n == 0)
return 0;
while (n-- > 0 && *s1 == *s2) {
if (n == 0 || *s1 == '\0')
return 0;
s1++;
s2++;
}
uc1 = (*(unsigned char *) s1);
uc2 = (*(unsigned char *) s2);
return ((uc1 < uc2) ? -1 : (uc1 > uc2));
}
int getNbr(char *line)
{
int nbr;
nbr = 0;
while (*line >= '0' && *line <= '9') {
nbr *= 10;
nbr += *line - '0';
line++;
}
return (nbr);
}
int getConf(char *val)
{
File myFile;
char line[100];
char i;
i = 0;
if (!SD.exists("test.txt")) {
myFile = SD.open("sos/test.txt");
Serial.print(myFile);
}
else{
myFile = SD.open("test.txt");
}
if (myFile > 0) {
while ((line[i] = myFile.read()) > 0) {
if (line[i] == '\n') {
line[i] = '\0';
i = 0;
if (ar_strstr(line, val) && line[ar_strlen(val)] == '=') {
myFile.close();
return (getNbr(line + ar_strlen(val) + 1));
}
}
else {
++i;
}
}
}
return 0;
}
void recup()
{
Serial.print("Valeur sensibilite : ");
Serial.print(getConf("sensibilite"));
Serial.println("\n");
Serial.print("Valeur lumiere : ");
Serial.print(getConf("lumiere"));
Serial.println("\n");
Serial.print("Valeur lumiere1 : ");
Serial.print(getConf("lumiere1"));
Serial.println("\n");
Serial.print("Valeur lumiere2 : ");
Serial.print(getConf("lumiere2"));
Serial.println("\n");
Serial.print("Valeur lumieretemps 100: ");
Serial.print(getConf("lumieretemps"));
Serial.println("\n");
Serial.print("Valeur lumieretemps 50: ");
Serial.print(getConf("lumieretemps1"));
Serial.println("\n");
Serial.print("Valeur lumieretemps 25: ");
Serial.println(getConf("lumieretemps2"));
Serial.println("\n");
Serial.print("Twit: ");
Serial.println(getConf("twit"));
Serial.println("\n");
i=2;
}
void alarm()
{
val = analogRead(batMonPin);
pinVoltage = val * 0.00488;
batteryVoltage = pinVoltage * ratio;
Serial.println(batteryVoltage);
delay(100);
val1 = analogRead(batMonPin1);
pinVoltage1 = val1 * 0.00488;
batteryVoltage1 = pinVoltage1 * ratio1;
Serial.println(batteryVoltage1);
delay(100);
photocellVal = analogRead(photocellPin);
Serial.println(photocellVal);
analogWrite(led1,255);
delay(1000);
analogWrite(led1,0);
delay(1000);
if (client.connect()) {
Serial.println("Connexion au server");
Serial.println();
delay(1000);
Serial.println("connected");
client.print("GET /~pilote/test.php?mac=DE:AD:BE:EF:FE:ED&voltage=");
client.print(batteryVoltage);
client.print("&sensibilite=");
client.print(photocellVal);
client.print("&panneau=");
client.println(batteryVoltage1);
client.stop();
//Serial.print("lumiere envoye");
// Serial.println(lumiere);
//delay(10000);
for (int pause=0 ; pause < 50 ; pause++)
{
Serial.println(pause);
analogWrite(led1,255);
delay(1000);
analogWrite(led1,0);
delay(1000);
photocellVal = analogRead(photocellPin);
Serial.println(photocellVal);
if (photocellVal < (getConf("sensibilite")*100))
{
i=10;
break;
}
}
i=30;
}
}
void twit()
{
if(getConf("twit")>0)
{
delay(60000);
if (client.connect()) {
Serial.println("Connexion au server");
Serial.println();
delay(1000);
Serial.println("connected");
client.print("GET /~pilote/twit.php?mac=DE:AD:BE:EF:FE:ED&voltage=");
client.print(batteryVoltage);
client.print("&sensibilite=");
client.print(photocellVal);
//client.print("&panneau=");
//client.println(batteryVoltage1);
client.stop();
}
i=36;
}
else{
// char msg[] = "batterie :",batteryVoltage;
// if (twitter.post(msg)) {
// int status = twitter.wait();
// if (status == 200) {
// Serial.println("OK.");
// }
// }
i=36;
}
}
void ledon()
{
for (int tempsaullume=0 ; tempsaullume < (getConf("lumieretemps")*10) ; tempsaullume++)
{
photocellVal = analogRead(photocellPin);
Serial.println(photocellVal);
Serial.println("lumiere");
Serial.println(tempsaullume);
if (photocellVal > (getConf("sensibilite"))*100)
{
i=2;
break;
}
analogWrite(led,getConf("lumiere"));
}
analogWrite(led,0);
delay(3000);
for (int tempsaullume=0 ; tempsaullume < (getConf("lumieretemps1")*10) ; tempsaullume++)
{
photocellVal = analogRead(photocellPin);
Serial.println(photocellVal);
Serial.println("lumiere1");
if (photocellVal > (getConf("sensibilite"))*100)
{
i=2;
break;
}
analogWrite(led,getConf("lumiere1"));
}
analogWrite(led,0);
delay(3000);
for (int tempsaullume=0 ; tempsaullume < (getConf("lumieretemps2")*10) ; tempsaullume++)
{
photocellVal = analogRead(photocellPin);
Serial.println(photocellVal);
Serial.println("lumiere2");
if (photocellVal > (getConf("sensibilite"))*100)
{
i=2;
break;
}
analogWrite(led,getConf("lumiere2"));
}
analogWrite(led,0);
delay(10000);
i=2;
}
void resetFunc()
{
Serial.println("Reboot");
delay(10000);
//On déclare la fonction de reset de la carte
void(* resetFunc) (void) = 0;
Serial.println("Je reviens dans quelques secondes");
resetFunc(); //call reset
}
void connection(){
i=1;
compteur = compteur + i;
if (client.available()) {
char c = client.read();
Serial.print(c);
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.print(c);
delay(500);
// close the file:
myFile.close();
Serial.println("done.");
}
}
if (!client.connected()) {
Serial.println();
Serial.println("DECONNEXION DU SERVER.");
Serial.println("===");
Serial.println("");
i=0;
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");
// read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
client.stop();
}
}
}