Forum modelarskie RC , projektowanie CAD http://forum.aerodesignworks.eu/ |
|
Sygnalizator LED http://forum.aerodesignworks.eu/viewtopic.php?f=14&t=1606 |
Strona 1 z 1 |
Autor: | mgr [ 21 wrz 2017, o 19:03 ] |
Tytuł: | Sygnalizator LED |
Ostatnio by urozmaicić dzieciakom zabawę zrobiłem im sygnalizatory LED. Zabawa autami nabrała nowego znaczenia a przy okazji dzieciaki się uczą rozpoznawać światła i zachowania na drodze Wyszło tak: Załącznik: Załącznik: Płytka sterowania: Załącznik: Całość oparte o mikrokontroler ATTiny13V - wersja na niskie napięcie zasilania. Jako zasilanie służy bateria CR2032. Schemat banalny, złącze programowania uC i połączenie do diod. Załącznik: Program sterujący napisany w C, skompilowany w darmowym Atmel Studio 7.: Sygnalizator posiada dwa tryby pracy które włączają się na przemiennie przed startem. * tryb 1: uszkodzenie - ciągle migające pomarańczowe * tryb 2: Normalna praca - pełen cykl Kod: /* * Sygnalizator.c * * Created: 2017-09-13 16:13:43 * Author : mgr */ #ifndef F_CPU #define F_CPU 1200000 #endif #include <avr/io.h> #include <util/delay.h> #include <avr/eeprom.h> enum Power { On = 0, Off } Power; enum Led { Green, Yellow, Red } Led; void ChangeState(enum Led led, enum Power power) { int pin =0; switch(led) { case Green: pin = (1 << PINB2); break; case Yellow: pin = (1 << PINB4); break; case Red: pin = (1 << PINB3); break; } if(power == On) { PORTB &= ~pin; } else { PORTB |= pin; } } void normal() { //Setup Green ChangeState(Red, Off); ChangeState(Yellow, Off); ChangeState(Green, On); _delay_ms(7000); ChangeState(Green, Off); ChangeState(Yellow, On); _delay_ms(2000); ChangeState(Yellow, Off); ChangeState(Red, On); _delay_ms(7000); ChangeState(Yellow, On); _delay_ms(2000); } void error() { ChangeState(Yellow, On); _delay_ms(1000); ChangeState(Yellow, Off); _delay_ms(1000); } int main(void) { DDRB = 0xFF; ChangeState(Green, Off); ChangeState(Red, Off); ChangeState(Yellow, Off); int mode = eeprom_read_byte(0x00); if(mode == 0xFF) { eeprom_write_byte(0x00, 0x00); mode = 0x00; } eeprom_write_byte(0x00, mode ^ 1); while (1) { if(mode == 0) { normal(); } else { error(); } } } W załączniku pełne pliki projektu w Eagle. Załącznik:
|
Strona 1 z 1 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |