Die erste Version.

Dependencies:   Diplomarbeit_Augimeter_V1 dPrell mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "Servo.h"  // Servo
00003 #include "dPrell.h" // entprelltes Interrupt von Schmiedi
00004 
00005 Servo servo_radius(p26);
00006 Servo servo_phi(p25);
00007 dPrell btn (p20);
00008 dPrell btn_start(P1_16);  // Zum hochzählen umd das case zu ändern
00009 DigitalOut laser(p21);
00010 Serial pc(USBTX, USBRX);
00011 double _posr; //für auslesen Position aktueller Radius (-90,-80,...,80,90)
00012 double _posphi;    //für auslesen Position aktueller Winkel Phi(-90,-70,...,70,90)
00013 
00014 void readthebutton();    //auslesen Position
00015 void zahlen();  // ISR zum hochzählen zum case ändern
00016 void straightoben(); //Radius von -90 bis 0)
00017 void straightunten(); //Radius von 90 bis 0)
00018 void muster();   // abgefahrenes Muster
00019 int zahler = 0; // zähler zum hochzählen und case ändern
00020 
00021 
00022 int main()
00023 {
00024      pc.baud(9600);
00025     btn.rise(&readthebutton);
00026     btn_start.rise(&zahlen);
00027     bool f=false;
00028     while(1) {
00029 
00030         switch(zahler) {
00031             case 0:
00032                 if(!f)
00033                 {
00034                      pc.printf("xCase 0\n");
00035                     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.");
00036                     f=true;
00037                 }
00038                 break;
00039 
00040             case 1: // linkes Auge
00041                 if(f)
00042                 {
00043                 pc.printf("xCase 1\n");
00044                 muster();
00045                 pc.printf("xRichten Sie ihr rechtes Auge auf das Kreuz. Roten Knopf fuer Start druecken.\n");
00046                 f=false;
00047                 }
00048                 break;
00049 
00050             case 2: //rechtes Auge
00051                 pc.printf("xCase 2\n");
00052                 muster();
00053                 pc.printf("xFertig.\n");
00054                 zahler = 0;
00055                 break;
00056 
00057         }
00058     }
00059 }
00060 void readthebutton()     //auslesen Position
00061 {
00062     int x = (_posr * cos(_posphi * 3.1415/180) + 100);
00063     int y = 100-(_posr * sin(_posphi * 3.1415/180)) + 100;
00064     pc.printf("%d %d\n", x, y);
00065 }
00066 
00067 void zahlen()
00068 {
00069     zahler++;
00070     wait(1);
00071 }
00072 
00073 void straightoben()   //Radius von -90 bis 0)
00074 {
00075     for (int i = -90; i <= 0; i+=10) {
00076         servo_radius.position(i);
00077         _posr = -i; // fürs umrechnen (Radius ist somit immer zwischen 0 und 90
00078         laser = 1;
00079         readthebutton();
00080         wait(1);
00081         laser = 0;
00082         wait(1);
00083 
00084     }
00085 }
00086 
00087 void straightunten()   //Radius von 90 bis 0)
00088 {
00089     for (int i = 90; i >=0; i-=10) {
00090         servo_radius.position(i);
00091         _posr = i;
00092         laser = 1;
00093         readthebutton();
00094          wait(1);
00095         laser = 0;
00096         wait(1);
00097 
00098     }
00099 }
00100 
00101 void muster()    // abgefahrenes Muster
00102 {
00103     for(int i = -90; i< 90; i+= 15) { //Winkel
00104         servo_phi.position(i);
00105         //_posphi = i;
00106         _posphi = 360-(i + 90);   // für Berechnung, die Winkel gehen nun von 0 bis 180
00107         //straightoben();
00108         straightunten();
00109 
00110     }
00111 
00112     for(int i = -90; i< 90; i+= 15) { //Winkel
00113         servo_phi.position(i);
00114         //_posphi = i;
00115         _posphi = 360-(i + 270); // für Berechnung, die Winkel gehen nun von 180 bis 360
00116         //straightunten();
00117         straightoben();
00118 
00119     }
00120 }