Ultraschall Test Geschwindigkeitsregelung

Fork of BertlLib by michael hollegha

Committer:
TFuchsbichler
Date:
Mon Apr 25 06:55:29 2016 +0000
Revision:
7:01d2bc098b6d
Parent:
6:78243412d2b3
Ultraschallsensor Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hollegha2 0:e0131e671ea0 1
hollegha2 0:e0131e671ea0 2 #include "mbed.h"
hollegha2 0:e0131e671ea0 3 #include "Bertl14.h"
hollegha2 0:e0131e671ea0 4
hollegha2 0:e0131e671ea0 5
hollegha2 0:e0131e671ea0 6
hollegha2 0:e0131e671ea0 7 PortEx::PortEx() :
hollegha2 0:e0131e671ea0 8 _i2c(p28,p27), _p6Event(p6)
hollegha2 0:e0131e671ea0 9 {
hollegha2 0:e0131e671ea0 10 btns=btnEvent=0;
hollegha2 0:e0131e671ea0 11 useISR = 1;
hollegha2 0:e0131e671ea0 12 }
hollegha2 0:e0131e671ea0 13
hollegha2 0:e0131e671ea0 14 void PortEx::Init()
hollegha2 0:e0131e671ea0 15 {
hollegha2 0:e0131e671ea0 16 char cmd[4];
hollegha2 0:e0131e671ea0 17 _i2c.frequency(100000);
hollegha2 0:e0131e671ea0 18 wait(0.01);
hollegha2 0:e0131e671ea0 19 // Port0 Config Port0 Out Port1 In
hollegha2 0:e0131e671ea0 20 cmd[0]=0x06; cmd[1]=0x00; cmd[2]=0xFF;
hollegha2 0:e0131e671ea0 21 _i2c.write(DEV, cmd, 3, false);
hollegha2 0:e0131e671ea0 22 SetLedPort(0);
hollegha2 0:e0131e671ea0 23 _p6Event.fall(this, &PortEx::p6ISR);
hollegha2 0:e0131e671ea0 24 }
hollegha2 0:e0131e671ea0 25
hollegha2 0:e0131e671ea0 26 void PortEx::p6ISR()
hollegha2 0:e0131e671ea0 27 {
hollegha2 0:e0131e671ea0 28 if( !useISR )
hollegha2 0:e0131e671ea0 29 return;
hollegha2 0:e0131e671ea0 30 int16_t prev = btns;
hollegha2 0:e0131e671ea0 31 ReadButtons();
hollegha2 0:e0131e671ea0 32 if( !btns )
hollegha2 0:e0131e671ea0 33 btns = prev;
hollegha2 0:e0131e671ea0 34 else
hollegha2 0:e0131e671ea0 35 btnEvent = 1;
hollegha2 0:e0131e671ea0 36 }
hollegha2 0:e0131e671ea0 37
hollegha2 0:e0131e671ea0 38 void PortEx::SetLedPort(uint8_t aBitPattern)
hollegha2 0:e0131e671ea0 39 {
hollegha2 0:e0131e671ea0 40 char cmd[4];
hollegha2 0:e0131e671ea0 41 cmd[0]=2; cmd[1]=~aBitPattern;
hollegha2 0:e0131e671ea0 42 _i2c.write(DEV, cmd, 2, false);
hollegha2 0:e0131e671ea0 43 }
hollegha2 0:e0131e671ea0 44
hollegha2 0:e0131e671ea0 45 void PortEx::SetLeds(uint8_t aBitPattern)
hollegha2 0:e0131e671ea0 46 {
hollegha2 0:e0131e671ea0 47 _currLeds |= aBitPattern;
hollegha2 0:e0131e671ea0 48 SetLedPort(_currLeds);
hollegha2 0:e0131e671ea0 49 }
hollegha2 0:e0131e671ea0 50
hollegha2 0:e0131e671ea0 51 void PortEx::ToggleLeds(uint8_t aBitPattern)
hollegha2 0:e0131e671ea0 52 {
hollegha2 0:e0131e671ea0 53 _currLeds ^= aBitPattern;
hollegha2 0:e0131e671ea0 54 SetLedPort(_currLeds);
hollegha2 0:e0131e671ea0 55 }
hollegha2 0:e0131e671ea0 56
hollegha2 0:e0131e671ea0 57 void PortEx::ClearLeds()
hollegha2 0:e0131e671ea0 58 {
hollegha2 0:e0131e671ea0 59 _currLeds=0; SetLedPort(0);
hollegha2 0:e0131e671ea0 60 }
hollegha2 0:e0131e671ea0 61
hollegha2 0:e0131e671ea0 62
hollegha2 0:e0131e671ea0 63 void PortEx::ReadButtons()
hollegha2 0:e0131e671ea0 64 {
hollegha2 0:e0131e671ea0 65 char cmd[4];
hollegha2 0:e0131e671ea0 66 cmd[0]=1;
hollegha2 0:e0131e671ea0 67 _i2c.write(DEV, cmd, 1, true);
hollegha2 0:e0131e671ea0 68 _i2c.read(DEV|1, cmd, 1, false);
hollegha2 0:e0131e671ea0 69 btns = cmd[0];
hollegha2 0:e0131e671ea0 70 }
hollegha2 0:e0131e671ea0 71
hollegha2 0:e0131e671ea0 72 void PortEx::WaitUntilButtonPressed()
hollegha2 0:e0131e671ea0 73 {
hollegha2 0:e0131e671ea0 74 int prev = useISR;
hollegha2 0:e0131e671ea0 75 useISR = 0;
hollegha2 0:e0131e671ea0 76 btns = 0;
hollegha2 0:e0131e671ea0 77 while(1) {
hollegha2 0:e0131e671ea0 78 ReadButtons();
hollegha2 0:e0131e671ea0 79 if( btns )
hollegha2 0:e0131e671ea0 80 break;
hollegha2 0:e0131e671ea0 81 wait(0.01);
hollegha2 0:e0131e671ea0 82 }
hollegha2 0:e0131e671ea0 83 btns=btnEvent=0;
hollegha2 0:e0131e671ea0 84 useISR = prev;
hollegha2 0:e0131e671ea0 85 }
hollegha2 0:e0131e671ea0 86
hollegha2 6:78243412d2b3 87 void PortEx::WaitUntilFrontButtonPressed()
hollegha2 6:78243412d2b3 88 {
hollegha2 6:78243412d2b3 89 int prev = useISR;
hollegha2 6:78243412d2b3 90 useISR = 0;
hollegha2 6:78243412d2b3 91 btns = 0;
hollegha2 6:78243412d2b3 92 while(1) {
hollegha2 6:78243412d2b3 93 ReadButtons();
hollegha2 6:78243412d2b3 94 if( IsAnyFrontButton() )
hollegha2 6:78243412d2b3 95 break;
hollegha2 6:78243412d2b3 96 wait(0.01);
hollegha2 6:78243412d2b3 97 }
hollegha2 6:78243412d2b3 98 btns=btnEvent=0;
hollegha2 6:78243412d2b3 99 useISR = prev;
hollegha2 6:78243412d2b3 100 }
hollegha2 6:78243412d2b3 101
hollegha2 0:e0131e671ea0 102
hollegha2 0:e0131e671ea0 103
hollegha2 0:e0131e671ea0 104 UsDistSens::UsDistSens(PinName pinTrigger, PinName pinEcho) :
hollegha2 0:e0131e671ea0 105 trigger(pinTrigger),echo(pinEcho)
hollegha2 0:e0131e671ea0 106 {
hollegha2 0:e0131e671ea0 107 echo.rise(this, &UsDistSens::RisingISR);
hollegha2 0:e0131e671ea0 108 echo.fall(this, &UsDistSens::FallingISR);
hollegha2 0:e0131e671ea0 109 }
hollegha2 0:e0131e671ea0 110
hollegha2 0:e0131e671ea0 111 void UsDistSens::StartMeas()
hollegha2 0:e0131e671ea0 112 {
hollegha2 0:e0131e671ea0 113 trigger=1; wait_us(12); trigger=0;
hollegha2 0:e0131e671ea0 114 stw.start();
hollegha2 0:e0131e671ea0 115 }
hollegha2 0:e0131e671ea0 116
hollegha2 0:e0131e671ea0 117 void UsDistSens::RisingISR()
hollegha2 0:e0131e671ea0 118 { stw.reset(); }
hollegha2 0:e0131e671ea0 119
hollegha2 0:e0131e671ea0 120 void UsDistSens::FallingISR()
hollegha2 0:e0131e671ea0 121 {
hollegha2 0:e0131e671ea0 122 dist=stw.read_us();
hollegha2 0:e0131e671ea0 123 distCM = (float)dist*(343.2E-4/2.0);
hollegha2 0:e0131e671ea0 124 }
hollegha2 0:e0131e671ea0 125
hollegha2 0:e0131e671ea0 126
hollegha2 0:e0131e671ea0 127