Die erste Version.
Dependencies: Diplomarbeit_Augimeter_V1 dPrell mbed
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 }
Generated on Thu Jul 14 2022 11:21:57 by 1.7.2