Exemple simple qui envoie l'état d'un bouton poussoir à chaque cycle et qui allume une LED en fonction. Une autre LED permet de visualiser la réponse du hub.
#include <avrio/led.h>
#include <avrio/button.h>
#include <avrio/delay.h>
#include <idwarf/sensor.h>
volatile bool xButChanged = false;
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) {
for (;;) {
}
}
void
vConfigForSleep (uint16_t * pusSampleInterval) {
PCICR |=
_BV(BUTTON_PCIE);
BUTTON_PCMSK |=
_BV(BUTTON_BUTTON1_PCINT);
for ( ;*pusSampleInterval > 0 ; (*pusSampleInterval)--) {
if (xButChanged)
break;
}
xButChanged = 0;
*pusSampleInterval = 0;
}
void
vExitFromSleep (void) {
}
void
vBackchannelProcess (uint8_t ucUserData, uint8_t * pucBuffer, uint8_t ucLength) {
}
uint8_t
ucTxProcess (volatile uint8_t * pucTxData) {
static uint8_t ucData;
uint8_t ucBtn;
uint8_t * pucFirst;
ucData++;
pucFirst = (uint8_t *) pucTxData;
*pucTxData++ = ucBtn;
*pucTxData++ = ucData;
return pucTxData - pucFirst;
}
ISR (BUTTON_vect) {
PCICR &= ~
_BV(BUTTON_PCIE);
xButChanged = 1;
}