Klasa ne radi

Dependencies:   TextLCD key_pad mbed

Committer:
resetar
Date:
Thu Jan 11 09:33:35 2018 +0000
Revision:
0:23662f0a15af
Seminar_purs_greska

Who changed what in which revision?

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