1 #include <BayEOSCommands.h>
2 #include <BayEOSBufferRAM.h>
7 #define TASTER_VERSION 2
14 #if TASTER_VERSION == 2
28 unsigned long last_status;
31 #ifdef __AVR_ATmega168P__
41 void longPressHandler(uint8_t nr);
42 void shortPressHandler(uint8_t nr);
44 #define SAMPLING_INT 300
45 #define TICKS_PER_SECOND 1
46 #define ACTION_COUNT 1
47 #include <LowCurrentBoard.h>
51 NTC_ADC ntc(A2, A1, 20000.0, 10.0);
58 void pciSetup(
byte pin) {
59 *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin));
60 PCIFR |= bit (digitalPinToPCICRbit(pin));
61 PCICR |= bit (digitalPinToPCICRbit(pin));
64 void sendCommand(uint8_t command, uint8_t channel = 0x01, uint8_t arg = 0) {
82 uint8_t pins[] = {2, 3, 6, 7};
84 volatile uint8_t int_flag;
86 if (! int_flag) int_flag = 0x1;
90 if (! int_flag) int_flag = 0x2;
95 if (! digitalRead(6)) {
99 if (! digitalRead(7)) {
105 void initBoard(
void) {
106 uint8_t temp = MCUCR;
107 MCUCR = temp | (1 << IVCE);
108 MCUCR = temp & ~(1 << IVSEL);
110 client.init(RF24ADDRESS, RF24CHANNEL);
112 myBuffer.
setRTC(myRTC, 0);
115 for (uint8_t i = 0; i < 4; i++) {
116 pinMode(pins[i], INPUT_PULLUP);
120 attachInterrupt(digitalPinToInterrupt(2), isr_int0, FALLING);
121 attachInterrupt(digitalPinToInterrupt(3), isr_int1, FALLING);
126 uint8_t command = 0, channel = 0, int_pin;
127 uint8_t fast_ticks = 0;
129 void handlePushButton(
void) {
131 int_pin = (int_flag & 0xf) - 1;
132 if (int_flag & 0x10) {
133 if (! (int_flag & 0x20) && ! digitalRead(pins[int_pin]) && (ticks - last_int) > 6) {
135 bitClear(int_flag, 6);
137 if (digitalRead(pins[int_pin]) && (ticks - last_int) > 1) {
138 Sleep.setupTimer2(5);
143 Sleep.setupTimer2(2);
148 if (! (int_flag & 0x40)) {
152 if (int_flag & 0x20) {
153 longPressHandler(int_pin);
156 shortPressHandler(int_pin);
159 client.setTXAddr(RF24ADDRESS);
166 void sendStatus(
void){
168 if (ISSET_ACTION(0)) {
172 digitalWrite(A0, HIGH);
173 analogReference(INTERNAL);
174 int adc = analogRead(A7);
175 digitalWrite(A0, LOW);
178 analogReference(DEFAULT);
180 last_status=millis();
182 float t = ntc.getTemp();
185 float h = hr.getHumidity(t);
189 client.addChecksum();
197 if (ISSET_ACTION(7)) {
void setRTC(RTC &rtc, uint8_t timeType=RTC_ABSOLUTE_SECONDS)
Definition: BayEOSBuffer.cpp:258
Definition: BayEOSBufferRAM.h:13
void startDataFrameWithOrigin(uint8_t subtype, const char *o, uint8_t checksum=0, uint8_t routed=0)
Definition: BayEOS.cpp:27
void setBuffer(BayEOSBuffer &buffer, uint16_t max_skip=0)
Definition: BayEOS.h:452
uint8_t addChannelValue(float v, uint8_t channel_number=0)
Definition: BayEOS.cpp:61
uint8_t sendFromBuffer(void)
Definition: BayEOS.cpp:394
void startFrame(void)
Definition: BayEOS.cpp:8
uint8_t addToPayload(uint8_t b)
Definition: BayEOS.h:469
uint8_t sendOrBuffer(void)
Definition: BayEOS.cpp:369
uint8_t sendPayload(void)
Definition: BayRF24.cpp:15