Hallo allerseits,
bevor ich zu meinem Problem komme, erstmal was zum Projekt.
Mit dem CAN BUS Shield sende ich eine Anfrage an ein Messmodul welches mir Daten zurück sendet.
Diese Daten sind in einem Array[8] von denen ich aber nur Array[2]-Array[5] benötige. Das Problem nun ist aber das die Daten ein Messwert in float sind und im Array gesplittet werden. Also aus 187197169101 wird dann {101,169,197,187}. Muss also die Daten zusammensetzen und dann in float umwandeln. In meinem Code soll das ganze zurzeit noch über Serial.print() ausgegeben werden, wird aber später über ein LCD Display ausgegeben.
Also konkret, wie kann ich die einzelnen Elemente des Arrays wieder zu einer Zahl zusammen setzten?
Ich hab schon einige Lösungsansätze gefunden, allerdings behandeln diese nicht unsigned char sondern nur char.
Könnt ihr mir da irgendwie weiter helfen? Sollten die Lösungen für char auch für unsigned char klappen?
Hab es z.B. mit der Methode versucht: Variablen verketten
hat aber leider nicht zum Erfolg geführt.
Stehe im Moment ziemlich auf dem Schlauch und hoffe einer da draussen kann mir weiter helfen. Vielleicht ist die Lösung ja einfacher als gedacht und ich seh den Wald vor lauter Bäumen nicht mehr.
// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way
// loovee, 2014-6-13
#include <SPI.h>
#include "mcp_can.h"
// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 10;
const int LED = 8;
boolean ledON = 1;
MCP_CAN CAN(SPI_CS_PIN); // Set CS pin
void setup()
{
Serial.begin(115200);
pinMode(LED,OUTPUT);
while (CAN_OK != CAN.begin(CAN_250KBPS)) // init can bus : baudrate = 250k
{
Serial.println("CAN BUS Shield init fail");
Serial.println("Init CAN BUS Shield again");
delay(100);
}
Serial.println("CAN BUS Shield init ok!");
}
unsigned char stmp[8] = {0x0F,0x00,0x00,0x00,0x00,0x00,0x55,0x30};
void loop()
{
unsigned char len = 0;
unsigned char buf[9];
unsigned char newbuf[5];
newbuf[0] = buf[2];
newbuf[1] = buf[3];
newbuf[2] = buf[4];
newbuf[3] = buf[5];
if(CAN_MSGAVAIL == CAN.checkReceive()) // check if data coming
{
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
unsigned char canId = CAN.getCanId();
Serial.println("-----------------------------");
Serial.println("get data from ID: ");
Serial.println(canId);
for(int i = 0; i<len; i++) // print the data
{
Serial.print(buf[i]);
Serial.print("\t");
if(ledON && i==0)
{
digitalWrite(LED, buf[i]);
ledON = 0;
delay(500);
}
else if((!(ledON)) && i==4)
{
digitalWrite(LED, buf[i]);
ledON = 1;
}
}
Serial.println();
}
CAN.sendMsgBuf(0x300,0,8,stmp);
delay(100);
}