Untitled

mail@pastecode.io avatar
unknown
plain_text
23 days ago
2.4 kB
5
Indexable
Never
#include <xc.h>
#include <libpic30.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "lcd.h"
#include "buttons.h"
#include "adc.h"

// Stałe definiujące maksymalny czas i minimalny poziom mocy
#define MAX_COOK_TIME_SECONDS (600)
#define MIN_POWER_WATTS (200)

// Zmienne przechowujące stan kuchenki mikrofalowej
volatile unsigned int remainingTimeSeconds = 0; 
volatile unsigned int currentPowerWatts = MIN_POWER_WATTS; 
int isMicrowaveRunning = 0; 
int shouldReset = 0; 

// Funkcja aktualizująca wyświetlacz LCD
void displayMicrowaveStatus() {
    char displayText[32];
    unsigned char minutes = remainingTimeSeconds / 60;
    unsigned char seconds = remainingTimeSeconds % 60;

    sprintf(displayText, "Time: %02u:%02u\nPower: %dW\n", minutes, seconds, currentPowerWatts);
    LCD_ClearScreen();
    LCD_PutString(displayText, strlen(displayText));
}

int main(void) {
    // Inicjalizacja modułów ADC i LCD
    ADC_SetConfiguration(ADC_CONFIGURATION_DEFAULT);
    ADC_ChannelEnable(ADC_CHANNEL_POTENTIOMETER);
    TRISA = 0x0000;
    LCD_Initialize();

    while (!shouldReset) { 
        // Odczyt wartości potencjometru i obliczenie mocy
        unsigned int potentiometerValue = (unsigned int)round(ADC_Read10bit(ADC_CHANNEL_POTENTIOMETER));
        currentPowerWatts = potentiometerValue * 2; 

        // Obsługa przycisków
        if (BUTTON_IsPressed(BUTTON_S4)) { 
            remainingTimeSeconds += 60; 
            if (remainingTimeSeconds > MAX_COOK_TIME_SECONDS)
                remainingTimeSeconds = MAX_COOK_TIME_SECONDS;
            while (BUTTON_IsPressed(BUTTON_S4)) {} // Czekaj na zwolnienie przycisku
        }

        if (BUTTON_IsPressed(BUTTON_S6)) {
            isMicrowaveRunning = !isMicrowaveRunning; // Włącz/wyłącz mikrofalówkę
            while (BUTTON_IsPressed(BUTTON_S6)) {} 
        }

        if (BUTTON_IsPressed(BUTTON_S3)) {
            shouldReset = 1; 
            while (BUTTON_IsPressed(BUTTON_S3)) {} 
        }

        // Odliczanie czasu, jeśli mikrofalówka działa
        if (isMicrowaveRunning && remainingTimeSeconds > 0) {
            remainingTimeSeconds--;
        }

        // Aktualizacja wyświetlacza i krótkie opóźnienie
        displayMicrowaveStatus();
        __delay32(2000000); 
    }

    return 0;
}
Leave a Comment