Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@2:2ff3b0d8c52e, 2020-12-11 (annotated)
- Committer:
- rebecca_page
- Date:
- Fri Dec 11 16:22:08 2020 +0000
- Revision:
- 2:2ff3b0d8c52e
- Parent:
- 1:448ff9efcefa
Newest edition
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebecca_page | 0:cd8526d38aea | 1 | /* mbed Microcontroller Library |
rebecca_page | 0:cd8526d38aea | 2 | * Copyright (c) 2019 ARM Limited |
rebecca_page | 0:cd8526d38aea | 3 | * SPDX-License-Identifier: Apache-2.0 |
rebecca_page | 0:cd8526d38aea | 4 | */ |
rebecca_page | 0:cd8526d38aea | 5 | |
rebecca_page | 0:cd8526d38aea | 6 | #include "mbed.h" |
rebecca_page | 0:cd8526d38aea | 7 | #include "platform/mbed_thread.h" |
rebecca_page | 1:448ff9efcefa | 8 | #include "stdio.h" |
rebecca_page | 0:cd8526d38aea | 9 | |
rebecca_page | 0:cd8526d38aea | 10 | // Blinking rate in milliseconds |
rebecca_page | 0:cd8526d38aea | 11 | #define BLINKING_RATE_MS 500 |
rebecca_page | 0:cd8526d38aea | 12 | #define SW2 P0_4 |
rebecca_page | 0:cd8526d38aea | 13 | // #define alsOut P10_0 |
rebecca_page | 0:cd8526d38aea | 14 | |
rebecca_page | 1:448ff9efcefa | 15 | //Global variables |
rebecca_page | 1:448ff9efcefa | 16 | char buffer[80]; |
rebecca_page | 0:cd8526d38aea | 17 | // Initialise the digital pin LED1 as an output |
rebecca_page | 0:cd8526d38aea | 18 | DigitalOut led(LED1); |
rebecca_page | 0:cd8526d38aea | 19 | DigitalIn pushButton(SW2, PullUp); |
rebecca_page | 0:cd8526d38aea | 20 | DigitalOut thermVcc(P10_3); |
rebecca_page | 0:cd8526d38aea | 21 | DigitalOut thermGnd(P10_0); |
rebecca_page | 0:cd8526d38aea | 22 | AnalogIn thermVal(P10_1); |
rebecca_page | 1:448ff9efcefa | 23 | AnalogIn lightLevel(P10_4); |
rebecca_page | 1:448ff9efcefa | 24 | |
rebecca_page | 1:448ff9efcefa | 25 | /* Data Structures */ |
rebecca_page | 1:448ff9efcefa | 26 | |
rebecca_page | 1:448ff9efcefa | 27 | struct dataSet { |
rebecca_page | 2:2ff3b0d8c52e | 28 | float highTempThresh = 26; |
rebecca_page | 2:2ff3b0d8c52e | 29 | float lowTempThresh = 23; |
rebecca_page | 1:448ff9efcefa | 30 | float ambientTemp; |
rebecca_page | 2:2ff3b0d8c52e | 31 | float highLightThresh = 80; |
rebecca_page | 2:2ff3b0d8c52e | 32 | float lowLightThresh = 20; |
rebecca_page | 1:448ff9efcefa | 33 | float ambientLight; |
rebecca_page | 1:448ff9efcefa | 34 | } myData; |
rebecca_page | 1:448ff9efcefa | 35 | |
rebecca_page | 1:448ff9efcefa | 36 | /* prototype of function */ |
rebecca_page | 1:448ff9efcefa | 37 | void displayAt( int y, int x, char *buffer ); |
rebecca_page | 1:448ff9efcefa | 38 | void initialise(); |
rebecca_page | 1:448ff9efcefa | 39 | void readSensors(); |
rebecca_page | 1:448ff9efcefa | 40 | void displayData(); |
rebecca_page | 1:448ff9efcefa | 41 | |
rebecca_page | 1:448ff9efcefa | 42 | int main() |
rebecca_page | 1:448ff9efcefa | 43 | { |
rebecca_page | 1:448ff9efcefa | 44 | initialise(); // function to setup VT100 display |
rebecca_page | 1:448ff9efcefa | 45 | |
rebecca_page | 1:448ff9efcefa | 46 | /****************************************************************************************** |
rebecca_page | 1:448ff9efcefa | 47 | * |
rebecca_page | 1:448ff9efcefa | 48 | * Main loop:= |
rebecca_page | 1:448ff9efcefa | 49 | * |
rebecca_page | 1:448ff9efcefa | 50 | * flash status led |
rebecca_page | 1:448ff9efcefa | 51 | * read sensors |
rebecca_page | 1:448ff9efcefa | 52 | * display data read from the sensors and threshold values |
rebecca_page | 1:448ff9efcefa | 53 | * sleep for 0.5seconds |
rebecca_page | 1:448ff9efcefa | 54 | * |
rebecca_page | 1:448ff9efcefa | 55 | *******************************************************************************************/ |
rebecca_page | 1:448ff9efcefa | 56 | |
rebecca_page | 0:cd8526d38aea | 57 | while (true) { |
rebecca_page | 1:448ff9efcefa | 58 | led=!led; // flashing status signal |
rebecca_page | 1:448ff9efcefa | 59 | readSensors(); |
rebecca_page | 1:448ff9efcefa | 60 | displayData(); |
rebecca_page | 1:448ff9efcefa | 61 | thread_sleep_for(BLINKING_RATE_MS); |
rebecca_page | 1:448ff9efcefa | 62 | } |
rebecca_page | 1:448ff9efcefa | 63 | } |
rebecca_page | 1:448ff9efcefa | 64 | void readSensors() { |
rebecca_page | 1:448ff9efcefa | 65 | /*read thermistor Voltage*/ |
rebecca_page | 0:cd8526d38aea | 66 | float refVoltage = thermVal.read() * 2.4;// Range of ADC 0->2*Vref |
rebecca_page | 0:cd8526d38aea | 67 | float refCurrent = refVoltage / 10000.0; //10k Reference Resistor |
rebecca_page | 0:cd8526d38aea | 68 | float therVoltage = 3.3 - refVoltage; // Assume supply voltage is 3.3v |
rebecca_page | 0:cd8526d38aea | 69 | float thermResistance = therVoltage / refCurrent; |
rebecca_page | 0:cd8526d38aea | 70 | float logrT = (float32_t)log((float64_t)thermResistance); |
rebecca_page | 0:cd8526d38aea | 71 | |
rebecca_page | 0:cd8526d38aea | 72 | /*Calculate temperature from the resistance of thermistor using Steinhart-Hart Equation*/ |
rebecca_page | 0:cd8526d38aea | 73 | float stEqn = (float32_t) ((0.0009032679) + ((0.000248772) * logrT) + ((2.041094E-07) * pow((float64)logrT, (float32)3))); |
rebecca_page | 0:cd8526d38aea | 74 | |
rebecca_page | 1:448ff9efcefa | 75 | myData.ambientTemp = (float32_t)(((1.0 / stEqn) - 273.15) + 0.5); |
rebecca_page | 1:448ff9efcefa | 76 | myData.ambientLight = lightLevel.read() * 100; |
rebecca_page | 1:448ff9efcefa | 77 | } |
rebecca_page | 2:2ff3b0d8c52e | 78 | void displayData() { |
rebecca_page | 2:2ff3b0d8c52e | 79 | if (myData.ambientTemp > myData.highTempThresh) printf("\033[31m"); //Red Text |
rebecca_page | 2:2ff3b0d8c52e | 80 | else if (myData.ambientTemp > myData.lowTempThresh) printf("\033[34m"); //Blue Text |
rebecca_page | 2:2ff3b0d8c52e | 81 | else printf("\033[32m"); // Green Text |
rebecca_page | 1:448ff9efcefa | 82 | sprintf(buffer, "Temerpature is %2.1f C", myData.ambientTemp); |
rebecca_page | 1:448ff9efcefa | 83 | displayAt (1, 3, buffer); |
rebecca_page | 2:2ff3b0d8c52e | 84 | sprintf(buffer, "Low Threshold is %2.1f C", myData.lowTempThresh); |
rebecca_page | 2:2ff3b0d8c52e | 85 | printf("\033[37m"); // default text |
rebecca_page | 2:2ff3b0d8c52e | 86 | displayAt (27, 3, buffer); |
rebecca_page | 2:2ff3b0d8c52e | 87 | sprintf(buffer, "High Threshold is %2.1f C", myData.highTempThresh); |
rebecca_page | 2:2ff3b0d8c52e | 88 | displayAt (55, 3, buffer); |
rebecca_page | 0:cd8526d38aea | 89 | |
rebecca_page | 1:448ff9efcefa | 90 | sprintf( buffer, "Ambient Light is: %3.1f%c", myData.ambientLight, 0x25 ); |
rebecca_page | 1:448ff9efcefa | 91 | displayAt(1,4, buffer); |
rebecca_page | 1:448ff9efcefa | 92 | } |
rebecca_page | 1:448ff9efcefa | 93 | void displayAt( int y, int x, char *buffer ) { |
rebecca_page | 1:448ff9efcefa | 94 | printf("\033[%d;%dH%s", y, x, buffer); |
rebecca_page | 1:448ff9efcefa | 95 | fflush(stdout); |
rebecca_page | 0:cd8526d38aea | 96 | } |
rebecca_page | 1:448ff9efcefa | 97 | |
rebecca_page | 1:448ff9efcefa | 98 | void initialise() { |
rebecca_page | 1:448ff9efcefa | 99 | printf("\033[2J\033[H"); // clear screen and move the cursor to 0, 0 |
rebecca_page | 1:448ff9efcefa | 100 | printf("\033[?25l"); // Turn off visable cursor |
rebecca_page | 1:448ff9efcefa | 101 | fflush(stdout); // send the codes to the terminal |
rebecca_page | 1:448ff9efcefa | 102 | printf("Environmental Control System"); |
rebecca_page | 1:448ff9efcefa | 103 | // printf( "|033[34m" ); |
rebecca_page | 1:448ff9efcefa | 104 | } |