cregans lab 9 task 1
Dependencies: mbed LM75B C12832_lcd
main.cpp@1:6c219a7a64a1, 2021-03-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |