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@1:448ff9efcefa, 2020-12-11 (annotated)
- Committer:
- rebecca_page
- Date:
- Fri Dec 11 15:38:14 2020 +0000
- Revision:
- 1:448ff9efcefa
- Parent:
- 0:cd8526d38aea
- Child:
- 2:2ff3b0d8c52e
11/12/2020
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 | 1:448ff9efcefa | 28 | float highTempThresh; |
rebecca_page | 1:448ff9efcefa | 29 | float lowTempThresh; |
rebecca_page | 1:448ff9efcefa | 30 | float ambientTemp; |
rebecca_page | 1:448ff9efcefa | 31 | float highLightThresh; |
rebecca_page | 1:448ff9efcefa | 32 | float lowLightThresh; |
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 | 1:448ff9efcefa | 78 | void displayData() { |
rebecca_page | 1:448ff9efcefa | 79 | sprintf(buffer, "Temerpature is %2.1f C", myData.ambientTemp); |
rebecca_page | 1:448ff9efcefa | 80 | displayAt (1, 3, buffer); |
rebecca_page | 0:cd8526d38aea | 81 | |
rebecca_page | 1:448ff9efcefa | 82 | sprintf( buffer, "Ambient Light is: %3.1f%c", myData.ambientLight, 0x25 ); |
rebecca_page | 1:448ff9efcefa | 83 | displayAt(1,4, buffer); |
rebecca_page | 1:448ff9efcefa | 84 | } |
rebecca_page | 1:448ff9efcefa | 85 | void displayAt( int y, int x, char *buffer ) { |
rebecca_page | 1:448ff9efcefa | 86 | printf("\033[%d;%dH%s", y, x, buffer); |
rebecca_page | 1:448ff9efcefa | 87 | fflush(stdout); |
rebecca_page | 0:cd8526d38aea | 88 | } |
rebecca_page | 1:448ff9efcefa | 89 | |
rebecca_page | 1:448ff9efcefa | 90 | void initialise() { |
rebecca_page | 1:448ff9efcefa | 91 | printf("\033[2J\033[H"); // clear screen and move the cursor to 0, 0 |
rebecca_page | 1:448ff9efcefa | 92 | printf("\033[?25l"); // Turn off visable cursor |
rebecca_page | 1:448ff9efcefa | 93 | fflush(stdout); // send the codes to the terminal |
rebecca_page | 1:448ff9efcefa | 94 | printf("Environmental Control System"); |
rebecca_page | 1:448ff9efcefa | 95 | // printf( "|033[34m" ); |
rebecca_page | 1:448ff9efcefa | 96 | } |