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