Mustafa Kazaale
/
Riggen_internettoffentlig
Data over internett
Fork of Riggen_internett by
main.cpp@0:d8cc0114a13e, 2018-04-12 (annotated)
- Committer:
- mosti89
- Date:
- Thu Apr 12 21:33:47 2018 +0000
- Revision:
- 0:d8cc0114a13e
- Child:
- 1:55755f9baff9
Logger over nettet
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mosti89 | 0:d8cc0114a13e | 1 | #include "mbed.h" |
mosti89 | 0:d8cc0114a13e | 2 | #include "EthernetInterface.h" |
mosti89 | 0:d8cc0114a13e | 3 | #include "C12832.h" // Biblioteket til skjermen på applikasjonsbrettet |
mosti89 | 0:d8cc0114a13e | 4 | Serial pc(USBTX, USBRX); // Serial kommunikasjon med PC |
mosti89 | 0:d8cc0114a13e | 5 | 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 | 6 | DigitalOut slave_1(p19); // p20-SS, koble til pinne 5 på sensor 1 |
mosti89 | 0:d8cc0114a13e | 7 | DigitalOut slave_2(p18); // p19-SS, koble til pinne 5 på sensor 2 |
mosti89 | 0:d8cc0114a13e | 8 | DigitalOut slave_3(p17); // p18-SS, koble til pinne 5 på sensor 3 |
mosti89 | 0:d8cc0114a13e | 9 | EthernetInterface net; //Ethernet interface |
mosti89 | 0:d8cc0114a13e | 10 | TCPSocket socket; //TCP socket |
mosti89 | 0:d8cc0114a13e | 11 | Timer tid; |
mosti89 | 0:d8cc0114a13e | 12 | Ticker t, t1; |
mosti89 | 0:d8cc0114a13e | 13 | C12832 lcd(p5, p7, p6, p8, p11);// Skjermen |
mosti89 | 0:d8cc0114a13e | 14 | |
mosti89 | 0:d8cc0114a13e | 15 | void data(float s1, float av1,float s2, float av2,float s3, float av3); |
mosti89 | 0:d8cc0114a13e | 16 | void send(char *arr, int lengde); |
mosti89 | 0:d8cc0114a13e | 17 | |
mosti89 | 0:d8cc0114a13e | 18 | int i=0, ant=0; |
mosti89 | 0:d8cc0114a13e | 19 | int avlest[3]; |
mosti89 | 0:d8cc0114a13e | 20 | float trykk[3]; |
mosti89 | 0:d8cc0114a13e | 21 | float fart[3]; |
mosti89 | 0:d8cc0114a13e | 22 | float sum_fart[3]; |
mosti89 | 0:d8cc0114a13e | 23 | float avvik[3]; |
mosti89 | 0:d8cc0114a13e | 24 | float gjennomsnitt[3]; |
mosti89 | 0:d8cc0114a13e | 25 | |
mosti89 | 0:d8cc0114a13e | 26 | void sensor(); //Lese av og omregne verdien fra sensorene |
mosti89 | 0:d8cc0114a13e | 27 | void omregning(int a, float speed); |
mosti89 | 0:d8cc0114a13e | 28 | |
mosti89 | 0:d8cc0114a13e | 29 | #define ut_min 0x0666 // Minste avleste verdi |
mosti89 | 0:d8cc0114a13e | 30 | #define ut_max 0x399A // Maksimum avlest verdi |
mosti89 | 0:d8cc0114a13e | 31 | #define trykk_min -6000 // Minimale trykkverdi i Pascal på sensoren |
mosti89 | 0:d8cc0114a13e | 32 | #define trykk_max 6000 // Maksimale trykkverdi i Pascal på sernsoren |
mosti89 | 0:d8cc0114a13e | 33 | |
mosti89 | 0:d8cc0114a13e | 34 | int main() |
mosti89 | 0:d8cc0114a13e | 35 | { |
mosti89 | 0:d8cc0114a13e | 36 | pc.printf("\nSetter opp nettverksforbindelse"); |
mosti89 | 0:d8cc0114a13e | 37 | net.connect(); |
mosti89 | 0:d8cc0114a13e | 38 | pc.printf("\nTilkoblet nettet"); |
mosti89 | 0:d8cc0114a13e | 39 | |
mosti89 | 0:d8cc0114a13e | 40 | const char *ip = net.get_ip_address(); |
mosti89 | 0:d8cc0114a13e | 41 | printf("\nIP address is: %s\n\n", ip ? ip : "No IP"); |
mosti89 | 0:d8cc0114a13e | 42 | |
mosti89 | 0:d8cc0114a13e | 43 | bus.format(16,0); // Oppsett av SPI dataformat, (16 bit data, mode 0) |
mosti89 | 0:d8cc0114a13e | 44 | // mode 0 = (klokke verdi ved tomgang = 0, data avleses ved opp-flanke av klokkepuls) |
mosti89 | 0:d8cc0114a13e | 45 | bus.frequency(800000); // Velger frekvensen på kommuniaksjonsklokken til 800KHz |
mosti89 | 0:d8cc0114a13e | 46 | slave_1 = slave_2 = slave_3 = 1;// Ingen slave valgt |
mosti89 | 0:d8cc0114a13e | 47 | pc.printf("\n\tSensor 1\t\t\tSensor 2\t\t\tSensor 3\t\n"); |
mosti89 | 0:d8cc0114a13e | 48 | pc.printf("Inn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\n"); |
mosti89 | 0:d8cc0114a13e | 49 | t.attach(&sensor,0.5); |
mosti89 | 0:d8cc0114a13e | 50 | tid.start(); |
mosti89 | 0:d8cc0114a13e | 51 | lcd.cls(); |
mosti89 | 0:d8cc0114a13e | 52 | lcd.locate(0,3); |
mosti89 | 0:d8cc0114a13e | 53 | lcd.printf(" S1 S2 S3"); |
mosti89 | 0:d8cc0114a13e | 54 | while(1) |
mosti89 | 0:d8cc0114a13e | 55 | { |
mosti89 | 0:d8cc0114a13e | 56 | |
mosti89 | 0:d8cc0114a13e | 57 | static bool sist = false; // Dette er en liten kode for å sende kun en gang. |
mosti89 | 0:d8cc0114a13e | 58 | while (16 < tid.read()) |
mosti89 | 0:d8cc0114a13e | 59 | { |
mosti89 | 0:d8cc0114a13e | 60 | |
mosti89 | 0:d8cc0114a13e | 61 | if(ant==144) |
mosti89 | 0:d8cc0114a13e | 62 | { |
mosti89 | 0:d8cc0114a13e | 63 | ant=0; |
mosti89 | 0:d8cc0114a13e | 64 | if(!sist) // Tester om ikke sist |
mosti89 | 0:d8cc0114a13e | 65 | { |
mosti89 | 0:d8cc0114a13e | 66 | sist = true; // Setter sist til sann. |
mosti89 | 0:d8cc0114a13e | 67 | t.detach(); |
mosti89 | 0:d8cc0114a13e | 68 | data(gjennomsnitt[0], avvik[0], gjennomsnitt[1], avvik[1], gjennomsnitt[2], avvik[2]); |
mosti89 | 0:d8cc0114a13e | 69 | for(int c=0; c<3; c++) |
mosti89 | 0:d8cc0114a13e | 70 | { |
mosti89 | 0:d8cc0114a13e | 71 | avlest[c]=0; |
mosti89 | 0:d8cc0114a13e | 72 | gjennomsnitt[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 73 | avvik[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 74 | trykk[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 75 | fart[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 76 | sum_fart[c]=0.0; |
mosti89 | 0:d8cc0114a13e | 77 | } |
mosti89 | 0:d8cc0114a13e | 78 | t.attach(&sensor,0.5); |
mosti89 | 0:d8cc0114a13e | 79 | tid.stop(); |
mosti89 | 0:d8cc0114a13e | 80 | tid.reset(); |
mosti89 | 0:d8cc0114a13e | 81 | } |
mosti89 | 0:d8cc0114a13e | 82 | } |
mosti89 | 0:d8cc0114a13e | 83 | else |
mosti89 | 0:d8cc0114a13e | 84 | { |
mosti89 | 0:d8cc0114a13e | 85 | sist=false; |
mosti89 | 0:d8cc0114a13e | 86 | } |
mosti89 | 0:d8cc0114a13e | 87 | } |
mosti89 | 0:d8cc0114a13e | 88 | |
mosti89 | 0:d8cc0114a13e | 89 | tid.start(); |
mosti89 | 0:d8cc0114a13e | 90 | } |
mosti89 | 0:d8cc0114a13e | 91 | |
mosti89 | 0:d8cc0114a13e | 92 | } |
mosti89 | 0:d8cc0114a13e | 93 | |
mosti89 | 0:d8cc0114a13e | 94 | void sensor() // Funksjon for sensor |
mosti89 | 0:d8cc0114a13e | 95 | { |
mosti89 | 0:d8cc0114a13e | 96 | for(i=0; i<3; i++) |
mosti89 | 0:d8cc0114a13e | 97 | { |
mosti89 | 0:d8cc0114a13e | 98 | if(i==0) |
mosti89 | 0:d8cc0114a13e | 99 | { |
mosti89 | 0:d8cc0114a13e | 100 | slave_1 = 0; // Velger sensor 1 som slave |
mosti89 | 0:d8cc0114a13e | 101 | avlest[i] = bus.write(0x0001); // Sender dummy command for å få respons |
mosti89 | 0:d8cc0114a13e | 102 | slave_1 = 1; // Slipper slaven |
mosti89 | 0:d8cc0114a13e | 103 | } |
mosti89 | 0:d8cc0114a13e | 104 | |
mosti89 | 0:d8cc0114a13e | 105 | if(i==1) |
mosti89 | 0:d8cc0114a13e | 106 | { |
mosti89 | 0:d8cc0114a13e | 107 | slave_2 = 0; // Velger sensor 2 som slave |
mosti89 | 0:d8cc0114a13e | 108 | avlest[i] = bus.write(0x0001); // Be om trykk verdi avlesning |
mosti89 | 0:d8cc0114a13e | 109 | slave_2 = 1; // Slipper slaven |
mosti89 | 0:d8cc0114a13e | 110 | } |
mosti89 | 0:d8cc0114a13e | 111 | |
mosti89 | 0:d8cc0114a13e | 112 | if(i==2) |
mosti89 | 0:d8cc0114a13e | 113 | { |
mosti89 | 0:d8cc0114a13e | 114 | slave_3 = 0; // Velger sensor 3 som slave |
mosti89 | 0:d8cc0114a13e | 115 | avlest[i] = bus.write(0x0001); // Be om trykk verdi avlesning |
mosti89 | 0:d8cc0114a13e | 116 | slave_3 = 1; // Slipper slaven |
mosti89 | 0:d8cc0114a13e | 117 | } |
mosti89 | 0:d8cc0114a13e | 118 | |
mosti89 | 0:d8cc0114a13e | 119 | trykk[i]=1.0*(avlest[i]-ut_min)*(trykk_max-trykk_min)/(ut_max - ut_min)+trykk_min; // Omregningsformel gitt fra produsenten |
mosti89 | 0:d8cc0114a13e | 120 | fart[i]= sqrt(abs(2*trykk[i])/1000); // Omregner trykket til hastighet |
mosti89 | 0:d8cc0114a13e | 121 | pc.printf("%X\t%.2f\t\t%.2f\t", avlest[i], trykk[i], fart[i]);// Hviser innlest og omregnet verdier |
mosti89 | 0:d8cc0114a13e | 122 | omregning(i, fart[i]); |
mosti89 | 0:d8cc0114a13e | 123 | } |
mosti89 | 0:d8cc0114a13e | 124 | |
mosti89 | 0:d8cc0114a13e | 125 | pc.printf("\n"); |
mosti89 | 0:d8cc0114a13e | 126 | lcd.locate(0,15); // Lokaloserer hvor på skjermen verdiene skal skrives |
mosti89 | 0:d8cc0114a13e | 127 | lcd.printf(" %.2f %.2f %.2f", fart[0], fart[1], fart[2]); |
mosti89 | 0:d8cc0114a13e | 128 | |
mosti89 | 0:d8cc0114a13e | 129 | } |
mosti89 | 0:d8cc0114a13e | 130 | |
mosti89 | 0:d8cc0114a13e | 131 | void omregning(int a, float speed) // Funksjon for sensor 2 |
mosti89 | 0:d8cc0114a13e | 132 | { |
mosti89 | 0:d8cc0114a13e | 133 | ant++; |
mosti89 | 0:d8cc0114a13e | 134 | sum_fart[a] = sum_fart[a] + speed; // summerer alle hastigheter |
mosti89 | 0:d8cc0114a13e | 135 | if(ant==144) |
mosti89 | 0:d8cc0114a13e | 136 | { |
mosti89 | 0:d8cc0114a13e | 137 | //-------------Regner ut gjennomsnittet---------// |
mosti89 | 0:d8cc0114a13e | 138 | for(int b=0;b<3;b++) |
mosti89 | 0:d8cc0114a13e | 139 | { |
mosti89 | 0:d8cc0114a13e | 140 | gjennomsnitt[b]=sum_fart[b]/48; |
mosti89 | 0:d8cc0114a13e | 141 | avvik[b]=sqrt(((pow(sum_fart[b]-gjennomsnitt[b], 2)))/(48-1)); |
mosti89 | 0:d8cc0114a13e | 142 | pc.printf("\n Gjennonsnitt: %.2f\t Standardavvik: %.2f\n",gjennomsnitt[b],avvik[b]); |
mosti89 | 0:d8cc0114a13e | 143 | } |
mosti89 | 0:d8cc0114a13e | 144 | pc.printf("antallet: %d\n",ant); |
mosti89 | 0:d8cc0114a13e | 145 | } |
mosti89 | 0:d8cc0114a13e | 146 | } |
mosti89 | 0:d8cc0114a13e | 147 | |
mosti89 | 0:d8cc0114a13e | 148 | void send(char *arr, int lengde) |
mosti89 | 0:d8cc0114a13e | 149 | { |
mosti89 | 0:d8cc0114a13e | 150 | socket.open(&net); |
mosti89 | 0:d8cc0114a13e | 151 | socket.connect("api.thingspeak.com", 80); |
mosti89 | 0:d8cc0114a13e | 152 | |
mosti89 | 0:d8cc0114a13e | 153 | // Sender array til ThingSpeak |
mosti89 | 0:d8cc0114a13e | 154 | socket.send(arr, lengde); |
mosti89 | 0:d8cc0114a13e | 155 | pc.printf("\nSendte:%s\n\n",arr); |
mosti89 | 0:d8cc0114a13e | 156 | |
mosti89 | 0:d8cc0114a13e | 157 | //Lukker socket |
mosti89 | 0:d8cc0114a13e | 158 | socket.close(); |
mosti89 | 0:d8cc0114a13e | 159 | } |
mosti89 | 0:d8cc0114a13e | 160 | void data(float s1, float av1,float s2, float av2,float s3, float av3) |
mosti89 | 0:d8cc0114a13e | 161 | { |
mosti89 | 0:d8cc0114a13e | 162 | char a[200]; //Oppretter buffer |
mosti89 | 0:d8cc0114a13e | 163 | 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); //Fyller buffer med update link med riktig felt og verdi |
mosti89 | 0:d8cc0114a13e | 164 | send(a,200); //Kaller opp funksjonen send for å sende til thingspeak |
mosti89 | 0:d8cc0114a13e | 165 | pc.printf("\n\tSensor 1\t\t\tSensor 2\t\t\tSensor 3\t\n"); |
mosti89 | 0:d8cc0114a13e | 166 | pc.printf("Inn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\n"); |
mosti89 | 0:d8cc0114a13e | 167 | } |