The final project of Embedde class.

Dependencies:   C12832 LM75B ESP-call MMA7660

ALARM/ALARM.cpp

Committer:
pkr7098
Date:
2021-06-03
Revision:
2:37756b51ccdb
Parent:
1:ed1c6618f739

File content as of revision 2:37756b51ccdb:

#include "ALARM.h"

short alarmHour = 0;
short alarmMinute = 12;
short alarmSecond = 00;
bool alarmState = false;

Semaphore semaphoreAlarmData(0, 1);
Thread _threadAlarm[2];
void _alarmGetDataFromHTML(void)
{
    while(1) {
        semaphoreWifiHasBuffer.acquire();
        PC.printf("%s\r\n", wifiReceivedBuffer);
        alarmHour = 10 * (wifiReceivedBuffer[1] - '0') + (wifiReceivedBuffer[2] - '0');
        alarmMinute = 10 * (wifiReceivedBuffer[6] - '0') + (wifiReceivedBuffer[7] - '0');
        alarmSecond = 10 * (wifiReceivedBuffer[11] - '0') + (wifiReceivedBuffer[12] - '0');

        if((0 <= alarmHour && alarmHour < 24) &&
                (0 <= alarmMinute && alarmMinute < 60) &&
                (0 <= alarmSecond && alarmSecond < 60)) {
            alarmState = true;
        } else {
            alarmState = false;
        }
        semaphoreAlarmData.release();
        buzzerRinging(4, 50);
    }
}

void _alarmDoAlert(void)
{
    short _alarmHour, _timerHour;
    short _alarmMinute, _timerMinute;
    short _alarmSecond, _timerSecond;
    bool _alarmState;
    while(1) {
        semaphoreAlarmData.acquire();
        _alarmHour = alarmHour;
        _alarmMinute = alarmMinute;
        _alarmSecond = alarmSecond;
        _alarmState = alarmState;
        semaphoreAlarmData.release();

        semaphoreTimer.acquire();
        _timerHour = timerHour;
        _timerMinute = timerMinute;
        _timerSecond = timerSecond;
        semaphoreTimer.release();

        if(_alarmState == true) {
            if(_alarmHour == _timerHour) {
                if(_alarmMinute == _timerMinute) {
                    if(_alarmSecond == _timerSecond) {
                        bellSingleAlert(1000 * 30);
                    }
                }
            }
        }
    }
}

void alarmInit(void)
{
    _threadAlarm[0].start(_alarmGetDataFromHTML);
    _threadAlarm[1].start(_alarmDoAlert);
    semaphoreAlarmData.release();
}