Mustafa Kazaale
/
Riggen_internettoffentlig
Data over internett
Fork of Riggen_internett by
main.cpp@1:55755f9baff9, 2018-04-13 (annotated)
- Committer:
- mosti89
- Date:
- Fri Apr 13 09:51:50 2018 +0000
- Revision:
- 1:55755f9baff9
- Parent:
- 0:d8cc0114a13e
- Child:
- 2:417d4b54f717
Offentlig
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mosti89 | 1:55755f9baff9 | 1 | //-----------Bibilioteker------------// |
mosti89 | 0:d8cc0114a13e | 2 | #include "mbed.h" |
mosti89 | 0:d8cc0114a13e | 3 | #include "EthernetInterface.h" |
mosti89 | 0:d8cc0114a13e | 4 | #include "C12832.h" // Biblioteket til skjermen på applikasjonsbrettet |
mosti89 | 1:55755f9baff9 | 5 | |
mosti89 | 1:55755f9baff9 | 6 | |
mosti89 | 0:d8cc0114a13e | 7 | Serial pc(USBTX, USBRX); // Serial kommunikasjon med PC |
mosti89 | 0:d8cc0114a13e | 8 | SPI bus(p11, p12, p13); // p11-mosi brukes ikke, p12-miso kobles til pinne 3 på sensoren, p13-sck kobles til pinne 4 på sensoren |
mosti89 | 0:d8cc0114a13e | 9 | DigitalOut slave_1(p19); // p20-SS, koble til pinne 5 på sensor 1 |
mosti89 | 0:d8cc0114a13e | 10 | DigitalOut slave_2(p18); // p19-SS, koble til pinne 5 på sensor 2 |
mosti89 | 0:d8cc0114a13e | 11 | DigitalOut slave_3(p17); // p18-SS, koble til pinne 5 på sensor 3 |
mosti89 | 1:55755f9baff9 | 12 | EthernetInterface net; //Ethernet interface |
mosti89 | 1:55755f9baff9 | 13 | TCPSocket socket; //TCP socket |
mosti89 | 1:55755f9baff9 | 14 | Timer tid; // Timer |
mosti89 | 1:55755f9baff9 | 15 | Ticker t, t1; // Tikker for å kjøre avlesningen to ganger i sekundet. |
mosti89 | 0:d8cc0114a13e | 16 | C12832 lcd(p5, p7, p6, p8, p11);// Skjermen |
mosti89 | 0:d8cc0114a13e | 17 | |
mosti89 | 1:55755f9baff9 | 18 | //--------------Funksjoner-------------// |
mosti89 | 1:55755f9baff9 | 19 | void data(float s1, float av1,float s2, float av2,float s3, float av3); // Oppretting av et array for webaddressen |
mosti89 | 1:55755f9baff9 | 20 | void send(char *arr, int lengde); // Sender data til mottat webaddresse |
mosti89 | 1:55755f9baff9 | 21 | void sensor(); // Avlesning av Sensor verdiene |
mosti89 | 1:55755f9baff9 | 22 | void omregning(int a, float speed); // Omregning av avlesningen |
mosti89 | 0:d8cc0114a13e | 23 | |
mosti89 | 1:55755f9baff9 | 24 | //----------Globale variable-----------// |
mosti89 | 1:55755f9baff9 | 25 | int i=0, ant=0; // Variabelen i er til for å forenkle valget av de tre sensorene, ant er der for antallet avlesninger |
mosti89 | 1:55755f9baff9 | 26 | int avlest[3]; // Array for lagring av avlest verdi |
mosti89 | 1:55755f9baff9 | 27 | float trykk[3]; // Array for lagring av omregnet trykkverdi |
mosti89 | 1:55755f9baff9 | 28 | float fart[3]; // Array for lagring av omregnet fartverdi |
mosti89 | 1:55755f9baff9 | 29 | float sum_fart[3]; // Array for summering av farten |
mosti89 | 1:55755f9baff9 | 30 | float avvik[3]; // Array for lagring av standardavviket på vannhastigheten |
mosti89 | 1:55755f9baff9 | 31 | float gjennomsnitt[3]; // Array for lagring av gjennomsnittelig vannhastighet |
mosti89 | 0:d8cc0114a13e | 32 | |
mosti89 | 1:55755f9baff9 | 33 | //--------Definisjoner----------------// |
mosti89 | 1:55755f9baff9 | 34 | #define ut_min 0x0666 // Minste avleste verdi defineres |
mosti89 | 1:55755f9baff9 | 35 | #define ut_max 0x399A // Maksimum avlest verdi defineres |
mosti89 | 1:55755f9baff9 | 36 | #define trykk_min -6000 // Minimale trykkverdi i Pascal på sensoren defineres |
mosti89 | 1:55755f9baff9 | 37 | #define trykk_max 6000 // Maksimale trykkverdi i Pascal på sernsoren defineres |
mosti89 | 0:d8cc0114a13e | 38 | |
mosti89 | 0:d8cc0114a13e | 39 | int main() |
mosti89 | 0:d8cc0114a13e | 40 | { |
mosti89 | 0:d8cc0114a13e | 41 | pc.printf("\nSetter opp nettverksforbindelse"); |
mosti89 | 1:55755f9baff9 | 42 | net.connect(); // Setter opp nettforbindelse |
mosti89 | 0:d8cc0114a13e | 43 | pc.printf("\nTilkoblet nettet"); |
mosti89 | 0:d8cc0114a13e | 44 | |
mosti89 | 1:55755f9baff9 | 45 | const char *ip = net.get_ip_address();// Innhenter IP addresse |
mosti89 | 0:d8cc0114a13e | 46 | printf("\nIP address is: %s\n\n", ip ? ip : "No IP"); |
mosti89 | 0:d8cc0114a13e | 47 | |
mosti89 | 0:d8cc0114a13e | 48 | bus.format(16,0); // Oppsett av SPI dataformat, (16 bit data, mode 0) |
mosti89 | 0:d8cc0114a13e | 49 | // mode 0 = (klokke verdi ved tomgang = 0, data avleses ved opp-flanke av klokkepuls) |
mosti89 | 0:d8cc0114a13e | 50 | bus.frequency(800000); // Velger frekvensen på kommuniaksjonsklokken til 800KHz |
mosti89 | 0:d8cc0114a13e | 51 | slave_1 = slave_2 = slave_3 = 1;// Ingen slave valgt |
mosti89 | 0:d8cc0114a13e | 52 | pc.printf("\n\tSensor 1\t\t\tSensor 2\t\t\tSensor 3\t\n"); |
mosti89 | 0:d8cc0114a13e | 53 | pc.printf("Inn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\n"); |
mosti89 | 1:55755f9baff9 | 54 | t.attach(&sensor,0.5); // Setter igang Tikker med sensor() fuknsjonen som kalles 2 ganger i sekundet |
mosti89 | 1:55755f9baff9 | 55 | tid.start(); // Starter timer |
mosti89 | 1:55755f9baff9 | 56 | lcd.cls(); // Sletter alt som er på lokale skjermmen |
mosti89 | 1:55755f9baff9 | 57 | lcd.locate(0,3); // Lokkaliserer hvor på skjermen skriften skal komme |
mosti89 | 0:d8cc0114a13e | 58 | lcd.printf(" S1 S2 S3"); |
mosti89 | 1:55755f9baff9 | 59 | |
mosti89 | 1:55755f9baff9 | 60 | //-----------Evig løkke-------------// |
mosti89 | 0:d8cc0114a13e | 61 | while(1) |
mosti89 | 0:d8cc0114a13e | 62 | { |
mosti89 | 0:d8cc0114a13e | 63 | static bool sist = false; // Dette er en liten kode for å sende kun en gang. |
mosti89 | 1:55755f9baff9 | 64 | while (16 < tid.read()) // Tiden må ha passert 16 sekunder for dette blir sant |
mosti89 | 0:d8cc0114a13e | 65 | { |
mosti89 | 1:55755f9baff9 | 66 | if(ant==144) // Tester på om det er blitt utført 144 målinger |
mosti89 | 0:d8cc0114a13e | 67 | { |
mosti89 | 1:55755f9baff9 | 68 | ant=0; // Antallet målinger nullstilles for en ny runde |
mosti89 | 1:55755f9baff9 | 69 | if(!sist) // Tester om ikke sist |
mosti89 | 0:d8cc0114a13e | 70 | { |
mosti89 | 1:55755f9baff9 | 71 | sist = true; // Setter sist til sann, slik at sendingenn kun utføres en gang etter 16 sekunder |
mosti89 | 1:55755f9baff9 | 72 | t.detach(); // Detacher fuknsjonen sensor fra Tikker for å kunne sende uavbrutt. |
mosti89 | 1:55755f9baff9 | 73 | data(gjennomsnitt[0], avvik[0], gjennomsnitt[1], avvik[1], gjennomsnitt[2], avvik[2]);// Sender data |
mosti89 | 1:55755f9baff9 | 74 | for(int c=0; c<3; c++)// En For løkke for å nullstille de Globale variablene |
mosti89 | 0:d8cc0114a13e | 75 | { |
mosti89 | 0:d8cc0114a13e | 76 | avlest[c]=0; |
mosti89 | 0:d8cc0114a13e | 77 | gjennomsnitt[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 78 | avvik[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 79 | trykk[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 80 | fart[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 81 | sum_fart[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 82 | } |
mosti89 | 1:55755f9baff9 | 83 | t.attach(&sensor,0.5);// Tilegner funksjonen sensor til Tikker igjen for avlesning av sensor verdier |
mosti89 | 1:55755f9baff9 | 84 | tid.stop(); // Stopper Timer og resetter for ny runde |
mosti89 | 0:d8cc0114a13e | 85 | tid.reset(); |
mosti89 | 0:d8cc0114a13e | 86 | } |
mosti89 | 0:d8cc0114a13e | 87 | } |
mosti89 | 1:55755f9baff9 | 88 | else // En del av sending en gang |
mosti89 | 0:d8cc0114a13e | 89 | { |
mosti89 | 0:d8cc0114a13e | 90 | sist=false; |
mosti89 | 0:d8cc0114a13e | 91 | } |
mosti89 | 0:d8cc0114a13e | 92 | } |
mosti89 | 0:d8cc0114a13e | 93 | |
mosti89 | 1:55755f9baff9 | 94 | tid.start(); // Starter timer igjen for nye 16 sekunder |
mosti89 | 0:d8cc0114a13e | 95 | } |
mosti89 | 0:d8cc0114a13e | 96 | } |
mosti89 | 0:d8cc0114a13e | 97 | |
mosti89 | 1:55755f9baff9 | 98 | //----------Sensor funskjonen------------// |
mosti89 | 1:55755f9baff9 | 99 | void sensor() |
mosti89 | 0:d8cc0114a13e | 100 | { |
mosti89 | 1:55755f9baff9 | 101 | for(i=0; i<3; i++) // En for løkke for å lese av alle tre sensorene |
mosti89 | 0:d8cc0114a13e | 102 | { |
mosti89 | 0:d8cc0114a13e | 103 | if(i==0) |
mosti89 | 0:d8cc0114a13e | 104 | { |
mosti89 | 1:55755f9baff9 | 105 | slave_1 = 0; // Velger sensor 1 som slave |
mosti89 | 1:55755f9baff9 | 106 | avlest[i] = bus.write(0x0001);// Sender dummy command for å få respons |
mosti89 | 1:55755f9baff9 | 107 | slave_1 = 1; // Slipper slaven |
mosti89 | 0:d8cc0114a13e | 108 | } |
mosti89 | 0:d8cc0114a13e | 109 | |
mosti89 | 0:d8cc0114a13e | 110 | if(i==1) |
mosti89 | 0:d8cc0114a13e | 111 | { |
mosti89 | 1:55755f9baff9 | 112 | slave_2 = 0; // Velger sensor 2 som slave |
mosti89 | 1:55755f9baff9 | 113 | avlest[i] = bus.write(0x0001);// Be om trykk verdi avlesning |
mosti89 | 1:55755f9baff9 | 114 | slave_2 = 1; // Slipper slaven |
mosti89 | 0:d8cc0114a13e | 115 | } |
mosti89 | 0:d8cc0114a13e | 116 | |
mosti89 | 0:d8cc0114a13e | 117 | if(i==2) |
mosti89 | 0:d8cc0114a13e | 118 | { |
mosti89 | 1:55755f9baff9 | 119 | slave_3 = 0; // Velger sensor 3 som slave |
mosti89 | 1:55755f9baff9 | 120 | avlest[i] = bus.write(0x0001);// Be om trykk verdi avlesning |
mosti89 | 1:55755f9baff9 | 121 | slave_3 = 1; // Slipper slaven |
mosti89 | 0:d8cc0114a13e | 122 | } |
mosti89 | 0:d8cc0114a13e | 123 | |
mosti89 | 1:55755f9baff9 | 124 | trykk[i]=1.0*(avlest[i]-ut_min)*(trykk_max-trykk_min)/(ut_max - ut_min)+trykk_min; // Omregningsformel gitt fra produsenten |
mosti89 | 1:55755f9baff9 | 125 | fart[i]= sqrt(abs(2*trykk[i])/1000); // Omregner trykket til hastighet |
mosti89 | 1:55755f9baff9 | 126 | pc.printf("%X\t%.2f\t\t%.2f\t", avlest[i], trykk[i], fart[i]); // Hviser innlest og omregnet verdier |
mosti89 | 0:d8cc0114a13e | 127 | omregning(i, fart[i]); |
mosti89 | 0:d8cc0114a13e | 128 | } |
mosti89 | 0:d8cc0114a13e | 129 | |
mosti89 | 1:55755f9baff9 | 130 | pc.printf("\n"); // New line for at visningen på Teraterm blir forståelig |
mosti89 | 0:d8cc0114a13e | 131 | lcd.locate(0,15); // Lokaloserer hvor på skjermen verdiene skal skrives |
mosti89 | 1:55755f9baff9 | 132 | lcd.printf(" %.2f %.2f %.2f", fart[0], fart[1], fart[2]);// Viser verdiene på lokal skjerm |
mosti89 | 0:d8cc0114a13e | 133 | |
mosti89 | 0:d8cc0114a13e | 134 | } |
mosti89 | 0:d8cc0114a13e | 135 | |
mosti89 | 1:55755f9baff9 | 136 | //----------Omregningsfunskjonen------------// |
mosti89 | 1:55755f9baff9 | 137 | void omregning(int a, float speed) |
mosti89 | 0:d8cc0114a13e | 138 | { |
mosti89 | 1:55755f9baff9 | 139 | ant++; // Inkrementerer den globale variabelen ant med en |
mosti89 | 1:55755f9baff9 | 140 | sum_fart[a] = sum_fart[a] + speed;// summerer alle hastigheter for gjennomsnitt utregning |
mosti89 | 0:d8cc0114a13e | 141 | if(ant==144) |
mosti89 | 0:d8cc0114a13e | 142 | { |
mosti89 | 1:55755f9baff9 | 143 | for(int b=0;b<3;b++) // Regner ut gjennomsnittet for alle tre hastigheten |
mosti89 | 0:d8cc0114a13e | 144 | { |
mosti89 | 0:d8cc0114a13e | 145 | gjennomsnitt[b]=sum_fart[b]/48; |
mosti89 | 0:d8cc0114a13e | 146 | avvik[b]=sqrt(((pow(sum_fart[b]-gjennomsnitt[b], 2)))/(48-1)); |
mosti89 | 0:d8cc0114a13e | 147 | pc.printf("\n Gjennonsnitt: %.2f\t Standardavvik: %.2f\n",gjennomsnitt[b],avvik[b]); |
mosti89 | 0:d8cc0114a13e | 148 | } |
mosti89 | 0:d8cc0114a13e | 149 | pc.printf("antallet: %d\n",ant); |
mosti89 | 0:d8cc0114a13e | 150 | } |
mosti89 | 0:d8cc0114a13e | 151 | } |
mosti89 | 1:55755f9baff9 | 152 | |
mosti89 | 1:55755f9baff9 | 153 | //----------Sende funksjon------------// |
mosti89 | 0:d8cc0114a13e | 154 | void send(char *arr, int lengde) |
mosti89 | 0:d8cc0114a13e | 155 | { |
mosti89 | 0:d8cc0114a13e | 156 | socket.open(&net); |
mosti89 | 0:d8cc0114a13e | 157 | socket.connect("api.thingspeak.com", 80); |
mosti89 | 0:d8cc0114a13e | 158 | |
mosti89 | 0:d8cc0114a13e | 159 | // Sender array til ThingSpeak |
mosti89 | 0:d8cc0114a13e | 160 | socket.send(arr, lengde); |
mosti89 | 0:d8cc0114a13e | 161 | pc.printf("\nSendte:%s\n\n",arr); |
mosti89 | 0:d8cc0114a13e | 162 | |
mosti89 | 0:d8cc0114a13e | 163 | //Lukker socket |
mosti89 | 0:d8cc0114a13e | 164 | socket.close(); |
mosti89 | 0:d8cc0114a13e | 165 | } |
mosti89 | 1:55755f9baff9 | 166 | |
mosti89 | 1:55755f9baff9 | 167 | //----------Dataene som skal sendes------------// |
mosti89 | 0:d8cc0114a13e | 168 | void data(float s1, float av1,float s2, float av2,float s3, float av3) |
mosti89 | 0:d8cc0114a13e | 169 | { |
mosti89 | 1:55755f9baff9 | 170 | char a[200]; // Oppretter buffer ////Fyller buffer med update link med riktig felt og verdi |
mosti89 | 1:55755f9baff9 | 171 | sprintf (a, "GET https://api.thingspeak.com/update?api_key=TT0INEEL44E31AHP&field1=%.2f&field2=%.2f&field3=%.2f&field4=%.2f&field5=%.2f&field6=%.2f\r\n",s1,av1,s2,av2,s3,av3); |
mosti89 | 1:55755f9baff9 | 172 | send(a,200); //Kaller opp funksjonen send for å sende til thingspeak |
mosti89 | 0:d8cc0114a13e | 173 | pc.printf("\n\tSensor 1\t\t\tSensor 2\t\t\tSensor 3\t\n"); |
mosti89 | 0:d8cc0114a13e | 174 | pc.printf("Inn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\n"); |
mosti89 | 0:d8cc0114a13e | 175 | } |