Die zweite Version der Diplomarbeit

Dependencies:   Servo mbed

Files at this revision

API Documentation at this revision

Comitter:
sophia
Date:
Thu Apr 05 06:53:03 2018 +0000
Commit message:
DIplomarbeit Version 2

Changed in this revision

Servo.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r d2197672dfca Servo.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Servo.lib	Thu Apr 05 06:53:03 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/sophia/code/Servo/#1513875e653f
diff -r 000000000000 -r d2197672dfca main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Apr 05 06:53:03 2018 +0000
@@ -0,0 +1,227 @@
+#include "mbed.h"
+#include "Servo.h"  // Servo
+
+
+//Schrittmotor
+DigitalOut enable(p24); // um den Schrittmotor ein- und ausschalten zu können
+DigitalOut step(p23); // ist dieser Pin HIGH, macht der Schrittmotor einen Schritt
+DigitalOut dir(p22);  // zum Ändern der Drehrichtung des Schrittmotors
+Timer t;
+
+
+
+//Servo
+Servo servo_radius(p26);    //Servomotor zum Ändern des Radius
+Servo servo_phi(p25);   //Servomotor zum Ändern des WInkel phi
+int _posr; //für das Speichern und Übergeben des aktuellen Radius
+int _posphi; //für das Speichern und Übergeben des aktuellen Winkels phi
+
+//Buttons
+InterruptIn btn (p20);  //schwarzer??? Button; zum Weiterschalten der States
+InterruptIn btn_gross(p19);  // zum Richtungswechsel des Schrittmotors im ST_KINN
+                             // wird gedrückt, wenn der Laserpunkt gesehen wird
+
+//Laser
+DigitalOut laser(p21);
+
+//Serielle
+Serial pc(USBTX, USBRX);    // zur Übertragung der Daten an den Computer über eine Serielle Schnittstelle
+
+//Funktionen
+void onestep(); //Schrittmotor bewegt sich um eine, mit der Hardware festgelegten, Schrittweite
+void changedir();   //Richtungsänderung des Schrittmotors
+void position();    //Position umrechnen und übertragen
+void rad_neg(); //Radius von -90 bis 0 abfahren
+void rad_pos(); //Radius von 90 bis 0 abfahren
+void muster();   // das ganze Muster, dass abgefahren wird
+void Init();
+void ButtonInterrupt();
+void ButtonGehalten();
+void ButtonDoppeldrueck();   
+
+
+
+//Statemachine
+int state;
+void funk_nichts();
+void funk_kinn();
+void funk_links();
+void funk_rechts();
+
+const int ST_NICHTS = 1;
+const int ST_KINN = 2;
+const int ST_LINKS = 3;
+const int ST_RECHTS = 4;
+
+int main(void) {
+    Init();
+    while(1) {
+       if(state == ST_NICHTS)
+        funk_nichts();
+        if(state== ST_KINN)
+        funk_kinn();
+        if(state == ST_LINKS)
+        funk_links();
+        if(state == ST_RECHTS)
+        funk_rechts();
+       
+    }
+}
+
+void Init()
+{
+    state = 1;
+}
+
+void funk_nichts()
+{
+     pc.printf("xHalten Sie ihre Augen auf der Hoehe des schwarzen Kreuzes.\n ");
+     pc.printf("xST_NICHTS");
+     while(1)
+    {
+        if(btn == 1) 
+        {
+            state= ST_KINN; 
+            return;
+        }
+    }
+}
+
+void funk_kinn()
+{
+    pc.printf("xHalten Sie den Knopf so lange gedrueckt bis die gewuenschte Hoehe erreicht ist.\n");
+    pc.printf("xUm die Richtung zu aendern druecken Sie den Knopf doppelt.\n");
+    
+    dir = 0;
+    btn_gross.rise(&ButtonInterrupt);
+    t.start();
+    while(1)
+    {
+        if(btn == 1)
+        {
+            state = ST_LINKS;
+            return;
+        }
+    }
+}
+
+void funk_links()
+{
+     pc.printf("xLinkes Auge \n ");
+     pc.printf("xST_LINKS");
+    btn_gross.rise(&position);
+    muster();
+     while(1)
+    {
+        if(btn == 1) 
+        {
+            state= ST_RECHTS; 
+            return;
+        }
+    }
+}
+
+void funk_rechts()
+{
+     pc.printf("xRechtes Auge \n ");
+     pc.printf("xST_RECHTS");
+    btn_gross.rise(&position);
+    muster();
+     while(1)
+    {
+        if(btn == 1) 
+        {
+            state= ST_NICHTS; 
+            return;
+    }
+}
+}
+void position()     //auslesen Position
+{
+    int x = (_posr * cos((double)_posphi * 3.1415/180) + 100);
+    int y = 100-(_posr * sin((double)_posphi * 3.1415/180)) + 100;
+    pc.printf("%d %d\n", x, y);
+}
+
+void rad_neg()   //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;
+        wait(1);
+        laser = 0;
+        wait(1);
+
+    }
+}
+
+void rad_pos()   //Radius von 90 bis 0)
+{
+    for (int i = 90; i >=0; i-=10) {
+        servo_radius.position(i);
+        _posr = i;
+        laser = 1;
+         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();
+        rad_pos();
+
+    }
+
+    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();
+        rad_neg();
+
+    }
+}
+
+void ButtonInterrupt()
+{
+    t.reset();
+    
+    while(btn_gross)
+    {
+        if(t.read_ms() >= 1000)
+        {
+            ButtonGehalten();
+            return;
+        }
+    }
+    
+    while(t.read_ms() <= 1000)
+    {
+        if(btn_gross)
+            ButtonDoppeldrueck();   
+    }
+}
+
+void ButtonGehalten()
+{
+    while(btn_gross)
+    {
+        step = 1;
+        wait_ms(10);
+        step = 0;
+        wait_ms(10);
+    }  
+}
+
+void ButtonDoppeldrueck()
+{
+    dir = !dir;
+}
\ No newline at end of file
diff -r 000000000000 -r d2197672dfca mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Apr 05 06:53:03 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/994bdf8177cb
\ No newline at end of file