Bon,
Après quelque recherche sur le bus SPI, il semblerait que le ChipSelect puisse se faire sur n'importe quelle sortie digital (ce qui me paraît franchement bizarre, car dans les datasheet du CAN-Shield, nous pouvons choisir la pin du ChipSelect soit 9 soit 10.
J'ai adapté mon programme et je verrais demain si cela marche mais vraiment pas facile de trouver ses infos j'ai l'impression que peu de gens utilise des CAN-Shield (le CAN fait peut-être peur ^^)
#include <mcp_can.h> //Récupération des biblihothèques CAN_BUS
#include <SPI.h>
#include "mcp_can.h"
#define CapteurLum analogRead(4) //Récupération de la valeur de Lumière
#define EclairageInt 7
//
//const int SPI_CS_PIN = 9;
MCP_CAN SS1 (9);
MCP_CAN SS2 (10);
void setup() {
Serial.begin(250000);
while (CAN_OK != SS1.begin(CAN_250KBPS)) // Initialisation CAN_bus entrant vitesse = 250kbit/s
{
Serial.println("Lancement du CAN echoue");
Serial.println(" Redemarrage CAN bus");
break;
}
while (CAN_OK != SS2.begin(CAN_250KBPS)) // Initialisation CAN_bus sortant: vitesse = 250kbit/s
{
Serial.println("Lancement du CAN echoue");
Serial.println(" Redemarrage CAN bus");
break;
}
Serial.println("Initialisation du CAN bus OK!");
pinMode(7, OUTPUT);
}
unsigned char len = 0;
unsigned char buf[8];
unsigned char canId1 = SS1.getCanId();
unsigned char canId2 = SS2.getCanId();
void loop() {
if (CAN_MSGAVAIL == SS1.checkReceive()) // Check réception de données
{
digitalWrite(10,HIGH); //Sélection de l'esclave SPI
digitalWrite(9, LOW); //Sélection de l'esclave SPI
SS1.readMsgBuf(&len, buf); // Lecture données, len: Taille de la données, buf: Buffer données
canId1 = SS1.getCanId();
if (canId1 == 0xC2)
{
buf [0] = 0x54;
}
digitalWrite(9, HIGH); //Sélection de l'esclave SPI
digitalWrite(10, LOW); //Sélection de l'esclave SPI
SS2.sendMsgBuf(canId1, 0, len, buf); // Renvoie sur CAN 2 des données
Serial.println("-----------------------------");
Serial.println("SS2 Données envoyées avec Id: 0x");
Serial.println(SS2.getCanId(), HEX);
digitalWrite(10,HIGH); //Sélection de l'esclave SPI
for (int i = 0; i < len; i++) // Ecriture de la données
{
Serial.print(buf[i]);
Serial.print("\t");
}
Serial.println();
}
Si des personnes bien aimable on d'autre infos sur le CS ou SS sur une Arduino Uno
Je tiendrais au courant de l'avancé du projet.
Bonne soirée
Cordialement,
Un jeune électronicien