This is my first library so feel free to burn me and vote this down :D This is a library that provides me with Watchdog deep sleep on my ATtiny85 projects.
In the test sketch I use the watchdog timer's interrupt vector
but I want to place this within the library. How can I do this?
I have tried to add this to the init
method but that did not work out;
powernap.h:26: error: expected unqualified-id before string constant
ISR(WDT_vect) {
Also; feel free to shoot at the rest of the library, I am here to learn.
Test Sketch
#include "powernap.h"
#define LED 0
Napper napper = Napper();
volatile boolean f_wdt = 1;
ISR(WDT_vect) {
f_wdt=1;
}
void setup() {
delay(2000);
napper.setup(8); // configure watchdog timer
}
void loop() { // blink
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
delay(200);
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(200);
napper.sleep(); // deep sleep
}
powernap.cpp
#include "powernap.h"
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
Napper::Napper() {
}
void Napper::init(float initial) {
// volatile boolean f_wdt = 1;
// ISR(WDT_vect) {
// f_wdt=1;
// }
}
void Napper::setup(int cycle) {
byte bb;
int ww;
if (cycle > 9 ) cycle=9;
bb=cycle & 7;
if (cycle > 7) bb|= (1<<5);
bb|= (1<<WDCE);
ww=bb;
MCUSR &= ~(1<<WDRF);
// start timed sequence
WDTCR |= (1<<WDCE) | (1<<WDE);
// set new watchdog timeout value
WDTCR = bb;
WDTCR |= _BV(WDIE);
}
void Napper::sleep() {
cbi(ADCSRA,ADEN); // switch Analog to Digitalconverter OFF
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable();
sleep_mode(); // System sleeps here
sleep_disable(); // System continues execution here when watchdog timed out
sbi(ADCSRA,ADEN); // switch Analog to Digitalconverter ON
}
powernap.h
#ifndef Fader_h
#define Fader_h
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#include "pins_arduino.h"
#include "WConstants.h"
#endif
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <util/delay.h>
class Napper {
public:
Napper();
void init(float initial);
void setup(int cycle);
void sleep();
private:
int flag;
};
#endif