float temp = 15.9;
byte unita;
byte decina;
byte volt;
byte indirizzo=8;
String hexstring = "FF3Fa0";
String binary(byte var)
{
String ritorno="";
for (int i = 7; i >= 0; i--) {
ritorno+=(((var >> i) & 1) == 1 ? "1" : "0");
}
return ritorno;
}
void setup() {
// put your setup code here, to run once:
unita = temp; // gets the first part as going from (casting)
//float to int drops the bit after the decimal point
Serial.begin(9600);
String str10="";
str10=char(243);//byte start
str10+="08d104041418102d2123841d0c06040000*4977be72";
String crc4=str10.substring(str10.indexOf("*")+1);
crc4.trim();
String str11=str10.substring(1,str10.indexOf("*"));
str10=str10.substring(1);
String crc1="4977be72";
Serial.println(crc4);
Serial.println(str11);
if(crc4==crc1)
{
byte ricez[25];
ricez[0 ]=(int)strtol(str10.substring(0 ,2 ).c_str(),NULL,16);//indirizzo
ricez[1 ]=(int)strtol(str10.substring(2 ,4 ).c_str(),NULL,16);//byte start
ricez[2 ]=(int)strtol(str10.substring(4 ,6 ).c_str(),NULL,16);//giorno
ricez[3 ]=(int)strtol(str10.substring(6 ,8 ).c_str(),NULL,16);//mese
ricez[4 ]=(int)strtol(str10.substring(8 ,10).c_str(),NULL,16);//anno
ricez[5 ]=(int)strtol(str10.substring(10,12).c_str(),NULL,16);//anno
ricez[6 ]=(int)strtol(str10.substring(12,14).c_str(),NULL,16);//ora
ricez[7 ]=(int)strtol(str10.substring(14,16).c_str(),NULL,16);//minuti
ricez[8 ]=(int)strtol(str10.substring(16,18).c_str(),NULL,16);//secondi
ricez[9 ]=(int)strtol(str10.substring(18,20).c_str(),NULL,16);//3_3v
ricez[10]=(int)strtol(str10.substring(20,22).c_str(),NULL,16);//5_v
ricez[11]=(int)strtol(str10.substring(22,24).c_str(),NULL,16);//13_v
ricez[12]=(int)strtol(str10.substring(24,26).c_str(),NULL,16);//esp_fs1
ricez[13]=(int)strtol(str10.substring(26,28).c_str(),NULL,16);//esp_fs2
ricez[14]=(int)strtol(str10.substring(28,30).c_str(),NULL,16);//esp_fs3
ricez[15]=(int)strtol(str10.substring(30,32).c_str(),NULL,16);//esp_fs4
ricez[16]=(int)strtol(str10.substring(32,34).c_str(),NULL,16);//esp_fs5
ricez[17]=(int)strtol(str10.substring(34,36).c_str(),NULL,16);//stato led allarme
ricez[18]=(int)strtol(str10.substring(36,38).c_str(),NULL,16);//stato led inserimento
ricez[19]=(int)strtol(str10.substring(38,40).c_str(),NULL,16);//ricezione ok pulsanti
if(ricez[0 ]==indirizzo)
{
String tempo="",tensioni="";
if(ricez[2]<10){tempo+="0"+String(ricez[2])+"/";} else {tempo+=String(ricez[2])+"/";}//giorno//giorno
if(ricez[3]<10){tempo+="0"+String(ricez[3])+"/";} else {tempo+=String(ricez[3])+"/";}//mese
if(ricez[4]<10){tempo+="0"+String(ricez[4]);} else {tempo+=String(ricez[4]);}//anno
if(ricez[5]<10){tempo+="0"+String(ricez[5])+" ";} else {tempo+=String(ricez[5])+" ";}//anno
if(ricez[6]<10){tempo+="0"+String(ricez[6])+":";} else {tempo+=String(ricez[6])+":";}//ore
if(ricez[7]<10){tempo+="0"+String(ricez[7])+":";} else {tempo+=String(ricez[7])+":";}//minuti
if(ricez[8]<10){tempo+="0"+String(ricez[8]);} else {tempo+=String(ricez[8]);}//secondi
Serial.println(tempo);
byte unita_out=ricez[9] & 0b00001111;//3.3v
byte decina_out=ricez[9] & 0b11110000;
decina_out=decina_out >>4;
String pppp=String(unita_out)+"."+String(decina_out);
Serial.println(pppp);
unita_out=ricez[10] & 0b00001111;//5v
decina_out=ricez[10] & 0b11110000;
decina_out=decina_out >>4;
pppp=String(unita_out)+"."+String(decina_out);
Serial.println(pppp);
unita_out=ricez[11] & 0b00001111;//13.5v
decina_out=ricez[11] & 0b11110000;
decina_out=decina_out >>4;
pppp=String(unita_out)+"."+String(decina_out);
Serial.println(pppp);
pppp="";
if(bitRead(ricez[12],0)==1)pppp +="1_1:";
if(bitRead(ricez[13],0)==1)pppp +="1_2:";
if(bitRead(ricez[14],0)==1)pppp +="1_3:";
if(bitRead(ricez[15],0)==1)pppp +="1_4:";
if(bitRead(ricez[16],0)==1)pppp +="1_5:";
if(bitRead(ricez[12],1)==1)pppp +="2_1:";
if(bitRead(ricez[13],1)==1)pppp +="2_2:";
if(bitRead(ricez[14],1)==1)pppp +="2_3:";
if(bitRead(ricez[15],1)==1)pppp +="2_4:";
if(bitRead(ricez[16],1)==1)pppp +="2_5:";
if(bitRead(ricez[12],2)==1)pppp +="3_1:";
if(bitRead(ricez[13],2)==1)pppp +="3_2:";
if(bitRead(ricez[14],2)==1)pppp +="3_3:";
if(bitRead(ricez[15],2)==1)pppp +="3_4:";
if(bitRead(ricez[16],2)==1)pppp +="3_5:";
if(bitRead(ricez[12],3)==1)pppp +="4_1:";
if(bitRead(ricez[13],3)==1)pppp +="4_2:";
if(bitRead(ricez[14],3)==1)pppp +="4_3:";
if(bitRead(ricez[15],3)==1)pppp +="4_4:";
if(bitRead(ricez[16],3)==1)pppp +="4_5:";
if(bitRead(ricez[12],4)==1)pppp +="5_1:";
if(bitRead(ricez[13],4)==1)pppp +="5_2:";
if(bitRead(ricez[14],4)==1)pppp +="5_3:";
if(bitRead(ricez[15],4)==1)pppp +="5_4:";
if(bitRead(ricez[16],4)==1)pppp +="5_5:";
if(bitRead(ricez[12],5)==1)pppp +="6_1:";
if(bitRead(ricez[13],5)==1)pppp +="6_2:";
if(bitRead(ricez[14],5)==1)pppp +="6_3:";
if(bitRead(ricez[15],5)==1)pppp +="6_4:";
if(bitRead(ricez[16],5)==1)pppp +="6_5:";
if(bitRead(ricez[12],6)==1)pppp +="7_1:";
if(bitRead(ricez[13],6)==1)pppp +="7_2:";
if(bitRead(ricez[14],6)==1)pppp +="7_3:";
if(bitRead(ricez[15],6)==1)pppp +="7_4:";
if(bitRead(ricez[16],6)==1)pppp +="7_5:";
Serial.println(pppp);
Serial.print("0 ]"); Serial.println(ricez[0 ]);
Serial.print("1 ]"); Serial.println(ricez[1 ]);
Serial.print("2 ]"); Serial.println(ricez[2 ]);
Serial.print("3 ]"); Serial.println(ricez[3 ]);
Serial.print("4 ]"); Serial.println(ricez[4 ]);
Serial.print("5 ]"); Serial.println(ricez[5 ]);
Serial.print("6 ]"); Serial.println(ricez[6 ]);
Serial.print("7 ]"); Serial.println(ricez[7 ]);
Serial.print("8 ]"); Serial.println(ricez[8 ]);
Serial.print("9 ]"); Serial.println(ricez[9 ]);
Serial.print("10]"); Serial.println(ricez[10]);
Serial.print("11]"); Serial.println(ricez[11]);
Serial.print("12]"); Serial.println(ricez[12]);
Serial.print("13]"); Serial.println(ricez[13]);
Serial.print("14]"); Serial.println(ricez[14]);
Serial.print("15]"); Serial.println(ricez[15]);
Serial.print("16]"); Serial.println(ricez[16]);
Serial.println("coglione");
}
}
Serial.println(unita);
// get the second part
decina= temp*10-unita*10;
Serial.println(decina);
Serial.println((int)unita);
volt=unita & 0b00001111;//and logic azzera gli ultimi 4 bit
Serial.println(binary((volt)));
//byte decine = w * 10; // it is rounded down
Serial.println((int)decina);
decina=decina <<4;//shift di 4 posizione verso sx
volt=volt | decina;//or logic
Serial.println(binary((decina)));
Serial.println(binary((volt)));
/*
//////////////////////////////////////////decodifica
byte unita_out=volt & 0b00001111;
byte decina_out=volt & 0b11110000;
decina_out=decina_out >>4;
String pppp=String(unita_out)+"."+String(decina_out);
Serial.println(pppp);
*/
}
void loop() {
}