Bonjour, dans le programme ci dessous j essaie dans l interruption de lire les bits d un octet a une vitesse de 1 par seconde. Avec une fonction while ou for je n'y arrive pas. Quelle est la solution pour que chaque bit s affiche toutes les secondes?
un grand merci
hw_timer_t * timer = NULL; // Declare a timer for interruption
#define OCTET_DATA 3 // nombre d octets dans une trame
int octetIndex=0; // octet actuel qui est recu
byte octetValeur[OCTET_DATA]; // Tableau stockant les octets
#define PREAMBLE 0XFFFF
#define OCTET_UNITE 0xFF
#define OCTET_UN 0xFF
#define OCTET_DEUX 0xFF
#define OCTET_TROIS 0xFF
#define OCTET_NULL 0
#define START 0
#define STOP 1
#define DCC_OUT1 2 // Sortie du signal DCC
#define PACK_IDLE 0
#define PACK_HEADER 1
#define PACK_START 2
#define PACK_BYTE 3
#define PACK_STOP 4
#define DCC_BIT_HIGH 0 // Les quatre états de l'automate bit
#define DCC_BIT_HIGH0 1
#define DCC_BIT_LOW 2
#define DCC_BIT_LOW0 3
byte DccCommande;
byte DccSubByte;
void IRAM_ATTR onTimer() { // Interrupt function
int i = 0;
while ( i <16) {
Serial.println(bitRead(PREAMBLE,i++));
}
}
void LireOctet(byte PACK) {
switch(PACK) {
case PACK_BYTE :
for (int ii=0;ii<8;ii++) {
Serial.print(bitRead(OCTET_UN,ii));
}
break;
case PACK_HEADER :
for (int ii=0;ii<16;ii++) {
Serial.print(bitRead(PREAMBLE,ii));
}
break;
}
}
void setup() {
Serial.begin(115200);
pinMode(DCC_OUT1,OUTPUT);
timer = timerBegin (0, 80, true); // Initialization
timerAttachInterrupt (timer, &onTimer, true); // Call the interrupt function
timerAlarmWrite (timer,1000000, true); // Timerbegin parameter is 80MHz, here is 1000000 Meaning 1 second
timerAlarmEnable (timer); // Timer enables
// TimerDetAnterRupt (timer); // Close the timer
}
void loop() {
if (Serial.available())
{
for (octetIndex=0;octetIndex<3;octetIndex++)
{
octetValeur[octetIndex]=Serial.parseInt(); // recupere la valeur numerique
}
}
}