Branimir Fotak / Seminar_1

Files at this revision

API Documentation at this revision

Comitter:
bfotak
Date:
Mon Jun 08 17:48:51 2020 +0000
Parent:
3:bd92b23688ae
Commit message:
seminarski rad

Changed in this revision

spi.h Show annotated file Show diff for this revision Revisions of this file
suncokret.h Show annotated file Show diff for this revision Revisions of this file
suncokret1.h Show annotated file Show diff for this revision Revisions of this file
uart.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spi.h	Mon Jun 08 17:48:51 2020 +0000
@@ -0,0 +1,24 @@
+//master program
+
+SPI spi_port(D11, D12, D13); // mosi, miso, sclk
+DigitalOut ss(D10); //slave select pin
+Serial pc(USBTX, USBRX);
+
+
+int main()
+{
+    char podatak;
+    int i = 0;
+    led = 0;
+    int vrijeme = 0.005;
+    
+    spi_port.format(8,1); // 8 bitni okvir, mod rada 0
+    spi_port.frequency(1000000); // frekvencija takta 1MHz
+    while (1) {
+        ss = 1; //digni SS pin u jedinici, aktivan je u jedinici (oznaci slave)
+        podatak = spi_port.write(0xFF & i); //posalji podatak
+        ss = 0; //spusti SS pin u nulu (odznaci slave)
+
+        wait(vrijeme);
+    }
+}
\ No newline at end of file
--- a/suncokret.h	Fri Feb 07 19:27:04 2020 +0000
+++ b/suncokret.h	Mon Jun 08 17:48:51 2020 +0000
@@ -1,36 +1,27 @@
 #include "mbed.h"
-#define DULJINA_PULSA1 0.001
+#define VRIJEME_KRETANJA 0.1
 #define STANI 0
 #define CW 0.0035
 #define CCW 0.006
+
 Serial pc(SERIAL_TX, SERIAL_RX);
+
 AnalogIn in0(A0);
 AnalogIn in1(A1);
 AnalogIn in2(A2);
 AnalogIn in3(A3);
 DigitalOut ledica(D4);
 
-Timeout cekanje;
-
-PwmOut pwmd(D5);
-PwmOut pwmg(D6);
-
 float fotootp1=0, fotootp2=0, fotootp3=0, fotootp4=0;
-//float gore, dolje, lijevo, desno, sum;
-float ref, refV, refM;
-
+float a12, a13, a14, a21, a23, a24, a31, a32, a34, a41, a42, a43;
 int pozicija;
 
