Die erste Version.

Dependencies:   Diplomarbeit_Augimeter_V1 dPrell mbed

Committer:
sophia
Date:
Thu Apr 05 06:48:53 2018 +0000
Revision:
0:66b2f1a46940
Die erste Version der Diplomarbeit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sophia 0:66b2f1a46940 1 #include "mbed.h"
sophia 0:66b2f1a46940 2 #include "Servo.h" // Servo
sophia 0:66b2f1a46940 3 #include "dPrell.h" // entprelltes Interrupt von Schmiedi
sophia 0:66b2f1a46940 4
sophia 0:66b2f1a46940 5 Servo servo_radius(p26);
sophia 0:66b2f1a46940 6 Servo servo_phi(p25);
sophia 0:66b2f1a46940 7 dPrell btn (p20);
sophia 0:66b2f1a46940 8 dPrell btn_start(P1_16); // Zum hochzählen umd das case zu ändern
sophia 0:66b2f1a46940 9 DigitalOut laser(p21);
sophia 0:66b2f1a46940 10 Serial pc(USBTX, USBRX);
sophia 0:66b2f1a46940 11 double _posr; //für auslesen Position aktueller Radius (-90,-80,...,80,90)
sophia 0:66b2f1a46940 12 double _posphi; //für auslesen Position aktueller Winkel Phi(-90,-70,...,70,90)
sophia 0:66b2f1a46940 13
sophia 0:66b2f1a46940 14 void readthebutton(); //auslesen Position
sophia 0:66b2f1a46940 15 void zahlen(); // ISR zum hochzählen zum case ändern
sophia 0:66b2f1a46940 16 void straightoben(); //Radius von -90 bis 0)
sophia 0:66b2f1a46940 17 void straightunten(); //Radius von 90 bis 0)
sophia 0:66b2f1a46940 18 void muster(); // abgefahrenes Muster
sophia 0:66b2f1a46940 19 int zahler = 0; // zähler zum hochzählen und case ändern
sophia 0:66b2f1a46940 20
sophia 0:66b2f1a46940 21
sophia 0:66b2f1a46940 22 int main()
sophia 0:66b2f1a46940 23 {
sophia 0:66b2f1a46940 24 pc.baud(9600);
sophia 0:66b2f1a46940 25 btn.rise(&readthebutton);
sophia 0:66b2f1a46940 26 btn_start.rise(&zahlen);
sophia 0:66b2f1a46940 27 bool f=false;
sophia 0:66b2f1a46940 28 while(1) {
sophia 0:66b2f1a46940 29
sophia 0:66b2f1a46940 30 switch(zahler) {
sophia 0:66b2f1a46940 31 case 0:
sophia 0:66b2f1a46940 32 if(!f)
sophia 0:66b2f1a46940 33 {
sophia 0:66b2f1a46940 34 pc.printf("xCase 0\n");
sophia 0:66b2f1a46940 35 pc.printf("xRichten Sie ihr linkes Auge auf das Kreuz.\nRoten Knopf fuer Start druecken.\n Pressen sie den schwarzen Knopf, sobald Sie den Laser sehen.");
sophia 0:66b2f1a46940 36 f=true;
sophia 0:66b2f1a46940 37 }
sophia 0:66b2f1a46940 38 break;
sophia 0:66b2f1a46940 39
sophia 0:66b2f1a46940 40 case 1: // linkes Auge
sophia 0:66b2f1a46940 41 if(f)
sophia 0:66b2f1a46940 42 {
sophia 0:66b2f1a46940 43 pc.printf("xCase 1\n");
sophia 0:66b2f1a46940 44 muster();
sophia 0:66b2f1a46940 45 pc.printf("xRichten Sie ihr rechtes Auge auf das Kreuz. Roten Knopf fuer Start druecken.\n");
sophia 0:66b2f1a46940 46 f=false;
sophia 0:66b2f1a46940 47 }
sophia 0:66b2f1a46940 48 break;
sophia 0:66b2f1a46940 49
sophia 0:66b2f1a46940 50 case 2: //rechtes Auge
sophia 0:66b2f1a46940 51 pc.printf("xCase 2\n");
sophia 0:66b2f1a46940 52 muster();
sophia 0:66b2f1a46940 53 pc.printf("xFertig.\n");
sophia 0:66b2f1a46940 54 zahler = 0;
sophia 0:66b2f1a46940 55 break;
sophia 0:66b2f1a46940 56
sophia 0:66b2f1a46940 57 }
sophia 0:66b2f1a46940 58 }
sophia 0:66b2f1a46940 59 }
sophia 0:66b2f1a46940 60 void readthebutton() //auslesen Position
sophia 0:66b2f1a46940 61 {
sophia 0:66b2f1a46940 62 int x = (_posr * cos(_posphi * 3.1415/180) + 100);
sophia 0:66b2f1a46940 63 int y = 100-(_posr * sin(_posphi * 3.1415/180)) + 100;
sophia 0:66b2f1a46940 64 pc.printf("%d %d\n", x, y);
sophia 0:66b2f1a46940 65 }
sophia 0:66b2f1a46940 66
sophia 0:66b2f1a46940 67 void zahlen()
sophia 0:66b2f1a46940 68 {
sophia 0:66b2f1a46940 69 zahler++;
sophia 0:66b2f1a46940 70 wait(1);
sophia 0:66b2f1a46940 71 }
sophia 0:66b2f1a46940 72
sophia 0:66b2f1a46940 73 void straightoben() //Radius von -90 bis 0)
sophia 0:66b2f1a46940 74 {
sophia 0:66b2f1a46940 75 for (int i = -90; i <= 0; i+=10) {
sophia 0:66b2f1a46940 76 servo_radius.position(i);
sophia 0:66b2f1a46940 77 _posr = -i; // fürs umrechnen (Radius ist somit immer zwischen 0 und 90
sophia 0:66b2f1a46940 78 laser = 1;
sophia 0:66b2f1a46940 79 readthebutton();
sophia 0:66b2f1a46940 80 wait(1);
sophia 0:66b2f1a46940 81 laser = 0;
sophia 0:66b2f1a46940 82 wait(1);
sophia 0:66b2f1a46940 83
sophia 0:66b2f1a46940 84 }
sophia 0:66b2f1a46940 85 }
sophia 0:66b2f1a46940 86
sophia 0:66b2f1a46940 87 void straightunten() //Radius von 90 bis 0)
sophia 0:66b2f1a46940 88 {
sophia 0:66b2f1a46940 89 for (int i = 90; i >=0; i-=10) {
sophia 0:66b2f1a46940 90 servo_radius.position(i);
sophia 0:66b2f1a46940 91 _posr = i;
sophia 0:66b2f1a46940 92 laser = 1;
sophia 0:66b2f1a46940 93 readthebutton();
sophia 0:66b2f1a46940 94 wait(1);
sophia 0:66b2f1a46940 95 laser = 0;
sophia 0:66b2f1a46940 96 wait(1);
sophia 0:66b2f1a46940 97
sophia 0:66b2f1a46940 98 }
sophia 0:66b2f1a46940 99 }
sophia 0:66b2f1a46940 100
sophia 0:66b2f1a46940 101 void muster() // abgefahrenes Muster
sophia 0:66b2f1a46940 102 {
sophia 0:66b2f1a46940 103 for(int i = -90; i< 90; i+= 15) { //Winkel
sophia 0:66b2f1a46940 104 servo_phi.position(i);
sophia 0:66b2f1a46940 105 //_posphi = i;
sophia 0:66b2f1a46940 106 _posphi = 360-(i + 90); // für Berechnung, die Winkel gehen nun von 0 bis 180
sophia 0:66b2f1a46940 107 //straightoben();
sophia 0:66b2f1a46940 108 straightunten();
sophia 0:66b2f1a46940 109
sophia 0:66b2f1a46940 110 }
sophia 0:66b2f1a46940 111
sophia 0:66b2f1a46940 112 for(int i = -90; i< 90; i+= 15) { //Winkel
sophia 0:66b2f1a46940 113 servo_phi.position(i);
sophia 0:66b2f1a46940 114 //_posphi = i;
sophia 0:66b2f1a46940 115 _posphi = 360-(i + 270); // für Berechnung, die Winkel gehen nun von 180 bis 360
sophia 0:66b2f1a46940 116 //straightunten();
sophia 0:66b2f1a46940 117 straightoben();
sophia 0:66b2f1a46940 118
sophia 0:66b2f1a46940 119 }
sophia 0:66b2f1a46940 120 }