Hallo zusammen,
ich habe von einem Bekannten zwei dieser Shields der Version 1.2
bekommen: http://www.seeedstudio.com/wiki/CAN-BUS_Shield
Die Test-Codes die in der Libary dabei sind funktionieren, die Daten
werden gesendet und empfangen.
Mit CAN habe ich mich sonst noch nicht beschäftigt, würde jetzt aber
gerne versuchen einen DHT22 auszulesen, den Code siehe unten, und diesen
Code will ich in den Code für den Arduino der im CAN-Bus sendet einbauen
sodass die Sensordaten an den anderen gesendet werden.
Die Beispiel-Codes befinden sich hier:
https://github.com/Seeed-Studio/CAN_BUS_Shield/tree/master/examples
In meinem Fall "receive_Blink" und "send_Blink"
Der Arduino DHT22 Code:
1
#include "DHT.h"
2
3
#define DHTPIN 9
4
#define DHTTYPE DHT22 //DHT11, DHT21, DHT22
5
6
DHT dht(DHTPIN, DHTTYPE);
7
8
void setup()
9
{
10
Serial.begin(9600);
11
Serial.println("DHT22 - Test!");
12
13
dht.begin();
14
}
15
16
void loop()
17
{
18
float h = dht.readHumidity(); //Luftfeuchte auslesen
19
float t = dht.readTemperature(); //Temperatur auslesen
20
21
// Prüfen ob eine gültige Zahl zurückgegeben wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben.
22
if (isnan(t) || isnan(h))
23
{
24
Serial.println("DHT22 konnte nicht ausgelesen werden");
25
}
26
else
27
{
28
Serial.print("Luftfeuchte: ");
29
Serial.print(h);
30
Serial.print(" %\t");
31
Serial.print("Temperatur: ");
32
Serial.print(t);
33
Serial.println(" C");
34
}
35
}
Leider habe ich es nicht hinbekommen die Sensordaten per CAN zu senden.
Würde mich über Hilfe sehr freuen um das ganze besser zu verstehen. Code
an sich den ich schon präsentieren könnte habe ich noch nicht. Ich habe
bis jetzt nur die Libary DHT importiert, alles deklariert aber wie ich
es senden soll ist eben unklar.
Gruß Florian
Ich weiß nicht genau wie ich die Sensordaten an den Bus senden soll. Ich
habe zwar schon ein bisschen im Internet geschaut, aber nichts gefunden
das mir geholfen hat.
Die Test char hatte ich noch drin gelassen aus dem Beispiel.
Beim Receive Sketch bin ich auch noch nicht weiter. Dieses ist noch wie
in dem Beispiel, da ich erstmal an das Send Sketch eben wollte.
Receive Sketch:
1
// demo: CAN-BUS Shield, receive data with check mode
2
// send data coming to fast, such as less than 10ms, you can use this way
3
// loovee, 2014-6-13
4
5
6
#include <SPI.h>
7
#include "mcp_can.h"
8
9
10
// the cs pin of the version after v1.1 is default to D9
11
// v0.9b and v1.0 is default D10
12
const int SPI_CS_PIN = 9;
13
const int LED=8;
14
boolean ledON=1;
15
MCP_CAN CAN(SPI_CS_PIN); // Set CS pin
16
17
void setup()
18
{
19
Serial.begin(115200);
20
pinMode(LED,OUTPUT);
21
22
while (CAN_OK != CAN.begin(CAN_500KBPS)) // init can bus : baudrate = 500k
23
{
24
Serial.println("CAN BUS Shield init fail");
25
Serial.println(" Init CAN BUS Shield again");
26
delay(100);
27
}
28
Serial.println("CAN BUS Shield init ok!");
29
}
30
31
32
void loop()
33
{
34
unsigned char len = 0;
35
unsigned char buf[8];
36
37
if(CAN_MSGAVAIL == CAN.checkReceive()) // check if data coming
38
{
39
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
Florian D. schrieb:> ... aber wie ich es senden soll ist eben unklar.
Dann guck dir von den Beispielen zu CAN-Bus Library mal die Beispiele
mit "Send" im Namen an. Was meinst du, was die tun, z.b. /send.ino/. Die
Daten liegen dort in stmp[] und werden an die Senderoutine übergeben.
Wegen des Char kommt am anderen Shield nur 22, 53, 0, ... raus, aber des
ist klar. Nur wenn ich jetzt statt dem chat nen float nehme, so wie ich
es immer bei den DHTs gemacht hatte kommt ne Fehlermeldung:
1
exit status 1
2
'signed' or 'unsigned' invalid for 'stmp'
Das andere Problem ist die Länge des Arrays, was in dem Beispiel ja 8
wäre, jetzt habe ich das direkt davor in der Klammer geändert, und
hinten auch nur noch die zwei "simulierten" Sensorwerte drin, aber am
Receive-Code bekomm ich die ersten raus und dann welche mit
irgendwelchen Zahlen.
Woran liegt das?
Würde mich über eure Hilfe freuen
Florian