cregans lab 9 task 1

Dependencies:   mbed LM75B C12832_lcd

Committer:
andrewbw01
Date:
Mon Mar 22 20:38:46 2021 +0000
Revision:
1:6c219a7a64a1
Parent:
0:667ac0287afa
lab9 task 2-4 creg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewbw01 1:6c219a7a64a1 1 // Lab 9 Task 2-4
andrewbw01 0:667ac0287afa 2
andrewbw01 0:667ac0287afa 3 #include "mbed.h"
andrewbw01 0:667ac0287afa 4 #include "C12832_lcd.h"
andrewbw01 0:667ac0287afa 5 #include "LM75B.h"
andrewbw01 0:667ac0287afa 6
andrewbw01 0:667ac0287afa 7
andrewbw01 0:667ac0287afa 8 // C12832 LCD display library by Peter Drescher
andrewbw01 0:667ac0287afa 9 // https://os.mbed.com/users/dreschpe/code/C12832_lcd/
andrewbw01 0:667ac0287afa 10 //
andrewbw01 0:667ac0287afa 11 // LM75B temperature sensor library by Neil Thiessen
andrewbw01 0:667ac0287afa 12 // https://os.mbed.com/users/neilt6/code/LM75B/
andrewbw01 0:667ac0287afa 13
andrewbw01 0:667ac0287afa 14
andrewbw01 0:667ac0287afa 15 // **** Global Variables *****
andrewbw01 0:667ac0287afa 16 C12832_LCD lcd; // Create LCD display object 128 x 32
andrewbw01 0:667ac0287afa 17 LM75B t_sensor(p28,p27); // Create temp sensor object Addr 0x90
andrewbw01 0:667ac0287afa 18
andrewbw01 0:667ac0287afa 19 DigitalOut led_1(LED1); // Onboard LED used for debugging
andrewbw01 0:667ac0287afa 20 AnalogIn wheel_1(p19); // Pot 1 on pin 19 (range 0.0 to 1.0)
andrewbw01 0:667ac0287afa 21
andrewbw01 0:667ac0287afa 22 DigitalIn pb_centre(p14); // joystick centre push button
andrewbw01 0:667ac0287afa 23
andrewbw01 0:667ac0287afa 24 Serial pc(USBTX,USBRX); // Serial comms object
andrewbw01 0:667ac0287afa 25
andrewbw01 1:6c219a7a64a1 26 int state; // Store program state - Display temp in 1=Celsius 2=Fahrenheit
andrewbw01 0:667ac0287afa 27
andrewbw01 0:667ac0287afa 28 char welcome_str[] ="Lab Number 9"; // Welcome string
andrewbw01 0:667ac0287afa 29
andrewbw01 0:667ac0287afa 30
andrewbw01 0:667ac0287afa 31 // ***** Function prototypes *****
andrewbw01 0:667ac0287afa 32 // Just specify the data types that are used by each function
andrewbw01 0:667ac0287afa 33 //
andrewbw01 1:6c219a7a64a1 34 void pulse_LCD(DigitalOut, int); // Pulse the LED a number of times
andrewbw01 0:667ac0287afa 35
andrewbw01 0:667ac0287afa 36
andrewbw01 0:667ac0287afa 37
andrewbw01 0:667ac0287afa 38 int main()
andrewbw01 0:667ac0287afa 39 {
andrewbw01 1:6c219a7a64a1 40 // local variables
andrewbw01 1:6c219a7a64a1 41 float temp_c = 0; // Initialse variable for current temperature in Celsius
andrewbw01 1:6c219a7a64a1 42 float temp_f = 0; // Current temperature in Fahrenheit
andrewbw01 1:6c219a7a64a1 43
andrewbw01 1:6c219a7a64a1 44 int serial_char = 0; // Character buffer from serial port
andrewbw01 1:6c219a7a64a1 45
andrewbw01 1:6c219a7a64a1 46 // Initialise global variables
andrewbw01 1:6c219a7a64a1 47 state = 1; // Display temperature in Celsius
andrewbw01 1:6c219a7a64a1 48
andrewbw01 1:6c219a7a64a1 49
andrewbw01 1:6c219a7a64a1 50
andrewbw01 0:667ac0287afa 51 if (t_sensor.open()) // Initialise temp sensor by calling .open()
andrewbw01 0:667ac0287afa 52 {
andrewbw01 0:667ac0287afa 53 //pc.printf("LM75B Device detected!\n"); // Debug message
andrewbw01 0:667ac0287afa 54 }
andrewbw01 0:667ac0287afa 55 else
andrewbw01 0:667ac0287afa 56 {
andrewbw01 0:667ac0287afa 57 //pc.error("LM75B Device not detected!\n"); // Debug message
andrewbw01 0:667ac0287afa 58 }
andrewbw01 0:667ac0287afa 59
andrewbw01 0:667ac0287afa 60 while(1)
andrewbw01 0:667ac0287afa 61 {
andrewbw01 1:6c219a7a64a1 62 if(pb_centre==1) // Center push button pressed
andrewbw01 1:6c219a7a64a1 63 {
andrewbw01 1:6c219a7a64a1 64 // pulse_LCD(led_1); // Pulse LED 1 to help debug
andrewbw01 1:6c219a7a64a1 65
andrewbw01 1:6c219a7a64a1 66 if(state==1) // Toggle program state from (1 to 2) or (2 to 1)
andrewbw01 1:6c219a7a64a1 67 state=2;
andrewbw01 1:6c219a7a64a1 68 else if(state==2)
andrewbw01 1:6c219a7a64a1 69 state=1;
andrewbw01 1:6c219a7a64a1 70
andrewbw01 1:6c219a7a64a1 71 while(pb_centre) // loop while centr push button is held down
andrewbw01 1:6c219a7a64a1 72 {}
andrewbw01 1:6c219a7a64a1 73 }
andrewbw01 1:6c219a7a64a1 74
andrewbw01 1:6c219a7a64a1 75
andrewbw01 1:6c219a7a64a1 76 // Check if data waiting in serial port buffer
andrewbw01 1:6c219a7a64a1 77 if(pc.readable())
andrewbw01 1:6c219a7a64a1 78 {
andrewbw01 1:6c219a7a64a1 79 serial_char = pc.getc(); // Display chararacter on 7 segment
andrewbw01 1:6c219a7a64a1 80
andrewbw01 1:6c219a7a64a1 81 if(serial_char=='C' || serial_char=='c')
andrewbw01 1:6c219a7a64a1 82 {
andrewbw01 1:6c219a7a64a1 83 pc.printf("Temp = %.2f C \n", temp_c );
andrewbw01 1:6c219a7a64a1 84 }
andrewbw01 1:6c219a7a64a1 85 else if(serial_char=='F' || serial_char=='f')
andrewbw01 1:6c219a7a64a1 86 {
andrewbw01 1:6c219a7a64a1 87 pc.printf("Temp = %.2f F \n", temp_f );
andrewbw01 1:6c219a7a64a1 88 }
andrewbw01 1:6c219a7a64a1 89 else if(serial_char>='0' && serial_char<='9')
andrewbw01 1:6c219a7a64a1 90 {
andrewbw01 1:6c219a7a64a1 91 int pulse_cnt = serial_char-48; // Convert ASCII char to number
andrewbw01 1:6c219a7a64a1 92
andrewbw01 1:6c219a7a64a1 93 pulse_LCD(led_1, pulse_cnt); // Pulse the LED x times
andrewbw01 1:6c219a7a64a1 94 }
andrewbw01 1:6c219a7a64a1 95 }
andrewbw01 1:6c219a7a64a1 96
andrewbw01 1:6c219a7a64a1 97
andrewbw01 1:6c219a7a64a1 98
andrewbw01 1:6c219a7a64a1 99
andrewbw01 1:6c219a7a64a1 100
andrewbw01 0:667ac0287afa 101
andrewbw01 0:667ac0287afa 102 lcd.cls(); // Clear the LCD Display
andrewbw01 0:667ac0287afa 103
andrewbw01 0:667ac0287afa 104 lcd.locate(35,1); // Locate cursor to text row 1 on LCD (col, row)
andrewbw01 1:6c219a7a64a1 105 lcd.printf("Lab Number: 9"); //
andrewbw01 0:667ac0287afa 106
andrewbw01 0:667ac0287afa 107 lcd.locate(35,10); // Locate cursor to test row 2 on LCD (col, row)
andrewbw01 0:667ac0287afa 108
andrewbw01 1:6c219a7a64a1 109 // Read temperature from sensor in Celsius
andrewbw01 1:6c219a7a64a1 110 temp_c = t_sensor.temp();
andrewbw01 1:6c219a7a64a1 111
andrewbw01 1:6c219a7a64a1 112 temp_f = (temp_c * 1.8)+32; // Calculate Fahrenheit
andrewbw01 0:667ac0287afa 113
andrewbw01 1:6c219a7a64a1 114 if(state==1)
andrewbw01 1:6c219a7a64a1 115 {
andrewbw01 1:6c219a7a64a1 116 lcd.printf("Temp = %.2f C ", temp_c );
andrewbw01 1:6c219a7a64a1 117 }
andrewbw01 1:6c219a7a64a1 118 else if(state==2)
andrewbw01 1:6c219a7a64a1 119 {
andrewbw01 1:6c219a7a64a1 120 lcd.printf("Temp = %.2f F ", temp_f );
andrewbw01 1:6c219a7a64a1 121 }
andrewbw01 1:6c219a7a64a1 122
andrewbw01 1:6c219a7a64a1 123
andrewbw01 1:6c219a7a64a1 124
andrewbw01 1:6c219a7a64a1 125 wait(0.1); // Pause
andrewbw01 0:667ac0287afa 126
andrewbw01 0:667ac0287afa 127 }
andrewbw01 0:667ac0287afa 128 }
andrewbw01 0:667ac0287afa 129
andrewbw01 0:667ac0287afa 130
andrewbw01 1:6c219a7a64a1 131 // Pulse the specified LED on and off a fixed number of times (count)
andrewbw01 0:667ac0287afa 132 //
andrewbw01 1:6c219a7a64a1 133 void pulse_LCD(DigitalOut led_pin, int count)
andrewbw01 0:667ac0287afa 134 {
andrewbw01 1:6c219a7a64a1 135 for( int i = 0; i< count; i++)
andrewbw01 1:6c219a7a64a1 136 {
andrewbw01 1:6c219a7a64a1 137 led_pin = 1;
andrewbw01 1:6c219a7a64a1 138 wait(0.2);
andrewbw01 1:6c219a7a64a1 139 led_pin = 0;
andrewbw01 1:6c219a7a64a1 140 wait(0.2);
andrewbw01 1:6c219a7a64a1 141 }
andrewbw01 0:667ac0287afa 142 }