Line

Dependencies:   BertlLib mbed

Committer:
markus2410
Date:
Tue Apr 14 15:54:47 2015 +0000
Revision:
0:2271f1e56f17
Child:
1:2e48f1a47d07
lo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markus2410 0:2271f1e56f17 1 #include "mbed.h"
markus2410 0:2271f1e56f17 2 #include "Serial_HL.h"
markus2410 0:2271f1e56f17 3 #include "Bertl14.h"
markus2410 0:2271f1e56f17 4 #include "BertlObjects.h"
markus2410 0:2271f1e56f17 5
markus2410 0:2271f1e56f17 6 SerialBLK pc(USBTX, USBRX);
markus2410 0:2271f1e56f17 7 SvProtocol ua0(&pc);
markus2410 0:2271f1e56f17 8 AnalogInHL ls1(p18), ls2(p16), ls3(p19), ls4(p17);
markus2410 0:2271f1e56f17 9
markus2410 0:2271f1e56f17 10 void CommandHandler();
markus2410 0:2271f1e56f17 11 void followmaster();
markus2410 0:2271f1e56f17 12 void blinkvorne();
markus2410 0:2271f1e56f17 13 void blinkhinten();
markus2410 0:2271f1e56f17 14 void messen();
markus2410 0:2271f1e56f17 15 void rechts();
markus2410 0:2271f1e56f17 16 void links();
markus2410 0:2271f1e56f17 17 void gerade();
markus2410 0:2271f1e56f17 18
markus2410 0:2271f1e56f17 19 Timer t1;
markus2410 0:2271f1e56f17 20 unsigned int led=1;
markus2410 0:2271f1e56f17 21
markus2410 0:2271f1e56f17 22
markus2410 0:2271f1e56f17 23 int main(void)
markus2410 0:2271f1e56f17 24 {
markus2410 0:2271f1e56f17 25 InitBertl();
markus2410 0:2271f1e56f17 26 pex.useISR=0; leds=9;
markus2410 0:2271f1e56f17 27 pex.ClearLeds();
markus2410 0:2271f1e56f17 28 pc.format(8,SerialBLK::None,1); pc.baud(500000); // 115200
markus2410 0:2271f1e56f17 29
markus2410 0:2271f1e56f17 30 ua0.SvMessage("MotorTest1"); // Meldung zum PC senden
markus2410 0:2271f1e56f17 31
markus2410 0:2271f1e56f17 32 Timer stw; stw.start();
markus2410 0:2271f1e56f17 33 while(1)
markus2410 0:2271f1e56f17 34 {
markus2410 0:2271f1e56f17 35
markus2410 0:2271f1e56f17 36
markus2410 0:2271f1e56f17 37 messen();
markus2410 0:2271f1e56f17 38
markus2410 0:2271f1e56f17 39 CommandHandler();
markus2410 0:2271f1e56f17 40 if( (stw.read_ms()>10) ) // 100Hz
markus2410 0:2271f1e56f17 41 { // dieser Teil wird mit 100Hz aufgerufen
markus2410 0:2271f1e56f17 42 stw.reset();
markus2410 0:2271f1e56f17 43 if( ua0.acqON ) {
markus2410 0:2271f1e56f17 44 // nur wenn vom PC aus das Senden eingeschaltet wurde
markus2410 0:2271f1e56f17 45 // wird auch etwas gesendet
markus2410 0:2271f1e56f17 46 ua0.WriteSvI16(1, mL.encCnt);
markus2410 0:2271f1e56f17 47 ua0.WriteSvI16(2, mR.encCnt);
markus2410 0:2271f1e56f17 48 ua0.WriteSvI16(3, us.distCM*100.0);
markus2410 0:2271f1e56f17 49 us.StartMeas(); // for next cycle
markus2410 0:2271f1e56f17 50 }
markus2410 0:2271f1e56f17 51 }
markus2410 0:2271f1e56f17 52 }
markus2410 0:2271f1e56f17 53 return 1;
markus2410 0:2271f1e56f17 54 }
markus2410 0:2271f1e56f17 55
markus2410 0:2271f1e56f17 56 void CommandHandler()
markus2410 0:2271f1e56f17 57 {
markus2410 0:2271f1e56f17 58 uint8_t cmd;
markus2410 0:2271f1e56f17 59 // Fragen ob überhaupt etwas im RX-Reg steht
markus2410 0:2271f1e56f17 60 if( !pc.IsDataAvail() )
markus2410 0:2271f1e56f17 61 return;
markus2410 0:2271f1e56f17 62 // wenn etwas im RX-Reg steht
markus2410 0:2271f1e56f17 63 // Kommando lesen
markus2410 0:2271f1e56f17 64 cmd = ua0.GetCommand();
markus2410 0:2271f1e56f17 65
markus2410 0:2271f1e56f17 66 if( cmd==2 ) // Encoder auf 0 setzen
markus2410 0:2271f1e56f17 67 {
markus2410 0:2271f1e56f17 68 mL.encCnt=0; mR.encCnt=0;
markus2410 0:2271f1e56f17 69 ua0.SvMessage("Clear Encoder");
markus2410 0:2271f1e56f17 70 }
markus2410 0:2271f1e56f17 71 if( cmd==3 ) // bei beiden Motoren Gas geben
markus2410 0:2271f1e56f17 72 {
markus2410 0:2271f1e56f17 73 mL.SetPow(ua0.ReadF());
markus2410 0:2271f1e56f17 74 mR.SetPow(ua0.ReadF());
markus2410 0:2271f1e56f17 75 ua0.SvMessage("Set Power");
markus2410 0:2271f1e56f17 76 }
markus2410 0:2271f1e56f17 77 }
markus2410 0:2271f1e56f17 78
markus2410 0:2271f1e56f17 79
markus2410 0:2271f1e56f17 80
markus2410 0:2271f1e56f17 81
markus2410 0:2271f1e56f17 82
markus2410 0:2271f1e56f17 83
markus2410 0:2271f1e56f17 84 void messen()
markus2410 0:2271f1e56f17 85 {
markus2410 0:2271f1e56f17 86 ls1.Read();
markus2410 0:2271f1e56f17 87 ls2.Read();
markus2410 0:2271f1e56f17 88 ls3.Read();
markus2410 0:2271f1e56f17 89 ls4.Read();
markus2410 0:2271f1e56f17 90
markus2410 0:2271f1e56f17 91 if (ls1.Read() > 800)
markus2410 0:2271f1e56f17 92 rechts();
markus2410 0:2271f1e56f17 93
markus2410 0:2271f1e56f17 94 else if (ls4.Read()> 800)
markus2410 0:2271f1e56f17 95 links();
markus2410 0:2271f1e56f17 96
markus2410 0:2271f1e56f17 97 else
markus2410 0:2271f1e56f17 98 gerade();
markus2410 0:2271f1e56f17 99 }
markus2410 0:2271f1e56f17 100
markus2410 0:2271f1e56f17 101
markus2410 0:2271f1e56f17 102 void links()
markus2410 0:2271f1e56f17 103 {
markus2410 0:2271f1e56f17 104 mL.SetPow(0.3);
markus2410 0:2271f1e56f17 105 mR.SetPow(0.0);
markus2410 0:2271f1e56f17 106 }
markus2410 0:2271f1e56f17 107 void rechts()
markus2410 0:2271f1e56f17 108 {
markus2410 0:2271f1e56f17 109 mL.SetPow(0.0);
markus2410 0:2271f1e56f17 110 mR.SetPow(0.3);
markus2410 0:2271f1e56f17 111 }
markus2410 0:2271f1e56f17 112 void gerade()
markus2410 0:2271f1e56f17 113 {
markus2410 0:2271f1e56f17 114 mL.SetPow(0.3);
markus2410 0:2271f1e56f17 115 mR.SetPow(0.3);
markus2410 0:2271f1e56f17 116 }