#include <avr/io.h>
#include <util/delay.h>
#define BUTTON_PIN PB0
#define LED_PIN_1 PB1
#define RED_LED_PIN PB5
#define GREEN_LED_PIN PB3
#define BLUE_LED_PIN PB4
void initialize() {
// Konfiguracja pinów
DDRB |= (1 << LED_PIN_1) | (1 << RED_LED_PIN) | (1 << GREEN_LED_PIN) | (1 << BLUE_LED_PIN);
PORTB |= (1 << BUTTON_PIN); // Włączenie pull-up resistor dla przycisku
}
int main(void) {
initialize();
uint8_t buttonState = 0; // Aktualny stan przycisku
uint8_t lastButtonState = 1; // Poprzedni stan przycisku (inicjalizacja jako 1, aby uniknąć fałszywego przejścia przez zero)
uint8_t ledState = 0; // Stan diody LED (0 - wyłączona, 1 - włączona)
uint8_t rgbState = 0; // Stan diody RGB (0 - wyłączona, 1 - czerwona, 2 - zielona, 3 - niebieska, 4 - biały, 5 - fioletowy)
while (1) {
buttonState = PINB & (1 << BUTTON_PIN);
// Sprawdzenie zmiany stanu przycisku
if (buttonState == 0 && lastButtonState == 1) {
// Przycisk został naciśnięty
if (ledState == 0 && rgbState == 0) {
ledState = 1; // Zapal diodę 1
} else if (ledState == 1) {
ledState = 0; // Wyłącz diodę 1
rgbState = 1; // Zapal czerwoną diodę RGB
} else if (rgbState == 1) {
rgbState = 2; // Zapal zieloną diodę RGB
} else if (rgbState == 2) {
rgbState = 3; // Zapal niebieską diodę RGB
} else if (rgbState == 3) {
rgbState = 4; // Zapal białą diodę RGB
} else if (rgbState == 4) {
rgbState = 5; // Zapal fioletową diodę RGB
} else {
rgbState = 0; // Wyłącz diodę RGB
}
}
if (ledState) {
PORTB |= (1 << LED_PIN_1); // Włącz diodę 1
} else {
PORTB &= ~(1 << LED_PIN_1); // Wyłącz diodę 1
}
if (rgbState == 1) {
PORTB |= (1 << RED_LED_PIN); // Włącz czerwoną diodę RGB
PORTB &= ~((1 << GREEN_LED_PIN) | (1 << BLUE_LED_PIN)); // Wyłącz zieloną i niebieską
} else if (rgbState == 2) {
PORTB |= (1 << GREEN_LED_PIN); // Włącz zieloną diodę RGB
PORTB &= ~((1 << RED_LED_PIN) | (1 << BLUE_LED_PIN)); // Wyłącz czerwoną i niebieską
} else if (rgbState == 3) {
PORTB |= (1 << BLUE_LED_PIN); // Włącz niebieską diodę RGB
PORTB &= ~((1 << RED_LED_PIN) | (1 << GREEN_LED_PIN)); // Wyłącz czerwoną i zieloną
} else if (rgbState == 4) {
PORTB |= (1 << RED_LED_PIN) | (1 << GREEN_LED_PIN) | (1 << BLUE_LED_PIN); // Włącz wszystkie diody RGB
} else if (rgbState == 5) {
PORTB |= (1 << RED_LED_PIN) | (1 << BLUE_LED_PIN); // Włącz czerwoną i niebieską diodę RGB
PORTB &= ~(1 << GREEN_LED_PIN); // Wyłącz zieloną
} else {
PORTB &= ~((1 << RED_LED_PIN) | (1 << GREEN_LED_PIN) | (1 << BLUE_LED_PIN)); // Wyłącz wszystkie diody RGB
}
lastButtonState = buttonState;
// Poczekaj chwilę, aby uniknąć efektu drgania przycisku
_delay_ms(100);
}
return 0;
}