TVZ2019
/
1_MIKROUPRAVLJACI
Programsko rješenje za uređaj koji mjeri nagib i udaljenost.
Diff: main.cpp
- Revision:
- 0:34c1f05d8d2c
- Child:
- 1:024485d1c677
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Nov 16 10:14:58 2019 +0000 @@ -0,0 +1,77 @@ +#include "mbed.h" +#include "MPU.h" +#include "HCSR04.h" +#include "TextLCD.h" + +class LED_interrupt +{ + + public: + LED_interrupt(PinName tipkalo_pin, PinName led_pin) : _stanje(tipkalo_pin), _tipkalo(led_pin) + { + _tipkalo.fall(callback(this, &LED_interrupt::promjena)); + off(); + }; + + void off(void) + { + _stanje = 0; + }; + + void promjena(void) + { + _stanje = !_stanje; + }; + + private: + DigitalOut _stanje; + InterruptIn _tipkalo; +}; + + +Serial pc(USBTX,USBRX); +Senzor mpu(p9,p10); // žiroskop (Sda, Scl) +HCSR04 sensor(p7,p8); // ultrazvučni senzor (trig, echo) +TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2); // display (rs, e, d4-d7) + +void calc() +{ + sensor.startMeasurement(); +} + +int main() +{ + float angle[3] = {0, 0, 0}; + float temp; + float sampleTime = 0.5; + Ticker ticker; + float distance; + + pc.printf("\nPocnimo\n"); + + sensor.setRanges(2, 400); + pc.printf("Minimum sensor range = %g cm\n\rMaximum sensor range = %g cm\n\r", sensor.getMinRange(), sensor.getMaxRange()); + ticker.attach(&calc, sampleTime); + + while(true) { + + LED_interrupt(p15,p16); + + mpu.finalAngle(angle); + temp=mpu.getTemp(); + distance = sensor.getDistance_mm(); + + //lcd.cls(); + //lcd.locate(0,1); + pc.printf("\npitch: %.4f", angle[0]); + + //lcd.locate(0,0); + pc.printf("\nroll: %.4f", angle[1]); + + pc.printf("\nTemp: %.4f",temp); + pc.printf("\nDistance: %f mm\r", distance); + + wait(1); + + } +} \ No newline at end of file