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.
Dependencies: mbed X_NUCLEO_IKS01A2
main.cpp@1:f92b7ebec49f, 2021-01-27 (annotated)
- Committer:
- ikussm
- Date:
- Wed Jan 27 18:35:28 2021 +0000
- Revision:
- 1:f92b7ebec49f
- Parent:
- 0:d704d2f21671
xd
Who changed what in which revision?
User | Revision | Line number | New 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 |