Funktionstüchtiges mbed programm bereit für probeflug
Dependencies: aktuell26012016 mbed
main.cpp
- Committer:
- andreashatzl
- Date:
- 2016-01-26
- Revision:
- 1:234edfc8cac1
- Parent:
- 0:5a51d1a48be4
File content as of revision 1:234edfc8cac1:
#include "mbed.h" #include "hcsr04.h" DigitalOut led_1(LED1); DigitalOut led_2(LED2); DigitalOut led_3(LED3); DigitalOut led_4(LED4); Serial pc(USBTX,USBRX); Serial HC06(p13, p14); HCSR04 sensor(p12, p11); PwmOut servo1(p21),servo2(p22),servo3(p23),servo4(p24); Ticker t1,t2,t3,t4,t5; void servomovedown(); void servomoveup(); void automode(); void checkdistance(); void distancesecure(); void writedistance(); int wert,distancecheck=0; int servotickerstatus =0,automovestatus=0,righttickerstatus=0,lefttickerstatus=0; float power; long distance,distance1,distance2,distance3; int main() { servo1.period_ms(20); servo2.period_ms(20); servo3.period_ms(20); servo4.period_ms(20); char serChar, count; pc.baud(115200); pc.printf("\r\n HC06 is activ!n"); pc.printf("\r\nTry to get connection to HC06\r\n"); led_1 = 1; wait(0.6); led_1 = 0; wait(0.6); led_1= led_2= 1; count=0; wert = 1500; HC06.baud(9600); HC06.printf("mbed started!\n"); wert=1500; while(1) { if (HC06.readable()) { count++; serChar = HC06.getc(); pc.putc(serChar); switch (serChar) { case '1': { servo1.pulsewidth_us(1000); servo2.pulsewidth_us(1000); break; } case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { int mal = serChar - '0'; HC06.printf("Der Wert ist: %d\n",mal); servo1.pulsewidth_us(1140+(50*mal)); servo2.pulsewidth_us(1020+50*mal); break; } case 'b': { if(servotickerstatus == 1) { t1.detach(); servotickerstatus=0; break; } if(servotickerstatus == 0) { servotickerstatus = 1; t1.attach(&servomovedown, 0.01); break; } } //wert= wert+100;servo4.pulsewidth_us(wert); break; case 'f': { if(servotickerstatus == 1) { t1.detach(); servotickerstatus=0; break; } if(servotickerstatus == 0) { servotickerstatus = 1; t1.attach(&servomoveup, 0.01); break; } } case 'l': { if(lefttickerstatus == 1) { servo3.pulsewidth_us(1730); wait(1); servo3.pulsewidth_us(1500); lefttickerstatus=0; break; } if(lefttickerstatus == 0) { lefttickerstatus = 1; servo3.pulsewidth_us(1150); break; }} case 'r': { if(righttickerstatus == 1) { servo3.pulsewidth_us(1150); wait(1); servo3.pulsewidth_us(1500); righttickerstatus=0; break; } if(righttickerstatus == 0) { righttickerstatus = 1; servo3.pulsewidth_us(1730); break;}} case 's': servo3.pulsewidth_us(1500); break; case 'a': if(automovestatus == 1) { t3.detach(); t4.detach(); automovestatus=0; break; } if(automovestatus == 0) { automovestatus = 1; automode(); break; } default: led_1=led_3=0; led_2=led_4=1; break; } } } } void servomovedown() { wert = wert + 10; servo4.pulsewidth_us(wert); if (wert > 2200) { t1.detach(); servotickerstatus=0; } } void servomoveup() { wert = wert - 10; servo4.pulsewidth_us(wert); if (wert < 870) { t1.detach(); servotickerstatus=0; } } void automode() { servo4.pulsewidth_us(900); servo1.pulsewidth_us(1120); servo2.pulsewidth_us(1050); t4.attach(&distancesecure,0.04); t3.attach(&checkdistance, 0.2); t5.attach(&writedistance, 2); return; } void checkdistance() { // if (distance > 150) { // servo1.pulsewidth_us(1120); // servo2.pulsewidth_us(1050); // } else { power = 1733-((distance*10)/3); servo1.pulsewidth_us(power); servo2.pulsewidth_us(power-80); // } } void writedistance() { HC06.printf(" %d", distance); pc.printf("%d\n", distance); } void distancesecure() { distancecheck ++; if (distancecheck == 1) { distance1 = sensor.distance(); } if (distancecheck == 2) { distance2 = sensor.distance(); } if (distancecheck == 3) { distance3 = sensor.distance(); } if (distancecheck == 4) { distancecheck = 0; distance = ((distance1+distance2+distance3)/3); } }