Arduino GSM und CAN-Bus Shield

Hallo Zusammen,

ich habe ein Problem und hoffe auf eure Hilfe.

Und zwar betreibe ich ein Arduino Uno, darüber ein GSM/GPRS Shield mit integrierter Antenne und ein Seeed Studio CAN-BUS Shield.

Zunächst habe ich eine einfache Variable (VAR) über das GSM Shield zu einer cload verschickt und mir dort online anzeigen lassen. Das hat auch alles funktioniert.
Als ich dann das CAN-BUS Shield zusätzlich in Betrieb genommen habe, hat die übertragung nicht mehr funktionert.

Ich bin inzwischen soweit und ich weiß, dass es an der Funktion CAN.begin() liegt. Sobal die nicht drin ist, funktioniert alles super. Wenn Sie drin ist, kommt im Seriellen Monitor die Antwort vom Server:

400 Bad Request

400 Bad Request


nginx

Daher meine Frage: Hat jemand eine Idee was das Problem sein könnte?

Dazu noch mein Quellcode:

//------------------------------------Bibliotheken--------------------------------------------------------------------------------------------------------------
#include <SPI.h>
#include <GSM.h>
#include <mcp_can.h>
//------------------------------------Definitionen für SIM-Karte------------------------------------------------------------------------------------------------
#define PINNUMBER “XXXX”
#define GPRS_APN “XXXX”
#define GPRS_LOGIN “XXXX”
#define GPRS_PASSWORD “XXXX”
//------------------------------------Variablen für CAN-Bus-----------------------------------------------------------------------------------------------------
long unsigned int rxId; // Identifier (Massage ID)
unsigned char len = 0; // Daten Länge (Data length)
unsigned char rxBuf[8]; // Daten max 8 bytes (Buffer oder Data bytes)
//------------------------------------Variablen für SIM-Karte---------------------------------------------------------------------------------------------------
GSMClient client;
GPRS gprs;
GSM gsmAccess;
bool erstemal = true;
uint16_t reset = 0;
int VAR = 30;
//------------------------------------Variablen für Datencloud--------------------------------------------------------------------------------------------------

String idvariable = “XXX”; // replace with your Ubidots Variable ID
String token = “XXX”; // replace with your Ubidots token

void setup() {
Serial.begin(9600); // Initialiesiere Serial port (Baudrate:9600)
CAN.begin(CAN_500KBPS);
Serial.println(“Starting Arduino web client.”);
pinMode(9, OUTPUT); // Da beide Shields gleichen SPI PIN nutzen, muss vor Can.begin der Pin gesetzt werden
digitalWrite(9, HIGH);
pinMode(2, INPUT);
startGSM();
}
void loop() {
if(save_value(VAR))
{
Serial.println(VAR);
VAR++;
}
else
{
reset++;
if (reset == 5)
{
asm volatile (" jmp 0"); // reset the Arduino board if the data transmission fail
}
}
}

void startGSM() {
boolean notConnected = true;
Serial.println(“try to connect to GSM…”);
while(notConnected) {
if ((gsmAccess.begin(PINNUMBER) == GSM_READY) & (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY))
notConnected = false;
else {
Serial.println(“Not connected”);
delay(1000);
}
}
Serial.println(“Connected”);
}

boolean save_value(int value){
Serial.println(“connecting to Cloud…”);
int num=0;
String var = “{“value”:”+ String(value) + “}”;
num = var.length();
// if you get a connection, report back via serial:
if (client.connect(“things.ubidots.com”, 80))
{
Serial.println(“connected”);
// Make a HTTP request:
client.print(“POST /api/v1.6/variables/”+idvariable+"/values HTTP/1.1\nContent-Type: application/json\nContent-Length: “+String(num)+”\nX-Auth-Token: “+token+”\nHost: things.ubidots.com\n\n");
client.println(var);
client.println();
}
else
{
// if you didn’t get a connection to the server:
Serial.println(“connection failed”);
}
while (client.available())
{

char c = client.read();
Serial.print(c);
}
}

Vielen Dank euch schon jetzt!!!
Gruß
Max

pinMode(9, OUTPUT);         // Da beide Shields gleichen SPI PIN nutzen, muss vor   Can.begin der Pin gesetzt werden

Ist der Kommentar von dir?

Wenn es sich um folgendes Shield handelt ist es standartmäßig der 10er PIN. Den kannst du auch ändern....

How to Change SS Pin

The SPI SS pin is default D10, you can change it to D9 easily.

Firstly, cut off the copper wire between CS and digital 10 via a knife, then do some soldering just like the following image

http://www.seeedstudio.com/wiki/CAN-BUS_Shield

Gruß

Ja der ist von mir. Habe vorher ein WIFI Shield genutzt. Da nutzen beiden den SPI-Bus und so musste ich den SS-Pin vom CAN-Bus Shield verändern.

Habe jetzt auf Seiten des CAN-Shield alles wieder auf Werkseinstellung verändert. Das Problem bleibt aber.
Jemand eine Idee was das Problem sein könnte?

welches GSM benutzt du?