This car parking system uses Freedom board KL25, ultrasonic sensor, keypad, and LCD. The distance is measured via ultrasonic sensor, and it is displayed on LCD. The keypad takes user input of the that decides what led to turn on. If user types 25, after 25 cm, the light of the Freedom board turns to a specific color. After half if this distance 12.5 cm, it starts to to turn yellow. And after 90% of distance is covered then it starts blinking.

Dependencies:   HC_SR04_Ultrasonic_Library Keypad TextLCD mbed

Committer:
tb_17
Date:
Sat Oct 08 10:29:35 2022 +0000
Revision:
0:0999baad59eb
My First Mbed Project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tb_17 0:0999baad59eb 1 #include "mbed.h"
tb_17 0:0999baad59eb 2 #include "TextLCD.h"
tb_17 0:0999baad59eb 3 #include "Keypad.h"
tb_17 0:0999baad59eb 4 #include "ultrasonic.h"
tb_17 0:0999baad59eb 5
tb_17 0:0999baad59eb 6 TextLCD my_lcd(PTE20, PTE21, PTE22, PTE23, PTE29, PTE30, TextLCD::LCD16x2);
tb_17 0:0999baad59eb 7 Keypad kpad(PTA12, PTD4, PTA2, PTA1, PTC9, PTC8, PTA5, PTA4);
tb_17 0:0999baad59eb 8
tb_17 0:0999baad59eb 9 void dist(int distance){
tb_17 0:0999baad59eb 10 }
tb_17 0:0999baad59eb 11
tb_17 0:0999baad59eb 12 ultrasonic mu(PTA13, PTD5, .1, 1, &dist); //Set the trigger pin to PTA13 and the echo pin to PTD5
tb_17 0:0999baad59eb 13 //have updates every .1 seconds and a timeout after 1
tb_17 0:0999baad59eb 14 //second, and call dist when the distance changes
tb_17 0:0999baad59eb 15 float dispDist;
tb_17 0:0999baad59eb 16 float prevDist;
tb_17 0:0999baad59eb 17 float interDist;
tb_17 0:0999baad59eb 18 float input;
tb_17 0:0999baad59eb 19
tb_17 0:0999baad59eb 20 PwmOut ledRed(LED_RED);
tb_17 0:0999baad59eb 21 PwmOut ledGreen(LED_GREEN);
tb_17 0:0999baad59eb 22 PwmOut ledBlue(LED_BLUE);
tb_17 0:0999baad59eb 23
tb_17 0:0999baad59eb 24 int main()
tb_17 0:0999baad59eb 25 {
tb_17 0:0999baad59eb 26 my_lcd.printf("Input distance (cm) then press #:");
tb_17 0:0999baad59eb 27 wait(2);
tb_17 0:0999baad59eb 28 my_lcd.cls();
tb_17 0:0999baad59eb 29 char key;
tb_17 0:0999baad59eb 30 int released = 1;
tb_17 0:0999baad59eb 31 char inputArray[16];
tb_17 0:0999baad59eb 32 int i = 0 ;
tb_17 0:0999baad59eb 33 while(i<16){
tb_17 0:0999baad59eb 34 key = kpad.ReadKey(); //read the current key pressed
tb_17 0:0999baad59eb 35
tb_17 0:0999baad59eb 36 if(key == '\0')
tb_17 0:0999baad59eb 37 released = 1; //set the flag when all keys are released
tb_17 0:0999baad59eb 38
tb_17 0:0999baad59eb 39 if((key != '\0') && (released == 1)) { //if a key is pressed AND previous key was released
tb_17 0:0999baad59eb 40
tb_17 0:0999baad59eb 41 if (key == '#'){
tb_17 0:0999baad59eb 42 my_lcd.printf("=");
tb_17 0:0999baad59eb 43 break;
tb_17 0:0999baad59eb 44 }
tb_17 0:0999baad59eb 45 else{
tb_17 0:0999baad59eb 46 my_lcd.printf("%c", key);
tb_17 0:0999baad59eb 47 }
tb_17 0:0999baad59eb 48
tb_17 0:0999baad59eb 49 inputArray[i] = key;
tb_17 0:0999baad59eb 50 i++;
tb_17 0:0999baad59eb 51 released = 0; //clear the flag to indicate that key is still pressed
tb_17 0:0999baad59eb 52 }
tb_17 0:0999baad59eb 53 }
tb_17 0:0999baad59eb 54 sscanf(inputArray, "%f", &input);
tb_17 0:0999baad59eb 55 my_lcd.locate(0, 1);
tb_17 0:0999baad59eb 56 my_lcd.printf("Input: %.1f", input);
tb_17 0:0999baad59eb 57 wait(1);
tb_17 0:0999baad59eb 58 my_lcd.cls();
tb_17 0:0999baad59eb 59
tb_17 0:0999baad59eb 60 mu.startUpdates();//start mesuring the distance
tb_17 0:0999baad59eb 61 while(1)
tb_17 0:0999baad59eb 62 {
tb_17 0:0999baad59eb 63 dispDist = mu.getCurrentDistance();
tb_17 0:0999baad59eb 64 dispDist = dispDist / 10;
tb_17 0:0999baad59eb 65 interDist = ((2 * input) / 3 - input / 3) / 5;
tb_17 0:0999baad59eb 66 if (dispDist > input){
tb_17 0:0999baad59eb 67 PwmOut extRedLed(PTD2);
tb_17 0:0999baad59eb 68 PwmOut extGreenLed(PTD0);
tb_17 0:0999baad59eb 69 extRedLed = 0;
tb_17 0:0999baad59eb 70 extGreenLed = 0;
tb_17 0:0999baad59eb 71 wait(0.01);
tb_17 0:0999baad59eb 72 }
tb_17 0:0999baad59eb 73
tb_17 0:0999baad59eb 74 else if ((dispDist < input && dispDist > 2 * input / 3)){
tb_17 0:0999baad59eb 75 PwmOut extRedLed(PTD2);
tb_17 0:0999baad59eb 76 PwmOut extGreenLed(PTD0);;
tb_17 0:0999baad59eb 77 extRedLed = 0;
tb_17 0:0999baad59eb 78 extGreenLed = 1;
tb_17 0:0999baad59eb 79 wait(0.01);
tb_17 0:0999baad59eb 80 }
tb_17 0:0999baad59eb 81
tb_17 0:0999baad59eb 82 else if (dispDist >= input / 3 & dispDist <= (input / 3) + interDist){
tb_17 0:0999baad59eb 83 //Do something
tb_17 0:0999baad59eb 84 PwmOut extRedLed(PTD2);
tb_17 0:0999baad59eb 85 PwmOut extGreenLed(PTD0);
tb_17 0:0999baad59eb 86 extRedLed = 0.95;
tb_17 0:0999baad59eb 87 extGreenLed = 0;
tb_17 0:0999baad59eb 88 wait(0.01);
tb_17 0:0999baad59eb 89 }
tb_17 0:0999baad59eb 90 else if (dispDist >= (input / 3) + interDist & dispDist <= (input / 3) + 2 * interDist){
tb_17 0:0999baad59eb 91 //Do something
tb_17 0:0999baad59eb 92 PwmOut extRedLed(PTD2);
tb_17 0:0999baad59eb 93 PwmOut extGreenLed(PTD0);
tb_17 0:0999baad59eb 94 extRedLed = 0.75;
tb_17 0:0999baad59eb 95 extGreenLed = 0;
tb_17 0:0999baad59eb 96 wait(0.01);
tb_17 0:0999baad59eb 97 }
tb_17 0:0999baad59eb 98 else if (dispDist >= (input / 3) + 2 * interDist & dispDist <= (input / 3) + 3 * interDist){
tb_17 0:0999baad59eb 99 //Do something
tb_17 0:0999baad59eb 100 PwmOut extRedLed(PTD2);
tb_17 0:0999baad59eb 101 PwmOut extGreenLed(PTD0);
tb_17 0:0999baad59eb 102 extRedLed = 0.55;
tb_17 0:0999baad59eb 103 extGreenLed = 0;
tb_17 0:0999baad59eb 104 wait(0.01);
tb_17 0:0999baad59eb 105 }
tb_17 0:0999baad59eb 106 else if (dispDist >= (input / 3) + 3 * interDist & dispDist <= (input / 3) + 4 * interDist){
tb_17 0:0999baad59eb 107 //Do something
tb_17 0:0999baad59eb 108 PwmOut extRedLed(PTD2);
tb_17 0:0999baad59eb 109 PwmOut extGreenLed(PTD0);
tb_17 0:0999baad59eb 110 extRedLed = 0.35;
tb_17 0:0999baad59eb 111 extGreenLed = 0;
tb_17 0:0999baad59eb 112 wait(0.01);
tb_17 0:0999baad59eb 113 }
tb_17 0:0999baad59eb 114 else if (dispDist >= (input / 3) + 4 * interDist & dispDist <= (input / 3) + 5 * interDist){
tb_17 0:0999baad59eb 115 //Do something
tb_17 0:0999baad59eb 116 PwmOut extRedLed(PTD2);
tb_17 0:0999baad59eb 117 PwmOut extGreenLed(PTD0);
tb_17 0:0999baad59eb 118 extRedLed = 0.15;
tb_17 0:0999baad59eb 119 extGreenLed = 0;
tb_17 0:0999baad59eb 120 wait(0.01);
tb_17 0:0999baad59eb 121 }
tb_17 0:0999baad59eb 122 else if (dispDist < (input / 3)){
tb_17 0:0999baad59eb 123 PwmOut extRedLed(PTD2);
tb_17 0:0999baad59eb 124 PwmOut extGreenLed(PTD0);
tb_17 0:0999baad59eb 125 extRedLed = 0.95;
tb_17 0:0999baad59eb 126 extGreenLed = 0;
tb_17 0:0999baad59eb 127 wait(0.01);
tb_17 0:0999baad59eb 128 }
tb_17 0:0999baad59eb 129
tb_17 0:0999baad59eb 130 if (prevDist > dispDist){
tb_17 0:0999baad59eb 131 ledRed = 0;
tb_17 0:0999baad59eb 132 ledGreen = 0;
tb_17 0:0999baad59eb 133 ledBlue = 1;
tb_17 0:0999baad59eb 134 wait(0.01);
tb_17 0:0999baad59eb 135 }
tb_17 0:0999baad59eb 136
tb_17 0:0999baad59eb 137 else if (prevDist < dispDist){
tb_17 0:0999baad59eb 138 ledRed = 1;
tb_17 0:0999baad59eb 139 ledGreen = 1;
tb_17 0:0999baad59eb 140 ledBlue = 0;
tb_17 0:0999baad59eb 141 wait(0.01);
tb_17 0:0999baad59eb 142 }
tb_17 0:0999baad59eb 143
tb_17 0:0999baad59eb 144 else{
tb_17 0:0999baad59eb 145 ledRed.pulsewidth(1);
tb_17 0:0999baad59eb 146 ledGreen.pulsewidth(1);
tb_17 0:0999baad59eb 147 ledBlue.pulsewidth(1);
tb_17 0:0999baad59eb 148 wait(0.01);
tb_17 0:0999baad59eb 149 }
tb_17 0:0999baad59eb 150
tb_17 0:0999baad59eb 151 prevDist = dispDist;
tb_17 0:0999baad59eb 152 my_lcd.printf("%.1f", dispDist);
tb_17 0:0999baad59eb 153 my_lcd.locate(6, 0);
tb_17 0:0999baad59eb 154 my_lcd.printf("cm");
tb_17 0:0999baad59eb 155 wait(0.5);
tb_17 0:0999baad59eb 156 my_lcd.cls();
tb_17 0:0999baad59eb 157 wait(0.01);
tb_17 0:0999baad59eb 158 }
tb_17 0:0999baad59eb 159 }