Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Riggen_internett by
main.cpp
00001 //-----------Bibilioteker------------// 00002 #include "mbed.h" 00003 #include "EthernetInterface.h" 00004 #include "C12832.h" // Biblioteket til skjermen på applikasjonsbrettet 00005 00006 00007 Serial pc(USBTX, USBRX); // Serial kommunikasjon med PC 00008 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 00009 DigitalOut slave_1(p19); // p20-SS, koble til pinne 5 på sensor 1 00010 DigitalOut slave_2(p18); // p19-SS, koble til pinne 5 på sensor 2 00011 DigitalOut slave_3(p17); // p18-SS, koble til pinne 5 på sensor 3 00012 EthernetInterface net; //Ethernet interface 00013 TCPSocket socket; //TCP socket 00014 Timer tid; // Timer 00015 Ticker t, t1; // Tikker for å kjøre avlesningen to ganger i sekundet. 00016 C12832 lcd(p5, p7, p6, p8, p11);// Skjermen 00017 00018 //--------------Funksjoner-------------// 00019 void data(float s1, float av1,float s2, float av2,float s3, float av3); // Oppretting av et array for webaddressen 00020 void send(char *arr, int lengde); // Sender data til mottat webaddresse 00021 void sensor(); // Avlesning av Sensor verdiene 00022 void omregning(int a, float speed); // Omregning av avlesningen 00023 00024 //----------Globale variable-----------// 00025 int i=0, ant=0; // Variabelen i er til for å forenkle valget av de tre sensorene, ant er der for antallet avlesninger 00026 int avlest[3]; // Array for lagring av avlest verdi 00027 float trykk[3]; // Array for lagring av omregnet trykkverdi 00028 float fart[3]; // Array for lagring av omregnet fartverdi 00029 float sum_fart[3]; // Array for summering av farten 00030 float avvik[3]; // Array for lagring av standardavviket på vannhastigheten 00031 float gjennomsnitt[3]; // Array for lagring av gjennomsnittelig vannhastighet 00032 00033 //--------Definisjoner----------------// 00034 #define ut_min 0x0666 // Minste avleste verdi defineres 00035 #define ut_max 0x399A // Maksimum avlest verdi defineres 00036 #define trykk_min -6000 // Minimale trykkverdi i Pascal på sensoren defineres 00037 #define trykk_max 6000 // Maksimale trykkverdi i Pascal på sernsoren defineres 00038 00039 int main() 00040 { 00041 pc.printf("\nSetter opp nettverksforbindelse"); 00042 net.connect(); // Setter opp nettforbindelse 00043 pc.printf("\nTilkoblet nettet"); 00044 00045 const char *ip = net.get_ip_address();// Innhenter IP addresse 00046 printf("\nIP address is: %s\n\n", ip ? ip : "No IP"); 00047 00048 bus.format(16,0); // Oppsett av SPI dataformat, (16 bit data, mode 0) 00049 // mode 0 = (klokke verdi ved tomgang = 0, data avleses ved opp-flanke av klokkepuls) 00050 bus.frequency(800000); // Velger frekvensen på kommuniaksjonsklokken til 800KHz 00051 slave_1 = slave_2 = slave_3 = 1;// Ingen slave valgt 00052 pc.printf("\n\tSensor 1\t\t\tSensor 2\t\t\tSensor 3\t\n"); 00053 pc.printf("Inn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\n"); 00054 t.attach(&sensor,0.5); // Setter igang Tikker med sensor() fuknsjonen som kalles 2 ganger i sekundet 00055 tid.start(); // Starter timer 00056 lcd.cls(); // Sletter alt som er på lokale skjermmen 00057 lcd.locate(0,3); // Lokkaliserer hvor på skjermen skriften skal komme 00058 lcd.printf(" S1 S2 S3"); 00059 00060 //-----------Evig løkke-------------// 00061 while(1) 00062 { 00063 static bool sist = false; // Dette er en liten kode for å sende kun en gang. 00064 while (16 < tid.read()) // Tiden må ha passert 16 sekunder for dette blir sant 00065 { 00066 if(ant==144) // Tester på om det er blitt utført 144 målinger 00067 { 00068 ant=0; // Antallet målinger nullstilles for en ny runde 00069 if(!sist) // Tester om ikke sist 00070 { 00071 sist = true; // Setter sist til sann, slik at sendingenn kun utføres en gang etter 16 sekunder 00072 t.detach(); // Detacher fuknsjonen sensor fra Tikker for å kunne sende uavbrutt. 00073 data(gjennomsnitt[0], avvik[0], gjennomsnitt[1], avvik[1], gjennomsnitt[2], avvik[2]);// Sender data 00074 for(int c=0; c<3; c++)// En For løkke for å nullstille de Globale variablene 00075 { 00076 avlest[c]=0; 00077 gjennomsnitt[c]=0.0; 00078 avvik[c]=0.0; 00079 trykk[c]=0.0; 00080 fart[c]=0.0; 00081 sum_fart[c]=0.0; 00082 } 00083 t.attach(&sensor,0.5);// Tilegner funksjonen sensor til Tikker igjen for avlesning av sensor verdier 00084 tid.stop(); // Stopper Timer og resetter for ny runde 00085 tid.reset(); 00086 } 00087 } 00088 else // En del av sending en gang 00089 { 00090 sist=false; 00091 } 00092 } 00093 00094 tid.start(); // Starter timer igjen for nye 16 sekunder 00095 } 00096 } 00097 00098 //----------Sensor funskjonen------------// 00099 void sensor() 00100 { 00101 for(i=0; i<3; i++) // En for løkke for å lese av alle tre sensorene 00102 { 00103 if(i==0) 00104 { 00105 slave_1 = 0; // Velger sensor 1 som slave 00106 avlest[i] = bus.write(0x0001);// Sender dummy command for å få respons 00107 slave_1 = 1; // Slipper slaven 00108 } 00109 00110 if(i==1) 00111 { 00112 slave_2 = 0; // Velger sensor 2 som slave 00113 avlest[i] = bus.write(0x0001);// Be om trykk verdi avlesning 00114 slave_2 = 1; // Slipper slaven 00115 } 00116 00117 if(i==2) 00118 { 00119 slave_3 = 0; // Velger sensor 3 som slave 00120 avlest[i] = bus.write(0x0001);// Be om trykk verdi avlesning 00121 slave_3 = 1; // Slipper slaven 00122 } 00123 00124 trykk[i]=1.0*(avlest[i]-ut_min)*(trykk_max-trykk_min)/(ut_max - ut_min)+trykk_min; // Omregningsformel gitt fra produsenten 00125 if(trykk[i]<0) // Dersom trykket er negativt fjernes fortegnet 00126 { // Absolutt verdien er for at kvadratroten ikke skal returnere komplekse tall 00127 fart[i] = sqrt(abs(2*trykk[i])/1000); // Omregner trykket til hastighet 00128 fart[i] = -1*fart[i]; 00129 } 00130 else 00131 { 00132 fart[i] = sqrt((2*trykk[i])/1000); // Omregner trykket til hastighet 00133 } 00134 00135 pc.printf("%X\t%.2f\t\t%.2f\t", avlest[i], trykk[i], fart[i]); // Hviser innlest og omregnet verdier 00136 omregning(i, fart[i]); 00137 } 00138 00139 pc.printf("\n"); // New line for at visningen på Teraterm blir forståelig 00140 lcd.locate(0,15); // Lokaloserer hvor på skjermen verdiene skal skrives 00141 lcd.printf(" %.2f %.2f %.2f", fart[0], fart[1], fart[2]);// Viser verdiene på lokal skjerm 00142 00143 } 00144 00145 //----------Omregningsfunskjonen------------// 00146 void omregning(int a, float speed) 00147 { 00148 ant++; // Inkrementerer den globale variabelen ant med en 00149 sum_fart[a] = sum_fart[a] + speed;// summerer alle hastigheter for gjennomsnitt utregning 00150 if(ant==144) 00151 { 00152 for(int b=0;b<3;b++) // Regner ut gjennomsnittet for alle tre hastigheten 00153 { 00154 gjennomsnitt[b]=sum_fart[b]/48; 00155 avvik[b]=sqrt(((pow(sum_fart[b]-gjennomsnitt[b], 2)))/(48-1)); 00156 pc.printf("\n Gjennonsnitt: %.2f\t Standardavvik: %.2f\n",gjennomsnitt[b],avvik[b]); 00157 } 00158 pc.printf("antallet: %d\n",ant); 00159 } 00160 } 00161 00162 //----------Sende funksjon------------// 00163 void send(char *arr, int lengde) 00164 { 00165 socket.open(&net); 00166 socket.connect("api.thingspeak.com", 80); 00167 00168 // Sender array til ThingSpeak 00169 socket.send(arr, lengde); 00170 pc.printf("\nSendte:%s\n\n",arr); 00171 00172 //Lukker socket 00173 socket.close(); 00174 } 00175 00176 //----------Dataene som skal sendes------------// 00177 void data(float s1, float av1,float s2, float av2,float s3, float av3) 00178 { 00179 char a[200]; // Oppretter buffer ////Fyller buffer med update link med riktig felt og verdi 00180 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); 00181 send(a,200); //Kaller opp funksjonen send for å sende til thingspeak 00182 pc.printf("\n\tSensor 1\t\t\tSensor 2\t\t\tSensor 3\t\n"); 00183 pc.printf("Inn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\tInn\tP\t\t[m/s]\n"); 00184 }
Generated on Wed Jul 27 2022 02:29:16 by
1.7.2
