Bonjour j'aimerais créer un petit programme qui d'un côté fait clignoter une led pendant 3 secondes et en même temps envoyer un signal rythmé toutes les 58 et 116 millièmes de seconde BitUn et BitZero respectivement sur les GPIO 2 et 23.
Merci pour votre aide
j'ai essayé d'adapter un programme sur internet. Mais je ne trouve pas la solution.
volatile int interruptCounter;
int totalInterruptCounter;
int LED_BUILTIN = 27;
hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR onTimer() {
portENTER_CRITICAL_ISR(&timerMux);
interruptCounter++;
portEXIT_CRITICAL_ISR(&timerMux);
}
void setup() {
Serial.begin(115200);
timer = timerBegin(0, 4640, true); // 17240 Hz pour avoir 58 micros s par interruption
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 1, true); // toutes les 1 x 58 micro secondes
timerAlarmEnable(timer);
pinMode(2,OUTPUT);
pinMode(23,OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
if (interruptCounter > 0) {
portENTER_CRITICAL(&timerMux);
interruptCounter--;
portEXIT_CRITICAL(&timerMux);
totalInterruptCounter++;
BitUn();
BitZero();
}
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(3000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(3000);
}
void BitZero() {
digitalWrite(2,LOW);
digitalWrite(23,HIGH);
delayMicroseconds(116);
digitalWrite(2,HIGH);
digitalWrite(23,LOW);
delayMicroseconds(116);
}
void BitUn() {
digitalWrite(2,LOW);
digitalWrite(23,HIGH);
delayMicroseconds(58);
digitalWrite(2,HIGH);
digitalWrite(23,LOW);
delayMicroseconds(58);
}