Untitled
unknown
plain_text
2 years ago
2.1 kB
10
Indexable
#include "adc.h"
#include <xc.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 alarm_active = false;
unsigned int alarm_counter = 0;
while (1)
{
// Czytanie 10-bit 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ść nastawy alarmu
if (value > ALARM_THRESHOLD) {
// Jeśli alarm jest nieaktywny, włączamy go
if (!alarm_active) {
alarm_active = true;
alarm_counter = 0;
}
} else {
// Jeśli wartość spadła poniżej wartości nastawy, wyłączamy alarm
alarm_active = false;
LED_OFF(); // Wyłączamy wszystkie diody
}
// Obsługa alarmu
if (alarm_active) {
if (alarm_counter < 5000) {
// Włączamy jedną diodę i mrugamy nią przez pierwsze 5 sekund
LATA = 0b00000001; // Włącz jedną diodę
} else {
// Po upływie 5 sekund włączamy wszystkie diody
LED_ON(); // Włącz wszystkie diody
}
alarm_counter += 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