Portál AbcLinuxu, 21. prosince 2025 08:52
uint8_t leds_array[LEDS];
uint8_t leds_array_pointer = 0;
void leds_add(uint8_t lid) {
leds_array[leds_array_pointer] = lid;
if( leds_array_pointer < (LEDS-1) ) leds_array_pointer ++;
}
void leds_clear() {
leds_array_pointer = 0;
}
void leds_blink(uint8_t interval) {
bool leds_status_before[LEDS];
if(leds_array_pointer > 0) {
for(int i=0; i<=leds_array_pointer; i++) {
if(bit_is_set(LED_PIN, leds_array[i]))
leds_status_before[i] = true;
else
leds_status_before[i] = false;
bitSet (LED_PORT, leds_array[i]);
}
m_delay_ms(interval);
for(int i=0; i<=leds_array_pointer; i++) {
bitClear (LED_PORT, leds_array[i]);
}
m_delay_ms(interval);
for(int i=0; i<=leds_array_pointer; i++) {
if(leds_status_before[i]) bitSet (LED_PORT, leds_array[i]);
}
leds_clear();
}
}
v programu potom volám:
if(podmínka1) leds_add(LED_1);
if(podmínka2) leds_add(LED_2);
// teoreticky mohou bliknout jen led1 a led2, ale občas blikne i led3
leds_blink(LED_BLINK_INTERVAL);
Kde dělám chybu?
Řešení dotazu:
for(int i=0; i<=leds_array_pointer; i++) {
má být
for(int i=0; i<leds_array_pointer; i++) {
Po nastavení dvou LEDek je leds_array_pointer == 2, ale ten první (původní) cyklus proběhne třikrát
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.