AFON // радиотехник affonya@mail.ru
← Все проекты для дронов

Паттерны статусного светодиода

Разные мигания светодиода для состояний: диз­арм, арм, ошибка.

DMC.38 · Индикация и сигнал · ATmega328P

Задача

Показывать состояние аппарата разными паттернами мигания светодиода.

Алгоритм

Перечисление состояний; для каждого — своя последовательность вкл/выкл с задержками.

Исходный код (C, avr-gcc)

⇩ Скачать 38-status-led-patterns.c

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
enum { ST_DISARM, ST_ARM, ST_ERROR };
static void blink(uint8_t n,uint16_t ms){
  for(uint8_t i=0;i<n;i++){ PORTB|=(1<<PB5); _delay_ms(ms); PORTB&=~(1<<PB5); _delay_ms(ms); }
}
int main(void){
  DDRB|=(1<<PB5);
  volatile uint8_t state=ST_DISARM;
  for(;;){
    switch(state){
      case ST_DISARM: blink(1,600); break;   // редко
      case ST_ARM:    PORTB|=(1<<PB5); break; // ровно горит
      case ST_ERROR:  blink(5,80);  break;    // часто
    }
    _delay_ms(300);
  }
}

Сборка: avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os файл.c -o файл.elf

Пояснения

Единый язык миганий помогает понимать состояние без телеметрии (медленно=дизарм, быстро=ошибка).