Untitled
unknown
plain_text
a year ago
2.5 kB
5
Indexable
#include <math.h> #include <xc.h> #include <stdlib.h> #include "adc.h" #include "buttons.h" #define ALARM_THRESHOLD 128 // Połowa maksymalnej wartości potencjometru #define LED_ON() LATA = 0xFF; // Włącz wszystkie diody #define LED_OFF() LATA = 0x00; // Wyłącz wszystkie diody int main(void) { // Domyślna konfiguracja ADC ADC_SetConfiguration(ADC_CONFIGURATION_DEFAULT); // ADC ma czytać potencjometr ADC_ChannelEnable(ADC_CHANNEL_POTENTIOMETER); // Output LEDów PORT A TRISA = 0x00; // Ustaw port A jako wyjście unsigned int value; bool alarmActive = false; unsigned int alarmCounter = 0; while (1) { // Odczytanie 10-bitowej wartości z potencjometru value = ADC_Read10bit(ADC_CHANNEL_POTENTIOMETER); // Błąd if (value == 0xFFFF) { // W razie czego przechodzimy do kolejnej iteracji continue; } // Sprawdzenie, czy wartość przekracza wartość progu alarmu if (value > ALARM_THRESHOLD) { // Jeśli alarm jest nieaktywny, włączamy go if (!alarmActive) { alarmActive = true; alarmCounter = 0; } } else { // Jeśli wartość spada poniżej progu, wyłączamy alarm __delay32(500000); alarmActive = false; LED_OFF(); // Wyłączamy wszystkie diody } // Obsługa alarmu if (alarmActive) { if (alarmCounter < 2500) { // Włączamy jedną diodę i mrugamy nią przez pierwsze 5 sekund __delay32(500000); LATA |= 0b00000001; // Włącz jedną diodę __delay32(500000); LATA &= ~0b00000001; // Wyłącz diodę } else { while (1) { LED_ON(); __delay32(2500000); LED_OFF(); __delay32(2500000); if (BUTTON_IsPressed(BUTTON_S4) || BUTTON_IsPressed(BUTTON_S3)) break; } // Włącz wszystkie diody } alarmCounter += 100; // Inkrementujemy licznik czasu (odczyt co 100ms) } else { // Jeśli alarm nie jest aktywny, wyłączamy wszystkie diody LED_OFF(); // Wyłącz wszystkie diody } } return 0; }
Editor is loading...
Leave a Comment