Becky Page / Mbed OS Blinkcopy
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?

UserRevisionLine numberNew 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 }