Regluacija temperature!

Dependencies:   mbed SegDisplay

main.cpp

Committer:
ivanz
Date:
2022-02-24
Revision:
3:d21d1b10964b
Parent:
2:57ada9ef9d08

File content as of revision 3:d21d1b10964b:

#include "mbed.h"
#include "SegDisplay.h"

Serial pc(USBTX, USBRX);
AnalogIn Ain(A5); // Napon sa senzora na pin A5
DigitalOut hladenje (A1); // Izlaz za ledicu sa pina A1
DigitalOut grijanje (A2); // Izlaz za ledicu sa pina A2
DigitalOut normalno (A3); // Izalaz za ledicu sa pina A3
DigitalOut kvar (A4); // Izlaz za ledicu sa pina A4
PwmOut buzzer (PA_10); // PWM za zvučnik sa pina PA_10
PwmOut buzzer2 (D12);
InterruptIn button(A0); // Tipka za prekidnu rutinu u slučaju kvara na pinu A0
InterruptIn button2(D13); // Tipka za prekidnu rutinu koja resetira program
DigitalOut led1(A4); // Izlaz koji prikazuje prekidnu rutinu
Ticker blink; // Ticker za blinkanje ledice
Timer debounce; // Timer za prekidnu rutinu
void toggle(void); // Prekid rada
void toggle2(void); // 
float ADCdata;
float Temperatura;
int sec=0;

void kvarLEDBlink()
{
    kvar=!kvar;
}
void odbrojavanje() // Odbrojavanje kod određenog stanja
{
    if (sec>0) { // Odbrojavanje 
        Seg1 = SegConvert(sec); // Ispisivanje na 7.seg display
        wait_us (10000);
        sec--;
    }
    if (sec==0) {
        buzzer2.period(1.0/500.0);
        buzzer2=0.5;
        wait(0.5);
        buzzer2=0.0;
        sec=9;
    }
}
void vrijeme (int trajanje)  // Trajanje odbrojavanja
{
    sec = trajanje;
}

int main()
{
    pc.printf("ADC Data Values... \n\r");
    debounce.start();
    SegInit(); // Pozivanje funkcije za 7.seg display
    while (1) {
        ADCdata=Ain;
        pc.printf("Temperatura= %0.0f\n\r",ADCdata*100);
        button.rise(&toggle);
        button2.rise(&toggle2);
        wait (2);
        if (Ain <= 0.20) {
            button.rise(&toggle);
            hladenje = 0;
            grijanje = 1;
            normalno = 0;
            kvar = 0;
            buzzer = 0;
        }
        if ((Ain>0.20)&&(Ain<=0.26)) {
            hladenje = 0;
            grijanje = 0;
            normalno = 1;
            kvar = 0;
            vrijeme (9);
            buzzer = 0;
        }
        if ((Ain>0.26)&&(Ain<=0.47)) {
            hladenje = 1;
            grijanje = 0;
            normalno = 0;
            kvar = 0;
            buzzer = 0;
            odbrojavanje();
        }
        if ((Ain>0.47)&&(Ain<=1.0)) {
            hladenje = 1;
            grijanje = 1;
            normalno = 1;
            kvar = 0;
            int i;
            for (i=0; i<10; i=i+2) {
                buzzer.period(1.0/969.0);
                buzzer = float(i)/50.0;
                wait(.5);
                buzzer.period(1.0/800.0);
                wait(.5);
                pc.printf("ALARM \n\r");
            }
        }
    }
}

void toggle()
{
    if (debounce.read_ms()>200) { // Uvjet za debounce timer
        pc.printf("PREKID! \n");
        blink.attach(&kvarLEDBlink, 0.2); // Ticker za blinkanje ledice
        hladenje = 0;
        grijanje = 0;
        normalno = 0;
        buzzer= 0;
        sec=0;
        buzzer2.period(1/500.0);
        buzzer2=0;
        wait(0.01);
        buzzer2=0.0;
        wait(5);
    }
    debounce.reset(); // Restart timera
}
void toggle2()
{
    if (debounce.read_ms()>200) {
        blink.detach();
    }
}