grzegorzch

Untitled

Apr 20th, 2015
562
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266WebServer.h>
  4. #include <EEPROM.h>
  5.  
  6. const char* ssid = "nazwasieciwifi";
  7. const char* password = "haslo";
  8.  
  9.  
  10. ESP8266WebServer server(80);
  11.  
  12. const int ledPIN = 0;
  13. const int counterPIN = 2;
  14. unsigned long counter = 0;
  15. unsigned long actTime = 0;
  16. unsigned long delayTime = 0;
  17. unsigned long ledTime = 0;
  18.  
  19. const int EEPROM_COUNTER = 0;
  20.  
  21. void f_counter(void)
  22. {
  23.   actTime = millis();
  24.   if (actTime > delayTime)
  25.   {
  26.     delayTime = actTime + 95;
  27.     counter++;
  28.     EEPROMWritelong(EEPROM_COUNTER, counter);
  29.     digitalWrite(ledPIN, HIGH);
  30.     ledTime = actTime;
  31.   }
  32. }
  33.  
  34. void setup()
  35. {
  36.   Serial.begin(9600);
  37.   Serial.println("Start programu...");
  38.  
  39.   EEPROM.begin(4);
  40.   counter = EEPROMReadlong(EEPROM_COUNTER);
  41.  
  42.   pinMode(ledPIN, OUTPUT);
  43.   digitalWrite(ledPIN, LOW);
  44.  
  45.   attachInterrupt(counterPIN, f_counter, FALLING);
  46.  
  47.   WiFi.begin(ssid, password);
  48.    
  49.   server.on("/", []()
  50.   {
  51.     server.send(200, "text/plain", "Stan licznika: " + String(counter, DEC) + " Wh");
  52.   });
  53.  
  54.   server.on("/getcounter", []()
  55.   {
  56.     server.send(200, "text/plain", String(counter, DEC));
  57.   });
  58.  
  59.   server.on("/set", []()
  60.   {
  61.     String str = server.arg("counter");
  62.     counter = str.toInt();
  63.     EEPROMWritelong(EEPROM_COUNTER, counter);
  64.     server.send(200, "text/plain", String(counter, DEC));
  65.   });
  66.  
  67.   server.begin();
  68. }
  69.  
  70. void loop()
  71. {
  72.   server.handleClient();
  73.   if(ledTime)
  74.   {
  75.     actTime = millis();
  76.     if(actTime > (ledTime + 1000))
  77.     {
  78.       digitalWrite(ledPIN, LOW);
  79.       ledTime = 0;
  80.     }
  81.   }
  82. }
  83.  
  84. void EEPROMWritelong(int address, unsigned long value)
  85. {
  86.   //Decomposition from a long to 4 bytes by using bitshift.
  87.   //One = Most significant -> Four = Least significant byte
  88.   byte four = (value & 0xFF);
  89.   byte three = ((value >> 8) & 0xFF);
  90.   byte two = ((value >> 16) & 0xFF);
  91.   byte one = ((value >> 24) & 0xFF);
  92.  
  93.   //Write the 4 bytes into the eeprom memory.
  94.   EEPROM.write(address, four);
  95.   EEPROM.write(address + 1, three);
  96.   EEPROM.write(address + 2, two);
  97.   EEPROM.write(address + 3, one);
  98.   EEPROM.commit();
  99. }
  100.  
  101. unsigned long EEPROMReadlong(int address)
  102. {
  103.   //Read the 4 bytes from the eeprom memory.
  104.   long four = EEPROM.read(address);
  105.   long three = EEPROM.read(address + 1);
  106.   long two = EEPROM.read(address + 2);
  107.   long one = EEPROM.read(address + 3);
  108.  
  109.   //Return the recomposed long by using bitshift.
  110.   return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
  111. }
Advertisement
Add Comment
Please, Sign In to add comment