Untitled

 avatar
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