Untitled
unknown
plain_text
a year ago
2.5 kB
4
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_MASK 0b00000001 // Maska dla jednej diody #define LED_ALL 0xFF // Włą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; bool alarmButtonWasPressed = false; 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 if (alarmActive) { alarmActive = false; LED_OFF(); // Wyłącz wszystkie diody } } // Obsługa alarmu if (alarmActive) { if (alarmCounter < 2500) { // Mruganie jedną diodą przez pierwsze 5 sekund LATA ^= LED_MASK; // Zmiana stanu diody __delay32(500000); } else { // Włącz wszystkie diody LED_ON(); } alarmCounter += 100; // Inkrementujemy licznik czasu (odczyt co 100ms) } // Sprawdzenie przycisku wyłączania alarmu if (BUTTON_IsPressed(BUTTON_S4) || BUTTON_IsPressed(BUTTON_S3)) { alarmButtonWasPressed = true; } // Wyłączenie alarmu przyciskiem if (alarmButtonWasPressed && alarmActive) { alarmActive = false; LED_OFF(); // Wyłącz wszystkie diody alarmButtonWasPressed = false; // Wyzerowanie flagi przycisku } } return 0; }
Editor is loading...
Leave a Comment