mirror of
https://github.com/anklimov/lighthub
synced 2025-12-06 11:49:51 +03:00
Encoder. need to change irq function
This commit is contained in:
@@ -90,7 +90,9 @@ int Input::poll() {
|
|||||||
if (!isValid()) return -1;
|
if (!isValid()) return -1;
|
||||||
if (inType & IN_DHT22)
|
if (inType & IN_DHT22)
|
||||||
dht22Poll();
|
dht22Poll();
|
||||||
/* example
|
else if(inType & IN_ENCODER)
|
||||||
|
encoderPoll();
|
||||||
|
/* example
|
||||||
else if (inType & IN_ANALOG)
|
else if (inType & IN_ANALOG)
|
||||||
analogPoll(); */
|
analogPoll(); */
|
||||||
else
|
else
|
||||||
@@ -98,6 +100,48 @@ int Input::poll() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Input::encoderPoll() {
|
||||||
|
if (store->nextPollMillis > millis())
|
||||||
|
return;
|
||||||
|
if (store->logicState == 0) {
|
||||||
|
short real_pin;
|
||||||
|
#if defined(__AVR__)
|
||||||
|
#define interrupt_number pin
|
||||||
|
if (interrupt_number >= 0 && interrupt_number < 6) {
|
||||||
|
short mega_interrupt_array[6] = {2, 3, 21, 20, 19, 18};
|
||||||
|
real_pin = mega_interrupt_array[interrupt_number];
|
||||||
|
pinMode(real_pin, INPUT);
|
||||||
|
attachInterrupt(interrupt_number, onEncoderChanged, RISING);
|
||||||
|
} else {
|
||||||
|
Serial.print(F("IRQ:"));
|
||||||
|
Serial.print(pin);
|
||||||
|
Serial.print(F(" Encoder type. INCORRECT Interrupt number!!!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__SAM3X8E__)
|
||||||
|
pinMode(pin, INPUT);
|
||||||
|
attachInterrupt(pin, onEncoderChanged, RISING);
|
||||||
|
#endif
|
||||||
|
store->logicState = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
aJsonObject *emit = aJson.getObjectItem(inputObj, "emit");
|
||||||
|
Serial.print(F("IN:"));Serial.print(pin);Serial.print(F(" Encoder type. val="));Serial.print(store->aslong);
|
||||||
|
if (emit) {
|
||||||
|
char valstr[10];
|
||||||
|
char addrstr[100] = "";
|
||||||
|
strcat(addrstr, emit->valuestring);
|
||||||
|
sprintf(valstr, "%d", store->aslong);
|
||||||
|
mqttClient.publish(addrstr, valstr);
|
||||||
|
store->nextPollMillis = millis() + DHT_POLL_DELAY_DEFAULT;
|
||||||
|
Serial.print(F(" NextPollMillis="));Serial.println(store->nextPollMillis);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Serial.print(F(" No emit data!"));
|
||||||
|
}
|
||||||
|
|
||||||
void Input::dht22Poll() {
|
void Input::dht22Poll() {
|
||||||
#ifndef DHT_DISABLE
|
#ifndef DHT_DISABLE
|
||||||
if (store->nextPollMillis > millis())
|
if (store->nextPollMillis > millis())
|
||||||
@@ -204,3 +248,7 @@ void Input::onContactChanged(int val)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void Input::onEncoderChanged() {
|
||||||
|
store->aslong++;
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ e-mail anklimov@gmail.com
|
|||||||
#define IN_PUSH_ON 0 // PUSH - ON, Release - OFF (ovverrided by pcmd/rcmd) - DEFAULT
|
#define IN_PUSH_ON 0 // PUSH - ON, Release - OFF (ovverrided by pcmd/rcmd) - DEFAULT
|
||||||
#define IN_PUSH_TOGGLE 1 // Every physicall push toggle logical switch on/off
|
#define IN_PUSH_TOGGLE 1 // Every physicall push toggle logical switch on/off
|
||||||
#define IN_DHT22 4
|
#define IN_DHT22 4
|
||||||
|
#define IN_ENCODER 8
|
||||||
|
|
||||||
#define SAME_STATE_ATTEMPTS 3
|
#define SAME_STATE_ATTEMPTS 3
|
||||||
|
|
||||||
@@ -100,4 +101,8 @@ class Input
|
|||||||
|
|
||||||
|
|
||||||
void printFloatValueToStr(float temp, char *valstr);
|
void printFloatValueToStr(float temp, char *valstr);
|
||||||
|
|
||||||
|
void encoderPoll();
|
||||||
|
|
||||||
|
void onEncoderChanged();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
[platformio]
|
[platformio]
|
||||||
src_dir = lighthub
|
src_dir = lighthub
|
||||||
env_default =
|
env_default =
|
||||||
|
megaatmega2560
|
||||||
megaatmega2560-net
|
; megaatmega2560-net
|
||||||
; due
|
; due
|
||||||
; esp8266
|
; esp8266
|
||||||
; megaatmega2560-5500
|
; megaatmega2560-5500
|
||||||
|
|||||||
Reference in New Issue
Block a user