Я работаю с датчиком Lorawan, чтобы вычислить градусы компаса. К сожалению, я пока не могу этого сделать, несмотря на то, что прочитал множество ссылок и сообщений на Stackoverflow и других сайтах.
Я запускаю код, который пробую в The Things Network, в java.
Моей первой попыткой был этот код, но мне все еще нужно использовать значения акселерометра в моих расчетах. По крайней мере, полученное значение сильно отличается от моего значения компаса на моем iPhone.
(Расчет / 10 и * 0.92 связан с документацией моих поставщиков, единственная документация, которая у них есть, - это )
Надеюсь, кто-то сможет сделать меня еще на шаг в правильном направлении.
function Decoder(bytes, port)
{
// Decode an uplink message from a buffer
var accel_x = (bytes[16] << 8) * 2/32768 ;
var accel_y = (bytes[17] << 8) * 2/32768 ;
var accel_z = (bytes[18] << 8) * 2/32768 ;
// (array) of bytes to an object of fields.
var compass_x = bytes[19] << 24 >> 16 | bytes[20];
var compass_y = bytes[21] << 24 >> 16 | bytes[20];
var compass_z = bytes[23] << 24 >> 16 | bytes[20];
var x = (compass_x / 10) * 0.92;
var y = (compass_y / 10) * 0.92;
var z = (compass_z / 10) * 0.92;
if (Math.atan2(y, x) >= 0) {
angle = Math.atan2(y, x) * (180 / Math.PI)
} else {
angle = (Math.atan2(y, x) + 2 * Math.PI) * (180 / Math.PI)
}
var angle2 = Math.round(angle)
return {
angle2:angle2
x:x
y:y
z:z
compass_x: compass_x
compass_y:compass_y
compass_z:compass_z
accel_x:accel_x
accel_y:accel_y
accel_z:accel_z
angle:angle
};
}
Например: код java дает угол 107 градусов, а мой iPhone 38 .
Пример вывода:
{
"accel_x": 3.875,
"accel_y": 0.015625,
"accel_z": 0.96875,
"angle": 106.72594406120638,
"angle2": 107,
"compass_x": -769,
"compass_y": 2559,
"compass_z": -1025,
"x": -70.748,
"y": 235.42800000000003,
"z": -94.3
}