![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Klasa ne radi
Fork of TipkovnicaZadnje by
main.cpp@0:23662f0a15af, 2018-01-11 (annotated)
- Committer:
- resetar
- Date:
- Thu Jan 11 09:33:35 2018 +0000
- Revision:
- 0:23662f0a15af
- Child:
- 1:290c6681a06a
Seminar_purs_greska
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
resetar | 0:23662f0a15af | 1 | #include "mbed.h" |
resetar | 0:23662f0a15af | 2 | /** Initial test of the ultrasonic sensor HC-SR04 */ |
resetar | 0:23662f0a15af | 3 | #include "TextLCD.h" |
resetar | 0:23662f0a15af | 4 | #include "KEY_PAD.h" |
resetar | 0:23662f0a15af | 5 | TextLCD lcd(p7, p8, p9, p10, p11, p12); |
resetar | 0:23662f0a15af | 6 | InterruptIn echo(p5); // echo pin |
resetar | 0:23662f0a15af | 7 | DigitalOut trigger(p6); // trigger pin |
resetar | 0:23662f0a15af | 8 | Timer timer; // echo pulsewidth measurement |
resetar | 0:23662f0a15af | 9 | Timer timer2; |
resetar | 0:23662f0a15af | 10 | float brzina=0; |
resetar | 0:23662f0a15af | 11 | float predzadnji; |
resetar | 0:23662f0a15af | 12 | float vrijeme=0; |
resetar | 0:23662f0a15af | 13 | float distance = 0; |
resetar | 0:23662f0a15af | 14 | DigitalOut led1(p28);//crveno |
resetar | 0:23662f0a15af | 15 | DigitalOut led2(p29); |
resetar | 0:23662f0a15af | 16 | DigitalOut led3(p30); |
resetar | 0:23662f0a15af | 17 | /** Start the echo pulsewidth measurement */ |
resetar | 0:23662f0a15af | 18 | void startTimer() |
resetar | 0:23662f0a15af | 19 | { |
resetar | 0:23662f0a15af | 20 | timer.start(); // start the timer |
resetar | 0:23662f0a15af | 21 | } |
resetar | 0:23662f0a15af | 22 | /** Stop the echo pulsewidth measurement */ |
resetar | 0:23662f0a15af | 23 | void stopTimer() |
resetar | 0:23662f0a15af | 24 | { |
resetar | 0:23662f0a15af | 25 | timer.stop(); // stop the timer |
resetar | 0:23662f0a15af | 26 | } |
resetar | 0:23662f0a15af | 27 | |
resetar | 0:23662f0a15af | 28 | Ticker debounce; |
resetar | 0:23662f0a15af | 29 | |
resetar | 0:23662f0a15af | 30 | BusInOut stupci(p23, p22, p21); |
resetar | 0:23662f0a15af | 31 | |
resetar | 0:23662f0a15af | 32 | InterruptIn red1(p27); |
resetar | 0:23662f0a15af | 33 | InterruptIn red2(p26); |
resetar | 0:23662f0a15af | 34 | InterruptIn red3(p25); |
resetar | 0:23662f0a15af | 35 | InterruptIn red4(p24); |
resetar | 0:23662f0a15af | 36 | |
resetar | 0:23662f0a15af | 37 | BusOut izlaz(LED1, LED2, LED3, LED4); |
resetar | 0:23662f0a15af | 38 | |
resetar | 0:23662f0a15af | 39 | volatile extern int row=0; |
resetar | 0:23662f0a15af | 40 | volatile extern int col=0; |
resetar | 0:23662f0a15af | 41 | volatile extern int key=0; |
resetar | 0:23662f0a15af | 42 | volatile extern int step=0; |
resetar | 0:23662f0a15af | 43 | volatile extern int code=0; |
resetar | 0:23662f0a15af | 44 | volatile extern int pass_code=0; |
resetar | 0:23662f0a15af | 45 | |
resetar | 0:23662f0a15af | 46 | |
resetar | 0:23662f0a15af | 47 | void enable_keys(){ |
resetar | 0:23662f0a15af | 48 | red1.fall(&get_row1); |
resetar | 0:23662f0a15af | 49 | red2.fall(&get_row2); |
resetar | 0:23662f0a15af | 50 | red3.fall(&get_row3); |
resetar | 0:23662f0a15af | 51 | red4.fall(&get_row4); |
resetar | 0:23662f0a15af | 52 | |
resetar | 0:23662f0a15af | 53 | debounce.detach(); |
resetar | 0:23662f0a15af | 54 | } |
resetar | 0:23662f0a15af | 55 | |
resetar | 0:23662f0a15af | 56 | int main() { |
resetar | 0:23662f0a15af | 57 | |
resetar | 0:23662f0a15af | 58 | /** configure the rising edge to start the timer */ |
resetar | 0:23662f0a15af | 59 | echo.rise(&startTimer); |
resetar | 0:23662f0a15af | 60 | |
resetar | 0:23662f0a15af | 61 | /** configure the falling edge to stop the timer */ |
resetar | 0:23662f0a15af | 62 | echo.fall(&stopTimer); |
resetar | 0:23662f0a15af | 63 | timer2.start(); |
resetar | 0:23662f0a15af | 64 | led1=0; |
resetar | 0:23662f0a15af | 65 | led2=0; |
resetar | 0:23662f0a15af | 66 | led3=1; |
resetar | 0:23662f0a15af | 67 | |
resetar | 0:23662f0a15af | 68 | stupci.mode(OpenDrain); |
resetar | 0:23662f0a15af | 69 | stupci.mode(PullUp); |
resetar | 0:23662f0a15af | 70 | |
resetar | 0:23662f0a15af | 71 | red1.mode(PullUp); |
resetar | 0:23662f0a15af | 72 | red2.mode(PullUp); |
resetar | 0:23662f0a15af | 73 | red3.mode(PullUp); |
resetar | 0:23662f0a15af | 74 | red4.mode(PullUp); |
resetar | 0:23662f0a15af | 75 | |
resetar | 0:23662f0a15af | 76 | red1.fall(&get_row1); |
resetar | 0:23662f0a15af | 77 | red2.fall(&get_row2); |
resetar | 0:23662f0a15af | 78 | red3.fall(&get_row3); |
resetar | 0:23662f0a15af | 79 | red4.fall(&get_row4); |
resetar | 0:23662f0a15af | 80 | |
resetar | 0:23662f0a15af | 81 | while(1) { |
resetar | 0:23662f0a15af | 82 | if(red1 == 1 && red2 == 1 && red3 == 1 && red4 == 1){ |
resetar | 0:23662f0a15af | 83 | if(key>0){ |
resetar | 0:23662f0a15af | 84 | izlaz=key; |
resetar | 0:23662f0a15af | 85 | //pc.printf("\n\r %d", code); |
resetar | 0:23662f0a15af | 86 | __enable_irq(); |
resetar | 0:23662f0a15af | 87 | debounce.attach(&enable_keys, 0.5); //////////////////////////////// |
resetar | 0:23662f0a15af | 88 | } |
resetar | 0:23662f0a15af | 89 | key=0; |
resetar | 0:23662f0a15af | 90 | wait_ms(100); |
resetar | 0:23662f0a15af | 91 | } |
resetar | 0:23662f0a15af | 92 | |
resetar | 0:23662f0a15af | 93 | switch(pass_code){ |
resetar | 0:23662f0a15af | 94 | case(0): |
resetar | 0:23662f0a15af | 95 | lcd.locate(0,3); |
resetar | 0:23662f0a15af | 96 | lcd.printf("Unesite mod rada"); |
resetar | 0:23662f0a15af | 97 | break; |
resetar | 0:23662f0a15af | 98 | |
resetar | 0:23662f0a15af | 99 | case(123): |
resetar | 0:23662f0a15af | 100 | /** Start the measurement by sending the 10us trigger pulse */ |
resetar | 0:23662f0a15af | 101 | trigger = 1; |
resetar | 0:23662f0a15af | 102 | wait_us(10); |
resetar | 0:23662f0a15af | 103 | trigger = 0; |
resetar | 0:23662f0a15af | 104 | /** Wait for the sensor to finish measurement (generate rise and fall interrupts). |
resetar | 0:23662f0a15af | 105 | * Minimum wait time is determined by maximum measurement distance of 400 cm. |
resetar | 0:23662f0a15af | 106 | * t_min = 400 * 58 = 23200 us = 23.2 ms */ |
resetar | 0:23662f0a15af | 107 | wait(0.2); |
resetar | 0:23662f0a15af | 108 | predzadnji=distance; |
resetar | 0:23662f0a15af | 109 | /** calculate the distance in cm */ |
resetar | 0:23662f0a15af | 110 | distance = timer.read() * 1e6 / 58; |
resetar | 0:23662f0a15af | 111 | timer.reset(); // reset the timer to 0 |
resetar | 0:23662f0a15af | 112 | brzina=(distance-predzadnji)/(timer2.read()-vrijeme); |
resetar | 0:23662f0a15af | 113 | timer2.reset(); |
resetar | 0:23662f0a15af | 114 | timer2.start(); |
resetar | 0:23662f0a15af | 115 | vrijeme=timer2.read(); |
resetar | 0:23662f0a15af | 116 | /** Print the result in cm to the terminal with 1 decimal place |
resetar | 0:23662f0a15af | 117 | * (number 5 after % means that total of 5 digits will be reserved |
resetar | 0:23662f0a15af | 118 | * for printing the number, including the dot and one decimal place). */ |
resetar | 0:23662f0a15af | 119 | |
resetar | 0:23662f0a15af | 120 | if (brzina>=20) { |
resetar | 0:23662f0a15af | 121 | lcd.cls(); |
resetar | 0:23662f0a15af | 122 | lcd.locate(0,0); |
resetar | 0:23662f0a15af | 123 | lcd.printf("Daljina:%5.1f cm", distance); |
resetar | 0:23662f0a15af | 124 | lcd.locate(0,1); |
resetar | 0:23662f0a15af | 125 | lcd.printf("Brzina:%5.1f cm/s",brzina); |
resetar | 0:23662f0a15af | 126 | lcd.locate(0,2); |
resetar | 0:23662f0a15af | 127 | lcd.printf("Palim crveno!!!"); |
resetar | 0:23662f0a15af | 128 | led3=0; |
resetar | 0:23662f0a15af | 129 | led2=1; |
resetar | 0:23662f0a15af | 130 | wait(3); |
resetar | 0:23662f0a15af | 131 | led2=0; |
resetar | 0:23662f0a15af | 132 | led1=1; |
resetar | 0:23662f0a15af | 133 | wait(10); |
resetar | 0:23662f0a15af | 134 | led2=1; |
resetar | 0:23662f0a15af | 135 | wait(4); |
resetar | 0:23662f0a15af | 136 | led3=1; |
resetar | 0:23662f0a15af | 137 | led1=0; |
resetar | 0:23662f0a15af | 138 | led2=0; |
resetar | 0:23662f0a15af | 139 | } else if (brzina < 20 && brzina >5) { |
resetar | 0:23662f0a15af | 140 | lcd.cls(); |
resetar | 0:23662f0a15af | 141 | lcd.locate(0,0); |
resetar | 0:23662f0a15af | 142 | lcd.printf("Daljina:%5.1f cm", distance); |
resetar | 0:23662f0a15af | 143 | lcd.locate(0,1); |
resetar | 0:23662f0a15af | 144 | lcd.printf("Brzina:%5.1f cm/s",brzina); |
resetar | 0:23662f0a15af | 145 | lcd.locate(0,2); |
resetar | 0:23662f0a15af | 146 | lcd.printf("Usporite!"); |
resetar | 0:23662f0a15af | 147 | wait(2); |
resetar | 0:23662f0a15af | 148 | } else { |
resetar | 0:23662f0a15af | 149 | lcd.cls(); |
resetar | 0:23662f0a15af | 150 | lcd.locate(0,0); |
resetar | 0:23662f0a15af | 151 | lcd.printf("Daljina:%5.1f cm", distance); |
resetar | 0:23662f0a15af | 152 | lcd.locate(0,1); |
resetar | 0:23662f0a15af | 153 | lcd.printf("Brzina:%5.1f cm/s",brzina); |
resetar | 0:23662f0a15af | 154 | lcd.locate(0,2); |
resetar | 0:23662f0a15af | 155 | lcd.printf("OK"); |
resetar | 0:23662f0a15af | 156 | } |
resetar | 0:23662f0a15af | 157 | break; |
resetar | 0:23662f0a15af | 158 | |
resetar | 0:23662f0a15af | 159 | case(456): |
resetar | 0:23662f0a15af | 160 | lcd.cls(); |
resetar | 0:23662f0a15af | 161 | lcd.locate(0,3); |
resetar | 0:23662f0a15af | 162 | lcd.printf(" %d", pass_code); |
resetar | 0:23662f0a15af | 163 | break; |
resetar | 0:23662f0a15af | 164 | |
resetar | 0:23662f0a15af | 165 | case(789): |
resetar | 0:23662f0a15af | 166 | lcd.cls(); |
resetar | 0:23662f0a15af | 167 | lcd.locate(0,3); |
resetar | 0:23662f0a15af | 168 | lcd.printf(" %d", pass_code); |
resetar | 0:23662f0a15af | 169 | break; |
resetar | 0:23662f0a15af | 170 | } |
resetar | 0:23662f0a15af | 171 | |
resetar | 0:23662f0a15af | 172 | } |
resetar | 0:23662f0a15af | 173 | } |