main.ino 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #include <ESP8266WiFi.h>
  2. #include <Automaton.h>
  3. #include <OneWire.h>
  4. #include <DallasTemperature.h>
  5. #include <DS18B20Events.h>
  6. // Pin for DS18B20
  7. int one_wire_bus = 4;
  8. int mcu_flash_button = 0;
  9. Atm_button mcubtn;
  10. int led1_pin = 13;
  11. Atm_led led1;
  12. int poti_pin = A0;
  13. Atm_analog poti;
  14. int dial_pin_1 = 12;
  15. int dial_pin_2 = 14;
  16. Atm_encoder dial;
  17. int shouldTemp = 0;
  18. float isTemp = 100;
  19. bool wpsRunning = false;
  20. // Init Onewire and DallasTemperature
  21. OneWire oneWire(one_wire_bus);
  22. DallasTemperature sensor(&oneWire);
  23. Atm_timer sensorTimer;
  24. //Init thermometer with index 0 (default)
  25. DS18B20Events thermometer(0);
  26. void setup() {
  27. delay(2000);
  28. Serial.begin(115200);
  29. Serial.println("Booting...");
  30. // led1.trace( Serial );
  31. // mcubtn.trace( Serial );
  32. led1.begin( led1_pin ); // .blink( 1000 );
  33. mcubtn.begin( mcu_flash_button )
  34. .onPress([] (int idx, int v, int up ) {
  35. wpsSetup();
  36. } );
  37. // .onPress( led1, led1.EVT_TOGGLE );
  38. dial.begin(dial_pin_1, dial_pin_2, 2)
  39. .range( 1, 120 )
  40. .onChange( [] (int idx, int v, int up ) {
  41. shouldTemp = v;
  42. // Serial.printf("Raw: %d ShouldTemp: %.10f\n", v, shouldTemp);
  43. checkTemp();
  44. });
  45. /*
  46. poti.begin( poti_pin )
  47. .onChange( [] (int idx, int v, int up ) {
  48. shouldTemp = (float)v / 20.0;
  49. // Serial.printf("Raw: %d ShouldTemp: %.10f\n", v, shouldTemp);
  50. checkTemp();
  51. });
  52. // sensorTimer.trace( Serial );
  53. */
  54. DS18B20Events::setup(&sensor); // Link DS18B20Events to DallasTemperature object
  55. DS18B20Events::setInterval(200); // Set min interval in milliseconds between 2 measurements. Default 10000 set in setup() method.
  56. sensorTimer.begin( 100 )
  57. .repeat( ATM_COUNTER_OFF )
  58. .onTimer( [] (int idx, int v, int up ) {
  59. thermometer.loop();
  60. } )
  61. .start();
  62. thermometer.onChange = temperatureChanged;
  63. Serial.println("Wifi Setup...");
  64. WiFi.mode(WIFI_STA);
  65. WiFi.begin(WiFi.SSID().c_str(),WiFi.psk().c_str());
  66. Serial.println("Setup Done.");
  67. }
  68. void loop() {
  69. // thermometer.loop(); // Mandatory to measure temperature and fire an event if needed
  70. // Serial.println("Hello World");
  71. // digitalWrite(13, HIGH);
  72. // delay(1000);
  73. // digitalWrite(13, LOW);
  74. // delay(1000);
  75. automaton.run();
  76. }
  77. void temperatureChanged(uint8_t index, float tempC)
  78. {
  79. isTemp = tempC;
  80. checkTemp();
  81. }
  82. void wpsSetup(){
  83. if (wpsRunning){
  84. Serial.println("WPS already running");
  85. } else {
  86. Serial.println("WPS Config started");
  87. bool wpsSuccess = WiFi.beginWPSConfig();
  88. Serial.printf("wpsSuccess: '%s'\n", boolToString(wpsSuccess));
  89. if(wpsSuccess) {
  90. // Muss nicht immer erfolgreich heißen! Nach einem Timeout bist die SSID leer
  91. String newSSID = WiFi.SSID();
  92. if(newSSID.length() > 0) {
  93. // Nur wenn eine SSID gefunden wurde waren wir erfolgreich
  94. Serial.printf("WPS fertig. Erfolgreich angemeldet an SSID '%s'\n", newSSID.c_str());
  95. }
  96. }
  97. }
  98. }
  99. unsigned long lastCheck;
  100. void checkTemp(){
  101. if (isTemp > 0 && isTemp < (float)shouldTemp){
  102. led1.on();
  103. } else {
  104. led1.off();
  105. }
  106. if ((millis() - lastCheck) > 50) {
  107. Serial.printf("%d,%d,%.10f\n", millis(),shouldTemp,isTemp);
  108. lastCheck = millis();
  109. }
  110. }
  111. String boolToString(bool in){
  112. return in ? "true" : "false";
  113. }