-/*
-void sumiranje(){
-    gore = fotootp1 + fotootp2;
-    dolje = fotootp3 + fotootp4;
-    lijevo = fotootp1 + fotootp3;
-    desno = fotootp2 + fotootp4;
-    
-    sum = fotootp1+fotootp2+fotootp3+fotootp4;
-    }
-*/
+PwmOut pwmd(D5);
+PwmOut pwmg(D9);
+
+Timeout cekanje;
+
+
 void ocitanje(){
        /* fotootp1 = in0.read();
         fotootp2 = in2.read();
@@ -46,16 +37,77 @@
     fotootp4 = in3.read();
     printf("\n\r%f\n\n", fotootp4);
     wait(2);
-        
-        //sumiranje();
-
     }
     
+void zakljucivanje(){
+    a12= fotootp1 - fotootp2;
+    a13= fotootp1 - fotootp3;
+    a14= fotootp1 - fotootp4;
+    
+    a21 = fotootp2 - fotootp1;
+    a23 = fotootp2 - fotootp3;
+    a24 = fotootp2 - fotootp4;
+    
+    a31 = fotootp3 - fotootp1;
+    a32 = fotootp3 - fotootp2;
+    a34 = fotootp3 - fotootp4;
+    
+    a41 = fotootp4 - fotootp1;
+    a42 = fotootp4 - fotootp2;
+    a43 = fotootp4 - fotootp3; 
+    
+    if (a12 >= 0.2 && a13 >= 0.2 && a14 >= 0.2){
+        pozicija = 1;
+        }
+        
+    else if (a21 >= 0.2 && a23 >= 0.2 && a24 >= 0.2){
+        pozicija = 2;
+        }
+        
+    else if (a31 >= 0.2 && a32 >= 0.2 && a34 >= 0.2){
+        pozicija = 3;
+        }
+        
+    else if (a41 >= 0.2 && a42 >= 0.2 && a43 >= 0.2){
+        pozicija = 4;
+        }
+        
+    else if (!(a12 >= 0.2 )&& a13 >= 0.2 && a14 >= 0.2){
+        pozicija = 5;
+        }
+        
+    else if (a21 >= 0.2 && !(a23 >= 0.2) && a24 >= 0.2){
+        pozicija = 6;
+        }
+        
+    else if (a31 >= 0.2 && a32 >= 0.2 && !(a34 >= 0.2)){
+        pozicija = 7;
+        }
+    
+    else if (!(a41 >= 0.2) && a42 >= 0.2 && a43 >= 0.2){
+        pozicija = 8;
+        }
+    else {
+        pozicija = 9;
+    }
+        
+
+}
+
+//OUTPUT     ------------------------------------
+void stani(){
+    pwmg.period_ms(20);
+    while(1){
+        pwmg.pulsewidth(STANI);
+        break;
+        }
+    }
     
 void gore(){
     pwmg.period_ms(20);
     while(1){
         pwmg.pulsewidth(CCW);
+        break;
         }
     }
     
@@ -63,6 +115,7 @@
     pwmd.period_ms(20);
     while(1){
         pwmd.pulsewidth(CCW);
+        break;
         }
     }
     
@@ -70,6 +123,7 @@
         pwmg.period_ms(20);
     while(1){
         pwmg.pulsewidth(CW);
+        break;
         }
     }
     
@@ -77,23 +131,53 @@
     pwmd.period_ms(20);
     while(1){
         pwmd.pulsewidth(CW);
+        break;
         }
     }
     
+//OUTPUT -------------------------
 
 void pozicioniranje(){
     switch(pozicija){
         case 1:
-            cekanje.attach(&gore, 0.1);
+            cekanje.attach(&gore, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
             break;
         case 2:
-            cekanje.attach(&desno, 0.1);
+            cekanje.attach(&desno, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
             break;
         case 3:
-            cekanje.attach(&dolje, 0.1);
+            cekanje.attach(&dolje, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
             break;
         case 4:
-            cekanje.attach(&lijevo, 0.1);
+            cekanje.attach(&lijevo, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;          
+        case 5:
+            cekanje.attach(&desno, VRIJEME_KRETANJA);
+            cekanje.attach(&gore, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 6:
+            cekanje.attach(&desno, VRIJEME_KRETANJA);
+            cekanje.attach(&dolje, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 7:
+            cekanje.attach(&lijevo, VRIJEME_KRETANJA);
+            cekanje.attach(&dolje, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 8:
+            cekanje.attach(&lijevo, VRIJEME_KRETANJA);
+            cekanje.attach(&gore, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 9:
+            cekanje.attach(&stani, VRIJEME_KRETANJA);
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
             break;
         default:
             pc.printf("pogresna informacija");
@@ -101,24 +185,16 @@
         }
     }
 
-void logika(){
-    
-    }
+/*   
+
+
+
 
 void trazenje(){
-    pwmd.period_ms(20);
     while(1){
-        //ocitanje();
-        //pozicioniranje();
-        //logika();
-        refV = ref + 0.2;
-        refM = ref - 0.2;
-        //if(sum >= refV & sum <= refV){
-        //pwmd.pulsewidth(0.020);
-        pwmd=0.9;
-        ledica=1;
-        pc.printf("AAAAAAAAAAA");
-           // }
+            //logika za trazenje (spremanje neke vrijednosti) // 3 timera jedan koji broji kolko treba vremena, 
+                                                    //jedan se reseta kada nađe najvecu i jedan za odbrojavanje do pozicije
+            //logika();
         }
     }
-    
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/suncokret1.h	Mon Jun 08 17:48:51 2020 +0000
@@ -0,0 +1,206 @@
+#include "mbed.h"
+#define VRIJEME_KRETANJA 0.1
+#define STANI 0
+#define CW 0.0014
+#define CCW 0.0015
+
+
+Serial pc(SERIAL_TX, SERIAL_RX);
+
+AnalogIn in0(A0);
+AnalogIn in1(A1);
+AnalogIn in2(A2);
+AnalogIn in3(A3);
+
+
+float fotootp1=0, fotootp2=0, fotootp3=0, fotootp4=0;
+float a12, a13, a14, a21, a23, a24, a31, a32, a34, a41, a42, a43;
+int pozicija;
+
+PwmOut pwmd(D4);
+PwmOut pwmg(D9);
+
+Timeout cekanje;
+Timer tKrug, tPozicija, tOstatak;
+int logikaVrmena, t2=0, t3=0;
+
+
+void ocitanje()
+{
+
+    fotootp1 = in0.read();
+    printf("\n\r%f", fotootp1);
+    fotootp2 = in1.read();
+    printf("\n\r%f", fotootp2);
+    fotootp3 = in2.read();
+    printf("\n\r%f", fotootp3);
+    fotootp4 = in3.read();
+    printf("\n\r%f\n\n", fotootp4);
+    wait(0.01);
+}
+
+void zakljucivanje()
+{
+    a12= fotootp1 - fotootp2;
+    a13= fotootp1 - fotootp3;
+    a14= fotootp1 - fotootp4;
+
+    a21 = fotootp2 - fotootp1;
+    a23 = fotootp2 - fotootp3;
+    a24 = fotootp2 - fotootp4;
+
+    a31 = fotootp3 - fotootp1;
+    a32 = fotootp3 - fotootp2;
+    a34 = fotootp3 - fotootp4;
+
+    a41 = fotootp4 - fotootp1;
+    a42 = fotootp4 - fotootp2;
+    a43 = fotootp4 - fotootp3;
+
+    if (a12 >= 0.2 && a13 >= 0.2 && a14 >= 0.2) {
+        pozicija = 1;
+    }
+
+    else if (a21 >= 0.2 && a23 >= 0.2 && a24 >= 0.2) {
+        pozicija = 2;
+    }
+
+    else if (a31 >= 0.2 && a32 >= 0.2 && a34 >= 0.2) {
+        pozicija = 3;
+    }
+
+    else if (a41 >= 0.2 && a42 >= 0.2 && a43 >= 0.2) {
+        pozicija = 4;
+    }
+
+    else if (!(a12 >= 0.2 )&& a13 >= 0.2 && a14 >= 0.2) {
+        pozicija = 5;
+    }
+
+    else if (a21 >= 0.2 && !(a23 >= 0.2) && a24 >= 0.2) {
+        pozicija = 6;
+    }
+
+    else if (a31 >= 0.2 && a32 >= 0.2 && !(a34 >= 0.2)) {
+        pozicija = 7;
+    }
+
+    else if (!(a41 >= 0.2) && a42 >= 0.2 && a43 >= 0.2) {
+        pozicija = 8;
+    } else {
+        pozicija = 9;
+    }
+
+
+}
+
+//OUTPUT     ------------------------------------
+void stani()
+{
+    pwmg.period_ms(20);
+    while(1) {
+        pwmg.pulsewidth(STANI);
+        break;
+    }
+}
+
+void gore()
+{
+    pwmg.period_ms(20);
+    while(1) {
+        pwmg.pulsewidth(CCW);
+        break;
+    }
+}
+
+
+void desno()
+{
+    pwmd.period_ms(20);
+    while(1) {
+        pwmd.pulsewidth(CCW);
+        break;
+    }
+}
+
+void dolje()
+{
+    pwmg.period_ms(20);
+    while(1) {
+        pwmg.pulsewidth(CW);
+        break;
+    }
+}
+
+void lijevo()
+{
+    pwmd.period_ms(20);
+    while(1) {
+        pwmd.pulsewidth(CW);
+        break;
+    }
+}
+
+//OUTPUT -------------------------
+
+void pozicioniranje()
+{
+    switch(pozicija) {
+        case 1:
+            gore();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 2:
+            desno();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 3:
+            dolje();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 4:
+            lijevo();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 5:
+            desno();
+            gore();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 6:
+            desno();
+            dolje();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 7:
+            lijevo();
+            dolje();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 8:
+            lijevo();
+            gore();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        case 9:
+            stani();
+            pc.printf("\n\nNALAZIMO SE U POZICIJI %d\n", pozicija);
+            break;
+        default:
+            pc.printf("pogresna informacija");
+            break;
+    }
+}
+
+
+void trazenje()
+{
+    while(1) {
+        //logika za trazenje (spremanje neke vrijednosti) // 3 timera jedan koji broji kolko treba vremena,
+        //jedan se reseta kada nađe najvecu i jedan za odbrojavanje do pozicije
+        //logika();
+
+
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uart.h	Mon Jun 08 17:48:51 2020 +0000
@@ -0,0 +1,28 @@
+#include "mbed.h"
+Serial app(PA_2,PA_3);
+short ping;
+int t;
+void start()
+{
+    char pin;
+    pin=app.getc();
+    ping=pin;
+
+}
+int main()
+{
+    app.baud(9600);
+    app.attach(&start, Serial::RxIrq);
+    while(1) {
+        pc.printf("Primljeni podatak: %d\n",ping);
+        if(ping==1) {
+            //start program
+            t=1;
+        }
+        if(ping==0) {
+            //stop program
+            t=0;
+        }
+        wait(1);
+    }
+}
\ No newline at end of file