From eaac4532d14ade749bd79b1e5b786e1e5906e213 Mon Sep 17 00:00:00 2001 From: "Omar2.Zayed@live.uwe.ac.uk" <omar2.zayed@live.uwe.ac.uk> Date: Wed, 16 Apr 2025 17:15:16 +0000 Subject: [PATCH] the final code for every question --- final code for task 3 | 86 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 final code for task 3 diff --git a/final code for task 3 b/final code for task 3 new file mode 100644 index 0000000..653ba3d --- /dev/null +++ b/final code for task 3 @@ -0,0 +1,86 @@ +#include "mbed.h" +#include "arm_book_lib.h" + +DigitalIn key2(D2); +DigitalIn key3(D3); +DigitalIn gasSensor(D4); +DigitalIn tempSensor(D5); + +DigitalOut alarmLed(LED1); +UnbufferedSerial uart(USBTX, USBRX); + +bool debounce(DigitalIn& button); +void sendStatus(); +void checkWarnings(); + +bool alarmState = false; +bool previousGas = false; +bool previousTemp = false; + +int main() +{ + key2.mode(PullDown); + key3.mode(PullDown); + gasSensor.mode(PullDown); + tempSensor.mode(PullDown); + + uart.baud(115200); + uart.format(8, SerialBase::None, 1); + + while (true) { + if (debounce(key2)) { + const char* msg = gasSensor ? "\r\nGas detected.\r\n" : "\r\nGas not detected.\r\n"; + uart.write(msg, strlen(msg)); + } + + if (debounce(key3)) { + const char* msg = tempSensor ? "\r\nHigh temperature detected.\r\n" : "\r\nTemperature normal.\r\n"; + uart.write(msg, strlen(msg)); + } + + alarmState = gasSensor || tempSensor; + alarmLed = alarmState; + + sendStatus(); + checkWarnings(); + + ThisThread::sleep_for(1s); + } +} + +bool debounce(DigitalIn& button) +{ + if (button.read()) { + ThisThread::sleep_for(150ms); + return button.read(); + } + return false; +} + +void sendStatus() +{ + const char* alarmMsg = alarmState ? "ON" : "OFF"; + const char* gasMsg = gasSensor ? "DETECTED" : "CLEAR"; + const char* tempMsg = tempSensor ? "HIGH" : "NORMAL"; + + char buffer[80]; + sprintf(buffer, "\r\n[STATUS] Alarm: %s | Gas: %s | Temp: %s\r\n", alarmMsg, gasMsg, tempMsg); + uart.write(buffer, strlen(buffer)); +} + +void checkWarnings() +{ + bool currentGas = gasSensor.read(); + bool currentTemp = tempSensor.read(); + + if (currentGas && !previousGas) { + uart.write("\r\n[WARNING] Gas level exceeds safe limit!\r\n", 42); + } + + if (currentTemp && !previousTemp) { + uart.write("\r\n[WARNING] Temperature exceeds safe limit!\r\n", 47); + } + + previousGas = currentGas; + previousTemp = currentTemp; +} -- GitLab