Bascule l'état d'une LED à chaque réception d'informations du hub.
#include <avr/interrupt.h>
#include <avrio/ds1621.h>
#include <avrio/led.h>
#include <avrio/button.h>
#include <avrio/delay.h>
#include <avrio/ds1621.h>
#include <idwarf/sensor.h>
#include "terminal_sensor.h"
#define LED_ALIVE LED_LED1
#define LED_BACKDATA LED_LED2
#define DS1621_SLADDR DS1621_BASE
volatile bool xButChanged = false;
volatile int16_t iTemp;
void vConfigForSleep (uint16_t * pusSampleInterval);
void vExitFromSleep (void);
void vBackchannelProcess (uint8_t ucUserData, uint8_t * pucBuffer, uint8_t ucLength);
uint8_t ucTxProcess (volatile uint8_t * pucTxData);
int
main (void) {
vBatteryMonitorInit();
vLdrInit();
for (;;) {
}
}
void
vConfigForSleep (uint16_t * pusSampleInterval) {
if (*pusSampleInterval < 6)
*pusSampleInterval = 6;
vLdrDisable();
PCICR |=
_BV(BUTTON_PCIE);
BUTTON_PCMSK |=
_BV(BUTTON_BUTTON1_PCINT);
for ( ;*pusSampleInterval > 0 ; (*pusSampleInterval)--) {
if (xButChanged)
break;
}
xButChanged = 0;
*pusSampleInterval = 0;
}
void
vExitFromSleep (void) {
iTemp = iDs1621GetTemp (DS1621_SLADDR);
vLdrEnable();
}
uint8_t
ucTxProcess (volatile uint8_t * pucTxData) {
uint8_t ucBatt, ucLdr, ucBtn;
uint8_t * pucFirstByte;
ucBatt = ucReadAdc(BATT);
ucLdr = ucReadAdc(LDR);
pucFirstByte = (uint8_t *) pucTxData;
*pucTxData++ = ucBtn;
*pucTxData++ = ucBatt;
*pucTxData++ = (iTemp >> 8);
*pucTxData++ = (iTemp & 0xff);
*pucTxData++ = ucLdr;
return pucTxData - pucFirstByte;
}
void
vBackchannelProcess (uint8_t ucUserData, uint8_t * pucBuffer, uint8_t ucLength) {
if (ucLength > 0) {
}
}
ISR (BUTTON_vect) {
PCICR &= ~
_BV(BUTTON_PCIE);
xButChanged = 1;
}