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

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