// !AIVDM,1,1,,,B00Wst@0bgt;g@6VMA8chSG01P06,O*b
String AIVDM="!AIVDM,1,1,,,B00W=ph1@?t=FF6V9bjBAmEP1P06,O*62";
//String SuiteBinaire="010010000000000000100111011011011100010000000000001010001111011100001011001111010000000110100110011101010001001000001011010000100011010111000000000001100000000000000110";
String SuiteBinaire="010010000000000000100111001101111000110000000001010000001111111100001101010110010110000110100110001001101010110010010010010001110101010101100000000001100000000000000110";
String BinMMSI;
String BinSOG;
String BinLat;
String BinLong;
String BinCOG;
String BinHead;
long MMSI;
int SOG;
float Long;
float Lat;
float COG;
float Head;
String Hemisphere;
String LongEW;
void setup() {
Serial.begin(9600);
/*
Serial.println(SuiteBinaire);
Serial.println(Ref);
Serial.println(SuiteBinaire.length());
Serial.println(Ref.length());
*/
// put your setup code here, to run once:
MMSI=0;
BinMMSI=SuiteBinaire.substring(8,38);
//Serial.println("------------MMSI------------------------");
//Serial.println(BinMMSI);
//Serial.println("000000000010011111101111110001");
//Serial.println("------------------------------------");
BinSOG=SuiteBinaire.substring(46,56);
//Serial.println("-----------SOG-------------------------");
//Serial.println(BinSOG);
//Serial.println("0011100110");
//Serial.println("------------------------------------");
BinLong=SuiteBinaire.substring(57,85);
//Serial.println("---------Longitude---------------------------");
//Serial.println(BinLong);
//Serial.println("1111111000010110000000101000");
//Serial.println("------------------------------------");
BinLat=SuiteBinaire.substring(86,112);
//Serial.println("---------Lattitude---------------------------");
//Serial.println(BinLat);
//Serial.println("001101001100110111100100010");
//Serial.println("------------------------------------");
//BinLat="111100111010101100110110100";
//Serial.println("111100111010101100110110100");
//Serial.println(BinLat);
// Serial.println(BinSOG);
//ComplA2();
Serial.println(SuiteBinaire.substring(113,123));
BinCOG=SuiteBinaire.substring(113,125);
Serial.println(SuiteBinaire.substring(124,133));
BinHead=SuiteBinaire.substring(124,133);
}
void loop() {
//toto();
// 227545970 le MMSI du Gwen Ru
MMSI=BinDec(BinMMSI);
//MMSI=toto();
Serial.print(" - MMSI: ");
Serial.println(MMSI);
SOG=BinDec(BinSOG)/10;
Serial.print(" - SOG : ");
Serial.println(SOG);
if(BinLong.charAt(0)=='1'){
BinLong=CompA2(BinLong);
LongEW="W";
}
else{
LongEW="E";
}
Long=BinDec(BinLong);
Long=Long/600000;
Serial.print(" - LONG : ");
Serial.print(Long);
Serial.println(LongEW);
if(BinLat.charAt(0)=='1'){
BinLat=CompA2(BinLat);
Hemisphere="S";
}
else{
Hemisphere="N";
}
Lat=BinDec(BinLat);
Lat=Lat/600000;
Serial.print(" - Lat : ");
Serial.print(Lat);
Serial.println(Hemisphere);
COG=BinDec(BinCOG);
COG=COG-360;
Serial.print(" - COG : ");
Serial.println(COG);
Head=BinDec(BinHead);
Head=Head;
Serial.print(" - Head: ");
Serial.println(Head);
delay(2000);
}
String CompA2(String MotInit){
if(MotInit.charAt(0)=='1'){
MotInit.replace("1","A");
MotInit.replace("0","1");
MotInit.replace("A","0");
}
//Serial.println(MotInit);
if(MotInit.charAt(MotInit.length()-1)=='0'){
MotInit.setCharAt(MotInit.length()-1, '1');
}
else{
int Rang=MotInit.length()-1;
while(MotInit.charAt(Rang)=='1'){
MotInit.setCharAt(Rang, '0');
Rang--;
}
MotInit.setCharAt(Rang, '1');
}
//Serial.println(MotInit);
return MotInit;
}
long BinDec(String MotBinaire){
String Bit;
long puissI=1; // Exposant de la puissance 2
long TempValue=0; // Valeur temporaire du mot convertit
int LengthMotBinaire=MotBinaire.length()-1;
long value;
for(int i=LengthMotBinaire; i>=0; i--){
Bit=MotBinaire.substring(i,i+1);
//Serial.print(Bit);
//Serial.print(pow(2,expo));
value=Bit.toInt()*puissI;
//Serial.println(value);
TempValue=TempValue+value;
// Serial.println((TempValue));
puissI=puissI*2;
//Serial.println(TempValue);
}
return TempValue;
}