Untitled
unknown
plain_text
a year ago
2.2 kB
2
Indexable
#include <math.h> #include <xc.h> #include <stdlib.h> #include "adc.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 LED_ON(); // Włącz jedną diodę __delay32(1500000); // Opóźnienie - zmniejszone dla szybszego mrugania LED_OFF(); // Wyłącz diodę } else { // Po upływie 5 sekund włączamy wszystkie diody LED_ON(); // Włącz wszystkie diody } alarm_counter += 150; // Inkrementujemy licznik czasu (odczyt co 150ms) } 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