123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #define INTERVAL 60000
- #define IN_PINS 3
- #define START_AT_PIN 2
- #define DEBOUNCETIME 250
- #define USE_SENSOR_DHT
- #ifdef USE_SENSOR_DHT
- #include "DHT.h"
- #define DHTPIN A3
- #define DHTTYPE DHT22
- DHT dht(DHTPIN, DHTTYPE);
- #endif
- unsigned long intervalMillis;
- bool state_pin[IN_PINS];
- bool state_pin_pending[IN_PINS];
- unsigned long lastPinChange[IN_PINS];
- void setup() {
- Serial.begin(57600);
- Serial.print(F("HomeServerIOExt v"));
- Serial.println("0.1");
- for (uint8_t i = START_AT_PIN; i < (IN_PINS + START_AT_PIN); i++) {
- pinMode(i, INPUT_PULLUP);
- }
- for (uint8_t i = START_AT_PIN; i < (IN_PINS + START_AT_PIN); i++) {
- state_pin[i - START_AT_PIN] = digitalRead(i);
- }
- dht.begin();
- }
- void loop() {
- getInputs();
- if ( (millis() - intervalMillis) > INTERVAL) {
- intervalMillis = millis();
- sendPinStates_all();
- #ifdef USE_SENSOR_DHT
-
-
- float h = dht.readHumidity();
-
- float t = dht.readTemperature();
- if (isnan(h) || isnan(t)) {
- Serial.println(F("ERR: DHT failed to read"));
- return;
- }
- else {
- Serial.print(F("{\"T\":"));
- Serial.print(t);
- Serial.print(F(",\"H\":"));
- Serial.print((int)h);
- Serial.println(F("}"));
- delay(5);
- }
- #endif
- }
- }
- void getInputs() {
- bool _pinState;
- for (uint8_t i = START_AT_PIN; i < (IN_PINS + START_AT_PIN); i++) {
- _pinState = digitalRead(i);
-
- if ( state_pin_pending[i - START_AT_PIN] != _pinState ) {
-
- lastPinChange[i - START_AT_PIN] = millis();
- state_pin_pending[i - START_AT_PIN] = _pinState;
- }
-
- if ( (state_pin[i - START_AT_PIN] != _pinState) && (millis() - lastPinChange[i - START_AT_PIN]) > DEBOUNCETIME ) {
- state_pin[i - START_AT_PIN] = _pinState;
- lastPinChange[i - START_AT_PIN] = millis();
- sendPinState(i);
- }
- }
- }
- void sendPinState(uint8_t _pin) {
- Serial.print(F("P"));
- Serial.print(_pin);
- Serial.print("=");
- if (state_pin[_pin - START_AT_PIN]) Serial.println("H");
- else Serial.println("L");
- delay(5);
- }
- void sendPinStates_all() {
- for (uint8_t i = START_AT_PIN; i < (IN_PINS + START_AT_PIN); i++) {
- sendPinState(i);
- }
- }
|