Я кодирую приложение Android. У меня есть регистратор данных температуры SL13A, и я пытаюсь читать температуру у регистратора, но я действительно не знаю, как это сделать.Команды регистратора температуры NFC
Вот техническое описание: http://www.mouser.com/ds/2/588/AMS_SL13A_Datasheet_EN_v4-371531.pdf
Я использую команду Get Temperature (код команды 0xAD).
Мой код так:
NfcV nfcvTag = NfcV.get(tag);
try {
nfcvTag.connect();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Could not open connection!", Toast.LENGTH_SHORT).show();
return;
}
try {
byte[] comReadTemp = new byte[]{
(byte) 0x00, // Flags
(byte) 0xAD, // Command: Get Temperature
(byte) 0xE0,(byte) 0x36,(byte) 0x04,(byte) 0xCA,(byte) 0x01,(byte) 0x3E,(byte) 0x12,(byte) 0x01, // UID - is this OK?
};
byte[] userdata = nfcvTag.transceive(comReadTemp);
tvText.setText("DATA: " + userdata.length);
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "An error occurred while reading!", Toast.LENGTH_SHORT).show();
return;
}
Я не уверен, что флаги, чтобы установить, и если я ставлю UID параметр в команде правильно.
А также мой вопрос: как мне получить температурные биты из командной реакции? В техническом описании показано, что первые 8 бит командного ответа являются флагами, следующие 16 бит - это температура, а последние 16 бит - это CRC. Но кажется, что я получаю только 3 байта в ответе (userdata.length
равно 3).
Любая помощь будет оценена по достоинству.
Благодарим вас за ответ. Я попробовал ваше решение, но температура (tempValue) неверна. Я получаю разные результаты каждый раз (например: -97.7620, -11.234, 32.02999 и некоторые другие). Я также не совсем понимаю, почему вы используете 0x003 в ((0x003 и userdata [1]) << 8). И да, я считаю, что код калибровки равен 32. – user1926550
Я думаю, что правильный путь: int tempCode = ((0x003 & userdata [2]) << 8) | ((0x0FF & userdata [1]) << 0); – user1926550
@ user1926550 Вы правы. userdata [2] должен быть MSB и userdata [1] LSB. –