Dominik Ziemba / Mbed 2 deprecated ProjektMechatronikav2

Dependencies:   mbed X_NUCLEO_IKS01A2

Committer:
ikussm
Date:
Wed Jan 27 18:35:28 2021 +0000
Revision:
1:f92b7ebec49f
Parent:
0:d704d2f21671
xd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
percu 0:d704d2f21671 1 #include "mbed.h"
percu 0:d704d2f21671 2 #include "XNucleoIKS01A2.h" // inicjacja bibliotek
percu 0:d704d2f21671 3 AnalogIn Czujnik_ABP(A0); // inicjacja czujnika
percu 0:d704d2f21671 4 static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);// płytka rozszerzająca
percu 0:d704d2f21671 5 static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor; ////czujniki z płytki rozszerzającej
percu 0:d704d2f21671 6 static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor;
percu 0:d704d2f21671 7 //coś do dziesiątek
percu 0:d704d2f21671 8 static char *print_double(char* str, double v, int decimalDigits=2)
percu 0:d704d2f21671 9 {
percu 0:d704d2f21671 10 int i = 1;
percu 0:d704d2f21671 11 int intPart, fractPart
percu 0:d704d2f21671 12 ;int len;
percu 0:d704d2f21671 13 char *ptr;/* prepare decimal digits multiplicator */
percu 0:d704d2f21671 14 for (;decimalDigits!=0; i*=10, decimalDigits--);
percu 0:d704d2f21671 15 /* calculate integer & fractinal parts */
percu 0:d704d2f21671 16 intPart = (int)v;
percu 0:d704d2f21671 17 fractPart= (int)((v-(double)(int)v)*i);/* fill in integer part */
percu 0:d704d2f21671 18 sprintf(str, "%i.", intPart);/* prepare fill in of fractional part */
percu 0:d704d2f21671 19 len = strlen(str);
percu 0:d704d2f21671 20 ptr = &str[len];/* fill in leading fractional zeros */
percu 0:d704d2f21671 21 for (i/=10;i>1; i/=10, ptr++)
percu 0:d704d2f21671 22 {
percu 0:d704d2f21671 23 if (fractPart >= i)
percu 0:d704d2f21671 24 {
percu 0:d704d2f21671 25 break;
percu 0:d704d2f21671 26 }
percu 0:d704d2f21671 27 *ptr = '0';
percu 0:d704d2f21671 28 }/* fill in (rest of) fractional part */
percu 0:d704d2f21671 29 sprintf(ptr, "%i", fractPart);
percu 0:d704d2f21671 30 return str;
percu 0:d704d2f21671 31 }
percu 0:d704d2f21671 32 int main ()
percu 0:d704d2f21671 33 {
percu 0:d704d2f21671 34 uint8_t id;
percu 0:d704d2f21671 35 float cisnienie, temperatura,odczyt_analog; // Deklaracja zmiennych używanych w programie
ikussm 1:f92b7ebec49f 36 int i;
percu 0:d704d2f21671 37 char buffer1[32], buffer2[32],buffer3[32],buffer5[32];
ikussm 1:f92b7ebec49f 38 double Idealne_cisnienie,bary,ile;
percu 0:d704d2f21671 39 int wzorzecP,wzorzecT;
ikussm 1:f92b7ebec49f 40
ikussm 1:f92b7ebec49f 41 i=0;
ikussm 1:f92b7ebec49f 42
ikussm 1:f92b7ebec49f 43 for (i=0; i<10; i++)
ikussm 1:f92b7ebec49f 44 {
ikussm 1:f92b7ebec49f 45
ikussm 1:f92b7ebec49f 46 odczyt_analog+=Czujnik_ABP.read(); // odczytanie wartości z portu A0
ikussm 1:f92b7ebec49f 47
ikussm 1:f92b7ebec49f 48 }
ikussm 1:f92b7ebec49f 49 odczyt_analog=odczyt_analog/10;
ikussm 1:f92b7ebec49f 50 odczyt_analog=(150*((odczyt_analog*3300)-500)/4500)/14.5; // przeliczenie wartości na bary
ikussm 1:f92b7ebec49f 51
percu 0:d704d2f21671 52
percu 0:d704d2f21671 53 hum_temp->enable(); // Uruchomienie czujnika odpowiedzialnego za pomiar temperatury
percu 0:d704d2f21671 54 press_temp->enable() ; // Uruchomienie czujnika odpowiedzialnego za pomiar ciśnienia
percu 0:d704d2f21671 55 hum_temp->get_temperature(&temperatura); //Odczytanie wartości ciśnienia
percu 0:d704d2f21671 56 press_temp->get_pressure(&cisnienie); //Odczytanie wartości temperatura
percu 0:d704d2f21671 57 printf("Manometr do kol\r\n");
percu 0:d704d2f21671 58 hum_temp->read_id(&id);// Pobranie id czujnika temperatura z płytki rozszerzenia
percu 0:d704d2f21671 59 press_temp->read_id(&id); // Pobranie id czujnika ciśnienia z płytki rozszerzenia
percu 0:d704d2f21671 60 press_temp->get_pressure(&cisnienie); // Odczyt wartości ciśnienia z płytki rozszerzenia
percu 0:d704d2f21671 61 printf(" Cisnie atmosmeryczne: %7s hPa\r\n ",print_double(buffer1, cisnienie)); // Wyświetlenie wartości ciśnienia
percu 0:d704d2f21671 62 press_temp->get_temperature(&temperatura); // Odczytanie wartości temperatury z płytki rozszerzenia
percu 0:d704d2f21671 63 printf("Temp: %7s C\r\n ", print_double(buffer2,temperatura)); // Wyświetlenie wartości temperatury
percu 0:d704d2f21671 64 wzorzecP=230000; //Ciśnieni wzorcowe w kole
percu 0:d704d2f21671 65 wzorzecT=293; // Temeratura wzorcowa w Kelwinach
percu 0:d704d2f21671 66 Idealne_cisnienie=(((wzorzecP)*(temperatura+ 273))/(wzorzecT)); // coś liczymy wartość cisnienia pożądana w kole
percu 0:d704d2f21671 67 bary=Idealne_cisnienie/100000; // przeliczenie na bary z paskali
ikussm 1:f92b7ebec49f 68 ile=(bary-odczyt_analog); // ile należy upuscić z koła
percu 0:d704d2f21671 69 printf("Ile ma byc w kole? %7s B\r\n ", print_double(buffer3,bary)); // Wartość ciśnienia jaka powinna znajdować się kole
ikussm 1:f92b7ebec49f 70
ikussm 1:f92b7ebec49f 71
ikussm 1:f92b7ebec49f 72 printf("Ile jest w kole? %7s B\r\n ", print_double(buffer1,odczyt_analog)); // Wartość ciśnienia jak znaduje się w kole
ikussm 1:f92b7ebec49f 73
ikussm 1:f92b7ebec49f 74 if (odczyt_analog>(bary+0,2)) // początek warunku if odpowiedzialnego za określenie deczycji co należy zrobić z ciśnieniem w kole (Jeżeli ciśnienie ma wartość powyżej bary+0,2)
ikussm 1:f92b7ebec49f 75 {
ikussm 1:f92b7ebec49f 76
percu 0:d704d2f21671 77 printf("Upusc %7s B\r\n ", print_double(buffer5,ile ));
percu 0:d704d2f21671 78 }
ikussm 1:f92b7ebec49f 79 else if (odczyt_analog>=(bary+0,2) && odczyt_analog<=(bary-0,2)) // Jeżeli ciśnienie znaduje się w przedziale <2.5;2.7>
percu 0:d704d2f21671 80 {
percu 0:d704d2f21671 81 printf("Nic nie trzeba robić %7s B\r\n ", print_double(buffer5,ile ));
percu 0:d704d2f21671 82
percu 0:d704d2f21671 83 }
ikussm 1:f92b7ebec49f 84 else if (odczyt_analog < (bary-0,2) ) //Jeżeli ciśnienie mniejsze niż bary-0,2)
percu 0:d704d2f21671 85 {
ikussm 1:f92b7ebec49f 86 printf("dobij %7s B\r\n", print_double(buffer5,ile));
percu 0:d704d2f21671 87 }
percu 0:d704d2f21671 88 }
percu 0:d704d2f21671 89
percu 0:d704d2f21671 90
percu 0:d704d2f21671 91