![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Die erste Version.
Dependencies: Diplomarbeit_Augimeter_V1 dPrell mbed
main.cpp
- Committer:
- sophia
- Date:
- 2018-04-05
- Revision:
- 0:66b2f1a46940
File content as of revision 0:66b2f1a46940:
#include "mbed.h" #include "Servo.h" // Servo #include "dPrell.h" // entprelltes Interrupt von Schmiedi Servo servo_radius(p26); Servo servo_phi(p25); dPrell btn (p20); dPrell btn_start(P1_16); // Zum hochzählen umd das case zu ändern DigitalOut laser(p21); Serial pc(USBTX, USBRX); double _posr; //für auslesen Position aktueller Radius (-90,-80,...,80,90) double _posphi; //für auslesen Position aktueller Winkel Phi(-90,-70,...,70,90) void readthebutton(); //auslesen Position void zahlen(); // ISR zum hochzählen zum case ändern void straightoben(); //Radius von -90 bis 0) void straightunten(); //Radius von 90 bis 0) void muster(); // abgefahrenes Muster int zahler = 0; // zähler zum hochzählen und case ändern int main() { pc.baud(9600); btn.rise(&readthebutton); btn_start.rise(&zahlen); bool f=false; while(1) { switch(zahler) { case 0: if(!f) { pc.printf("xCase 0\n"); 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."); f=true; } break; case 1: // linkes Auge if(f) { pc.printf("xCase 1\n"); muster(); pc.printf("xRichten Sie ihr rechtes Auge auf das Kreuz. Roten Knopf fuer Start druecken.\n"); f=false; } break; case 2: //rechtes Auge pc.printf("xCase 2\n"); muster(); pc.printf("xFertig.\n"); zahler = 0; break; } } } void readthebutton() //auslesen Position { int x = (_posr * cos(_posphi * 3.1415/180) + 100); int y = 100-(_posr * sin(_posphi * 3.1415/180)) + 100; pc.printf("%d %d\n", x, y); } void zahlen() { zahler++; wait(1); } void straightoben() //Radius von -90 bis 0) { for (int i = -90; i <= 0; i+=10) { servo_radius.position(i); _posr = -i; // fürs umrechnen (Radius ist somit immer zwischen 0 und 90 laser = 1; readthebutton(); wait(1); laser = 0; wait(1); } } void straightunten() //Radius von 90 bis 0) { for (int i = 90; i >=0; i-=10) { servo_radius.position(i); _posr = i; laser = 1; readthebutton(); wait(1); laser = 0; wait(1); } } void muster() // abgefahrenes Muster { for(int i = -90; i< 90; i+= 15) { //Winkel servo_phi.position(i); //_posphi = i; _posphi = 360-(i + 90); // für Berechnung, die Winkel gehen nun von 0 bis 180 //straightoben(); straightunten(); } for(int i = -90; i< 90; i+= 15) { //Winkel servo_phi.position(i); //_posphi = i; _posphi = 360-(i + 270); // für Berechnung, die Winkel gehen nun von 180 bis 360 //straightunten(); straightoben(); } }