Hi,
ich habe nochmal etwas am den Code rumgespielt.
Sieht jetz so aus:
#include <Ports.h>
#include <RF12.h>
#include <avr/sleep.h>
#define LOGGERNUM 56
#define TESTSEC 5
volatile int flag=0;
static byte radioIsOn,testval = 1;
volatile long cnt = 0;
volatile long cnt_old = cnt;
volatile int old_millis = millis();
typedef struct {
unsigned int device;
unsigned int error;
unsigned int lobat;
unsigned int status1;
} msgstruct;
void count(){
sleep_disable();
flag=1;
}
void setup() {
Serial.begin(57600);
Serial.println("Logger");
rf12_initialize(8, RF12_868MHZ, 5);
rf12_easyInit(0);
rf12_sleep(0); // turn the radio off
radioIsOn = 0;
attachInterrupt(1, count, FALLING);
sleepNow();
}
void loop() {
if (flag==1)
{
flag=2;
Serial.println("Sending starts");
domessage();
}
if (radioIsOn && rf12_easyPoll() == 0 && flag==0) {
Serial.println("Sending done");
rf12_sleep(0); // turn the radio off
radioIsOn = 0;
Serial.println("Sleep");
sleepNow();
}
}
void sleepNow()
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
}
void domessage()
{
Serial.println("Msg starts");
int m_delta = millis() - old_millis;
if(m_delta > 200 ){
if (testval==1) testval=0; else testval=1;
msgstruct msgfile;
msgfile.device = LOGGERNUM;
msgfile.error = 123;
msgfile.lobat = rf12_lowbat();
msgfile.status1 = testval;
wakeupToSend(&msgfile, sizeof msgfile);
old_millis = millis();
}
}
static void wakeupToSend (const void* ptr, byte len) {
char sending = rf12_easySend(ptr, len);
if (sending) {
// make sure the radio is on again
if (!radioIsOn)
rf12_sleep(-1); // turn the radio back on
radioIsOn = 1;
flag=0;
}
}
Vielen Dank.
Gruß kami