Untitled
unknown
plain_text
2 years ago
2.5 kB
9
Indexable
#include <math.h>
#include <xc.h>
#include <stdlib.h>
#include "adc.h"
#include "buttons.h"
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 i mrugaj nimi
LATA = LED_ALL; // Włącz wszystkie diody
__delay32(500000); // Odczekaj 500ms
LATA ^= LED_ALL; // Wyłącz wszystkie diody
__delay32(500000); // Odczekaj 500ms
}
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