parsing temperature positiv und negative works :)
This commit is contained in:
parent
42027c8cd0
commit
73abc9fd4c
@ -11,7 +11,8 @@ public:
|
|||||||
explicit LogWriter(QObject *parent = 0);
|
explicit LogWriter(QObject *parent = 0);
|
||||||
enum MessageType{
|
enum MessageType{
|
||||||
INFO = 0x1,
|
INFO = 0x1,
|
||||||
ERROR = 0x2
|
ERROR = 0x2,
|
||||||
|
TEMP = 0X4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,13 @@ HiveCore::HiveCore(QObject *parent) :
|
|||||||
|
|
||||||
m_sender = new RadioSender(this);
|
m_sender = new RadioSender(this);
|
||||||
|
|
||||||
|
QByteArray data("11101101");
|
||||||
|
QDataStream stream(&data, QIODevice::ReadOnly);
|
||||||
|
qint8 dataInt;
|
||||||
|
stream >> dataInt;
|
||||||
|
|
||||||
|
qDebug() << data << dataInt << data.toInt(0,2);
|
||||||
|
|
||||||
m_reciver = new RadioReciver(this);
|
m_reciver = new RadioReciver(this);
|
||||||
m_reciver->setFrequence(RadioReciver::RC433MHz);
|
m_reciver->setFrequence(RadioReciver::RC433MHz);
|
||||||
m_reciver->enableReceiver();
|
m_reciver->enableReceiver();
|
||||||
|
|||||||
@ -3,23 +3,16 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
static bool m_enable = false;
|
static bool m_enable = false;
|
||||||
static unsigned int timings[RC_MAX_CHANGES];
|
static unsigned int timings[RC_MAX_CHANGES];
|
||||||
static unsigned long m_receivedValue;
|
|
||||||
static unsigned int m_receivedBitlength;
|
|
||||||
static unsigned int m_receivedDelay;
|
|
||||||
static unsigned int m_receiveToleranceThermometer;
|
|
||||||
static unsigned int m_receiveToleranceRemote;
|
|
||||||
|
|
||||||
RadioReciver::RadioReciver(QObject *parent) :
|
RadioReciver::RadioReciver(QObject *parent) :
|
||||||
QObject(parent)
|
QObject(parent)
|
||||||
{
|
{
|
||||||
m_receivedBitlength = 0;
|
|
||||||
m_receivedDelay = 0;
|
|
||||||
m_receivedValue = 0;
|
|
||||||
m_receiveToleranceThermometer = 10;
|
|
||||||
m_receiveToleranceRemote = 60;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RadioReciver::handleInterrupt()
|
void RadioReciver::handleInterrupt()
|
||||||
@ -40,10 +33,8 @@ void RadioReciver::handleInterrupt()
|
|||||||
if (duration > 5000 && duration > timings[0] - 200 && duration < timings[0] + 200) {
|
if (duration > 5000 && duration > timings[0] - 200 && duration < timings[0] + 200) {
|
||||||
repeatCount++;
|
repeatCount++;
|
||||||
changeCount--;
|
changeCount--;
|
||||||
//qDebug() << "change count" << changeCount;
|
|
||||||
|
|
||||||
if(repeatCount == 2) {
|
if(repeatCount == 2) {
|
||||||
//qDebug() << "got a pulse with pulselength:" << duration;
|
|
||||||
detectProtocol(changeCount);
|
detectProtocol(changeCount);
|
||||||
|
|
||||||
for(int i = 0; i < RC_MAX_CHANGES; i++ ){
|
for(int i = 0; i < RC_MAX_CHANGES; i++ ){
|
||||||
@ -67,39 +58,58 @@ void RadioReciver::handleInterrupt()
|
|||||||
|
|
||||||
void RadioReciver::detectProtocol(int signalCount)
|
void RadioReciver::detectProtocol(int signalCount)
|
||||||
{
|
{
|
||||||
qDebug() << "-----------------------------------------------------------";
|
qDebug() << "===========================================================================";
|
||||||
//qDebug() << "detect protocoll";
|
if(signalCount < 49){
|
||||||
|
qDebug() << "ERROR: got a signal with just" << signalCount << "signals";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QList <int> rawData;
|
||||||
|
|
||||||
|
// go trough all 49 timings
|
||||||
|
for(int i = 0; i <= 48; i+=1 ){
|
||||||
|
rawData.append(timings[i]);
|
||||||
|
}
|
||||||
|
qDebug() << "raw data:" << rawData;
|
||||||
|
|
||||||
unsigned long delay = timings[0] / 31;
|
unsigned long delay = timings[0] / 31;
|
||||||
//qDebug() << "delay:" << delay;
|
|
||||||
|
|
||||||
// #########################################################################
|
// #########################################################################
|
||||||
// if(delay > 250 && delay < 260){
|
if(delay > 250 && delay < 260){
|
||||||
|
qDebug() << "-----------------------------------------------------------";
|
||||||
|
qDebug() << " seems to be a TERMOMETER signal";
|
||||||
|
qDebug() << "-----------------------------------------------------------";
|
||||||
|
qDebug() << "delay :" << delay;
|
||||||
|
qDebug() << "bits :" << signalCount-1;
|
||||||
|
|
||||||
// QFile file("/root/data.ods");
|
QByteArray binCode;
|
||||||
// file.open(QIODevice::WriteOnly | QIODevice::Text);
|
|
||||||
|
|
||||||
// for(int i = 0; i <= 48; i++){
|
for(int i = 1; i <= 48; i+=2 ){
|
||||||
// //file.write << timings[i] << ";\n";
|
if(timings[i] < 1000 && timings[i+1] < 3000 && timings[i+1] > 1000){
|
||||||
// }
|
binCode.append('0');
|
||||||
|
}else if(timings[i] < 1000 && timings[i+1] > 3000){
|
||||||
|
binCode.append('1');
|
||||||
|
}else{
|
||||||
|
qDebug() << "ERROR: could not read code...error in transmission";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// file.close();
|
qDebug() << "bin CODE :" << binCode;
|
||||||
// qDebug() << "-------> got TERMOMETER signal";
|
parseTemperature(binCode);
|
||||||
|
|
||||||
// QString code = 0;
|
return;
|
||||||
|
}
|
||||||
// unsigned long delayTolerance = delay * m_receiveToleranceThermometer * 0.01;
|
|
||||||
// qDebug() << "delay:" << delay << "=" << timings[0] << "/31" << " delayTolerance = " << delayTolerance << " , signals = " << changeCount;
|
|
||||||
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #########################################################################
|
// #########################################################################
|
||||||
if(delay > 310 && delay < 320){
|
if(delay > 310 && delay < 320){
|
||||||
|
|
||||||
qDebug() << "-------> got REMOTE Signal";
|
qDebug() << "-----------------------------------------------------------";
|
||||||
qDebug() << "delay:" << delay << " bits = " << signalCount-1;
|
qDebug() << " seems to be a REMOTE signal";
|
||||||
|
qDebug() << "-----------------------------------------------------------";
|
||||||
|
qDebug() << "delay :" << delay;
|
||||||
|
qDebug() << "bits :" << signalCount-1;
|
||||||
|
|
||||||
QString binCode;
|
QByteArray binCode;
|
||||||
QList <int> rawData;
|
QList <int> rawData;
|
||||||
|
|
||||||
// go trough all 48 timings
|
// go trough all 48 timings
|
||||||
@ -132,24 +142,29 @@ void RadioReciver::detectProtocol(int signalCount)
|
|||||||
}else if(div == 3 && divNext == 1){
|
}else if(div == 3 && divNext == 1){
|
||||||
binCode.append("1");
|
binCode.append("1");
|
||||||
}else{
|
}else{
|
||||||
//qDebug() << "could not read code...error in transmission";
|
qDebug() << "ERROR: could not read code...error in transmission";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//qDebug() << "raw data:" << rawData;
|
||||||
|
qDebug() << "bin CODE :" << binCode;
|
||||||
|
QStringList byteList;
|
||||||
|
for(int i = 4; i <= 24; i+=4){
|
||||||
|
byteList.append(binCode.left(4));
|
||||||
|
binCode = binCode.right(binCode.length() -4);
|
||||||
|
}
|
||||||
|
qDebug() << byteList;
|
||||||
|
|
||||||
qDebug() << "raw data:" << rawData;
|
|
||||||
qDebug() << "bin CODE:" << binCode;
|
|
||||||
qDebug() << "dec CODE:" << binCode;
|
|
||||||
qDebug() << "hex CODE:" << binCode;
|
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
// #########################################################################
|
// #########################################################################
|
||||||
qDebug() << "-------> got GENERIC Signal";
|
qDebug() << "-----------------------------------------------------------";
|
||||||
|
qDebug() << " seems to be a GENERIC signal";
|
||||||
|
qDebug() << "-----------------------------------------------------------";
|
||||||
|
qDebug() << "delay :" << delay;
|
||||||
|
qDebug() << "bits : " << signalCount-1;
|
||||||
|
|
||||||
unsigned long delayTolerance = delay * m_receiveToleranceRemote * 0.01;
|
|
||||||
qDebug() << "delay:" << delay << " bits = " << signalCount-1;
|
|
||||||
|
|
||||||
QString binCode;
|
|
||||||
QList <int> rawData;
|
QList <int> rawData;
|
||||||
|
|
||||||
QFile file("/root/rc433_log_data.ods");
|
QFile file("/root/rc433_log_data.ods");
|
||||||
@ -158,21 +173,47 @@ void RadioReciver::detectProtocol(int signalCount)
|
|||||||
|
|
||||||
for(int i = 0; i < signalCount; i+=1 ){
|
for(int i = 0; i < signalCount; i+=1 ){
|
||||||
out << timings[i] << ",";
|
out << timings[i] << ",";
|
||||||
|
rawData.append(timings[i]);
|
||||||
}
|
}
|
||||||
out << ";\n";
|
out << ";\n";
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
// go trough all 48 timings
|
|
||||||
for(int i = 0; i <= 48; i+=1 ){
|
|
||||||
rawData.append(timings[i]);
|
|
||||||
rawData.append(timings[i+1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
qDebug() << "raw data:" << rawData;
|
qDebug() << "raw data:" << rawData;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float RadioReciver::parseTemperature(QByteArray codeBin)
|
||||||
|
{
|
||||||
|
// { ID },{-+}{ temp, },{Batt},{,temp}
|
||||||
|
// "XXXX","XXXX","X XXX","XXXX","XXXX","XXXX",
|
||||||
|
|
||||||
|
QList<QByteArray> byteList;
|
||||||
|
for(int i = 4; i <= 24; i+=4){
|
||||||
|
byteList.append(codeBin.left(4));
|
||||||
|
codeBin = codeBin.right(codeBin.length() -4);
|
||||||
|
}
|
||||||
|
qDebug() << byteList;
|
||||||
|
|
||||||
|
QByteArray temperatureBin(byteList.at(2) + byteList.at(3));
|
||||||
|
QByteArray temperatureTenthBin(byteList.at(5));
|
||||||
|
|
||||||
|
// get sign of temperature -> if first bit of temperature byte is 1 -> temp is negativ
|
||||||
|
int sign = 0;
|
||||||
|
if(temperatureBin.left(1).toInt() == 1){
|
||||||
|
sign = -1;
|
||||||
|
}else{
|
||||||
|
sign = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << temperatureBin << "=" << temperatureBin.left(1) << temperatureBin.right(7) << temperatureBin.right(7).toInt(0,2) << "," << temperatureTenthBin.toInt(0,2) ;
|
||||||
|
|
||||||
|
float temperature = sign*(temperatureBin.right(7).toInt(0,2) + (float)temperatureTenthBin.toInt(0,2)/10);
|
||||||
|
|
||||||
|
qDebug() << "Temperature:" << temperature;
|
||||||
|
return temperature;
|
||||||
|
}
|
||||||
|
|
||||||
void RadioReciver::enableReceiver()
|
void RadioReciver::enableReceiver()
|
||||||
{
|
{
|
||||||
m_enable = true;
|
m_enable = true;
|
||||||
|
|||||||
@ -19,6 +19,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
static void handleInterrupt();
|
static void handleInterrupt();
|
||||||
static void detectProtocol(int signalCount);
|
static void detectProtocol(int signalCount);
|
||||||
|
static float parseTemperature(QByteArray codeBin);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user