Dominik Ziemba / Mbed 2 deprecated ProjektMechatronikav2

Dependencies:   mbed X_NUCLEO_IKS01A2

main.cpp

Committer:
ikussm
Date:
2021-01-27
Revision:
1:f92b7ebec49f
Parent:
0:d704d2f21671

File content as of revision 1:f92b7ebec49f:

#include "mbed.h"
#include "XNucleoIKS01A2.h" // inicjacja bibliotek 
AnalogIn Czujnik_ABP(A0); // inicjacja czujnika 
static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);// płytka rozszerzająca 
static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor; ////czujniki z płytki rozszerzającej 
static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor;
//coś do dziesiątek 
static char *print_double(char* str, double v, int decimalDigits=2)
{
int i = 1;
int intPart, fractPart
;int len;
char *ptr;/* prepare decimal digits multiplicator */
for (;decimalDigits!=0; i*=10, decimalDigits--);
/* calculate integer & fractinal parts */
intPart = (int)v;
fractPart= (int)((v-(double)(int)v)*i);/* fill in integer part */
sprintf(str, "%i.", intPart);/* prepare fill in of fractional part */
len = strlen(str);
ptr = &str[len];/* fill in leading fractional zeros */
for (i/=10;i>1; i/=10, ptr++) 
{
    if (fractPart >= i) 
    {
        break;
        }
        *ptr = '0';
        }/* fill in (rest of) fractional part */
        sprintf(ptr, "%i", fractPart);
        return str;
        }
int main ()
{
uint8_t id;                 
float cisnienie, temperatura,odczyt_analog;             //  Deklaracja  zmiennych używanych w programie 
int i;
char buffer1[32], buffer2[32],buffer3[32],buffer5[32]; 
double Idealne_cisnienie,bary,ile; 
int wzorzecP,wzorzecT;

i=0;

for (i=0; i<10; i++) 
{
 
 odczyt_analog+=Czujnik_ABP.read(); // odczytanie wartości z portu A0
    
}
odczyt_analog=odczyt_analog/10;
odczyt_analog=(150*((odczyt_analog*3300)-500)/4500)/14.5; // przeliczenie wartości na bary


hum_temp->enable(); // Uruchomienie czujnika odpowiedzialnego za pomiar temperatury
press_temp->enable() ;  //  Uruchomienie czujnika odpowiedzialnego za pomiar ciśnienia
hum_temp->get_temperature(&temperatura);      //Odczytanie wartości ciśnienia  
press_temp->get_pressure(&cisnienie);  //Odczytanie wartości temperatura  
printf("Manometr do kol\r\n");  
hum_temp->read_id(&id);// Pobranie id czujnika temperatura z płytki rozszerzenia 
press_temp->read_id(&id); // Pobranie id czujnika ciśnienia z płytki rozszerzenia 
press_temp->get_pressure(&cisnienie); //  Odczyt wartości ciśnienia z płytki rozszerzenia 
printf(" Cisnie atmosmeryczne:  %7s hPa\r\n ",print_double(buffer1, cisnienie));  //  Wyświetlenie wartości ciśnienia 
press_temp->get_temperature(&temperatura); // Odczytanie wartości temperatury z płytki rozszerzenia 
printf("Temp:  %7s C\r\n ", print_double(buffer2,temperatura)); //  Wyświetlenie wartości temperatury  
wzorzecP=230000;  //Ciśnieni wzorcowe w kole 
wzorzecT=293; // Temeratura wzorcowa w Kelwinach
Idealne_cisnienie=(((wzorzecP)*(temperatura+ 273))/(wzorzecT)); // coś liczymy  wartość cisnienia pożądana w kole 
bary=Idealne_cisnienie/100000; // przeliczenie na bary z paskali
ile=(bary-odczyt_analog); // ile należy upuscić z koła 
printf("Ile ma byc w kole?  %7s B\r\n ", print_double(buffer3,bary)); // Wartość ciśnienia jaka powinna znajdować się  kole 


printf("Ile jest w kole?  %7s B\r\n ", print_double(buffer1,odczyt_analog)); // Wartość ciśnienia jak znaduje się w kole   
  
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)
{    
    
printf("Upusc %7s B\r\n ", print_double(buffer5,ile ));   
}
else if (odczyt_analog>=(bary+0,2) && odczyt_analog<=(bary-0,2)) // Jeżeli ciśnienie  znaduje się w przedziale  <2.5;2.7>
{
    printf("Nic nie trzeba robić %7s B\r\n ", print_double(buffer5,ile )); 
    
    }
else if (odczyt_analog < (bary-0,2) ) //Jeżeli ciśnienie mniejsze niż bary-0,2) 
{
printf("dobij %7s B\r\n", print_double(buffer5,ile));
}
}