更新 'README.md'
This commit is contained in:
parent
5ba162ce6f
commit
49d59f3619
123
README.md
123
README.md
@ -1,3 +1,126 @@
|
||||
# OpenVario-XCSOAR-Arduino
|
||||
|
||||
https://www.volavoile.net/index.php?showtopic=12188
|
||||
|
||||
|
||||
新兴航
|
||||
|
||||
```
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_BMP085.h>
|
||||
/* deuxième sketch pour IAS pour LK8000 dans une forme plus rigoureuse*/
|
||||
//int ptot=1013; //à supprimer quand BMP085 dispo;
|
||||
Adafruit_BMP085 bmp;
|
||||
void setup(){
|
||||
Serial.begin (57600);
|
||||
bmp.begin();
|
||||
}
|
||||
|
||||
void loop(){
|
||||
Serial.println("loop");
|
||||
|
||||
while (Serial.peek()!='$'){
|
||||
if (Serial.available()<1){
|
||||
continue;
|
||||
}
|
||||
Serial.print(char(Serial.read())); //penser à enlever le LN!
|
||||
}
|
||||
char nmea[83]={'$'};
|
||||
get_nmea(nmea); //entre toute la trame dans la chaine nmea
|
||||
if (get_entete(nmea)==true){ //si l'entete est celle qui donne la p_stat
|
||||
Serial.println("if_loop true");
|
||||
Serial.print("ptot "); Serial.print(bmp.readPressure()/100);Serial.println("hpa");
|
||||
int ias=10*sqrt((2*((bmp.readPressure()/100) - get_pstat(nmea)))/1.225);
|
||||
//calcul de l'IAS
|
||||
Serial.print("IAS caculé est de: "); Serial.print(ias);Serial.println("dm/s");//penser à enlever le LN!
|
||||
envoie_trame_ias(ias);
|
||||
|
||||
}else {
|
||||
Serial.print("if loop false");
|
||||
// Serial.print(nmea);
|
||||
}
|
||||
}
|
||||
|
||||
void get_nmea(char nmea[]){
|
||||
// Serial.println("get_nmea");
|
||||
for (int i=0; i<83; i++){
|
||||
while (Serial.available()<1); // attente de 1 caractères dispo dans le buffer
|
||||
nmea[i]=Serial.read(); //replissage de la chaine nmea avec les caratcères dispo
|
||||
if (nmea[i]==10){ //si le caractère est <LF> on arrête de remplir
|
||||
// Serial.print("caractere LF trouvé");
|
||||
break; // et on quitte la boucle
|
||||
}
|
||||
}
|
||||
Serial.println(nmea); // on renvoie la trame sur la sortie serie //penser à enlever le LN!
|
||||
return;
|
||||
|
||||
}
|
||||
boolean get_entete(char nmea[]){
|
||||
// Serial.print(nmea);
|
||||
char entete_alti[8]="$PGRMZ,";
|
||||
for (int i=0;i<6;i++){
|
||||
if(entete_alti[i]!=nmea[i]){
|
||||
// Serial.print("condition fausse");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int get_pstat(char nmea[]){
|
||||
char char_pstat[7]={'\0'};
|
||||
int pstat;
|
||||
for (int i=7 ; nmea!=',' ; i++){
|
||||
char_pstat[i-7]=nmea;
|
||||
}
|
||||
// Serial.print(char_pstat);Serial.println("pieds");
|
||||
pstat= atoi(char_pstat);
|
||||
// Serial.print(pstat);Serial.println("pieds");
|
||||
pstat=1013.25 * pow((288-(0.0065*pstat*0.3028))/288,5.255); //formule de conversion pieds en hpa
|
||||
// Serial.print("pstat "); Serial.print(pstat); Serial.println("hPa");
|
||||
return pstat;
|
||||
}
|
||||
|
||||
void envoie_trame_ias(int ias){
|
||||
// Serial.println("envoie trame ias");
|
||||
char char_ias[4]={'\0'};
|
||||
char char_nmea_ias[15]="$PLKAS,";
|
||||
int n;
|
||||
itoa (ias,char_ias,10);
|
||||
// Serial.print("char_ias: "); Serial.println(char_ias);
|
||||
|
||||
for (int i=7; char_ias[i-7]!='\0';i++){
|
||||
char_nmea_ias=char_ias[i-7];
|
||||
n=i;
|
||||
// Serial.print("i= "); Serial.println(i);
|
||||
}
|
||||
char_nmea_ias[n+1]=',';
|
||||
/* char XOR=0;
|
||||
for (int i=0; char_nmea_ias!='\0';i++){
|
||||
XOR^=char_nmea_ias;
|
||||
}*/
|
||||
char_nmea_ias[n+2]=get_XOR(char_nmea_ias);
|
||||
char_nmea_ias[n+3]=13;
|
||||
char_nmea_ias[n+4]=10;
|
||||
Serial.print (char_nmea_ias);
|
||||
return;
|
||||
}
|
||||
|
||||
char get_XOR(char trame[]){
|
||||
// Serial.println("get_XOR");
|
||||
char XOR='\0';
|
||||
for (int i=0; trame!='\0';i++){
|
||||
XOR^=trame;
|
||||
}
|
||||
return XOR;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
为了准确测量空气速度,需要一个动态压力范围为 0-50mb (AMS5915) 的单向差动传感器。
|
||||
|
||||
对于分辨率为10cm的高度计,我们需要一个24位转换压力传感器(MS5611-01)和卡尔曼滤波降噪。
|
||||
|
||||
我怀疑你用 BMP085 操作的结果,被 BMP180 取代,但仍然不够精确,对于 pitot 和 alti-vario ...
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user