Arduino UNO + Sparkfun CANBUS

Ciao a tutti,

ho un Arduino UNO e una scheda Sparkfun can-bus (http://www.sparkfun.com/products/10039).
Ho provato a scaricare alcune librerie ma praticamente con tutte ho lo stesso problema.
Provo ad inviare dei messaggi e mi vengono messi in coda finché non è piena (questo lo vedo mettendo delle stampe che vedo nel monitor dell'IDE di Arduino).
Qualcuno ha esperienza con can bus + arduino???

Qualsiasi suggerimento o aiuto è ben accetto!

Grazie a tutti :slight_smile:

Ciao,
potresti almeno postare lo sketch che usi, le librerie implementate, dirci che Arduino usi, quale ide, ecc ecc.

Saremo felici ti aiutarti, ma devi specificare meglio il problema e darci la possibilità di farlo.
http://arduino.cc/forum/index.php/topic,91560.0.html

Ma tu la usi come in questo video ??

con lcd seriale o leggi la seriale su monitor

Ciao a tutti,

scusate se non ho dato molte informazioni.
Io uso l’IDE Arduino 1.0.
Come libreria utilizzo questa http://code.google.com/p/skpang/downloads/detail?name=Canbus_v4.zip&can=2&q=
Uso la libreria solo per gestire il Can bus.
Al momento mi piacerebbe semplicemente invire un qualsiasi messaggio mediante Can Bus (preferibilimente Can Bus 2.0B).
Comunque per debug utilizzo la seriale su monitor (non lcd seriale).

Questo è il codice:

#include <Canbus.h>
#include "mcp2515.h"

#define CANSPEED_125 	7		// CAN speed at 125 kbps
#define CANSPEED_250  	3		// CAN speed at 250 kbps
#define CANSPEED_500	1		// CAN speed at 500 kbps

int CANCS = 53;

int D10 = 10;

int LED2 = 8;
int LED3 = 7;

void setup() {
  Serial.begin(9600);
  Serial.println("CAN BUS test start");

  if(mcp2515_init(CANSPEED_250))
  {
    Serial.println("CAN init OK");
  } 
  else
  {
    Serial.println("CAN init KO");
  }

  pinMode(LED3, OUTPUT); 
  pinMode(CANCS,OUTPUT);

  delay(4000); 
}

void loop() 
{
  digitalWrite(CANCS,LOW);

  if (mcp2515_check_free_buffer())
    Serial.println("Free buffer");     
  else
    Serial.println("Full buffer");

  tCAN message;	
  message.id = 254;
  message.header.rtr = 0;
  message.header.extended = 1;
  message.header.length = 8;
  message.data[0] = 0x02;
  message.data[1] = 0x01;
  message.data[2] = 0x05;
  message.data[3] = 0x00;
  message.data[4] = 0x00;
  message.data[5] = 0x00;
  message.data[6] = 0x00;
  message.data[7] = 0x00;						

  mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0);

  if (mcp2515_send_message(&message))
    Serial.println("Send ok");     
  else
    Serial.println("Send ko");

  delay(10);  

  if (mcp2515_check_message())
  {
    Serial.println("Message waiting");     
    if (mcp2515_get_message(&message))
      Serial.println("Read OK");
    else
      Serial.println("Read KO"); 
  }     
  else
    Serial.println("No message waiting");

  digitalWrite(LED3, HIGH); 
  delay(500); 
  digitalWrite(LED3, LOW);
  delay(500);

  delay(4000); 

  Serial.println("");


  digitalWrite(CANCS,HIGH);
}

Qualcuno ha mai usato la libreria Google Code Archive - Long-term storage for Google Code Project Hosting. ????
Altrimenti qualcuno può consigliarmi un'altra libreria da usare? Magari con qualche esempio di codice?..

Grazie a tutti...

Domanda banale, ma a chi li invii i messaggi?

Ciao niki77,

cerco di spiegare meglio il mio problema: io ho un arduino uno e tramite la sparkfun canbus vorrei connettermi ad un bus NMEA2000.
Ho un cavo che mi permette di connettere il can bus all'nmea2000.
Ora sul bus nmea non ho nessun apparato connesso ma ho solo un apparato che mi permette di vedere tutto cio' che passa sul bus su pc.
Quindi io ho provato a spedire un pacchetto sul bus ma non ci riesco infatti la coda di msg su arduino si riempie e sul pc connesso all'nmea non vedo nulla.
Dato che non sono esperto di canbus puoi aiutarmi?
Come faccio a sapere l'id di un apparato canbus?
Esiste il modo di spedire un msg canbus in broadcast?
Che differenza c'e' da canbus 2.0a a 2.0b?

Ciao e grazie!

androrossi:
Come faccio a sapere l'id di un apparato canbus?

non ti interessa saperlo perchè trasmetti sempre in broadcast. Ma se proprio vuoi sapere l'id di un nodo, lo puoi implementare come comando da inviare tramote messaggio. Il nodo che riceve questo tipo di messaggio, invia il proprio id.

androrossi:
Esiste il modo di spedire un msg canbus in broadcast?

tutti i mesaggi vengono inviati in broadcast. Al singolo nodo è demandato il compito di filtrare/elaborare i msg che gli ineteressano

androrossi:
Che differenza c'e' da canbus 2.0a a 2.0b?

Il formato CAN 2.0B prevede un id di 29 bit contro l'id di 11 bit del 2.0A.

Grazie mille delle risposte daddeTr!

Qualcuno conosce il bus NMEA2000?
Secondo voi è possibile inviare dati sul bus NMEA2000 mediante una libreria CANBUS?

Grazie a tutti....