10 #pragma message ("Commanders : No CAN commander !") 17 volatile uint8_t Flag_Recv = 0;
32 #ifdef COMMANDERS_PRINT_COMMANDERS 33 uint8_t SPIpin = inSPIpin;
34 uint8_t Speed = inSpeed;
35 uint8_t Interrupt = inInterrupt;
40 pinMode(inSPIpin, OUTPUT_RESERVED);
41 pinMode(inInterrupt, OUTPUT_RESERVED);
43 this->pCan =
new MCP_CAN(inSPIpin);
44 while (CAN_OK != this->pCan->begin(inSpeed))
46 #ifdef COMMANDERS_DEBUG_MODE 47 Serial.println(F(
"CAN BUS Shield init fail"));
48 Serial.println(F(
"Init CAN BUS Shield again"));
52 #ifdef COMMANDERS_DEBUG_MODE 53 Serial.println(F(
"CAN BUS Shield init ok!"));
62 attachInterrupt(inInterrupt, MCP2515_ISR, FALLING);
68 this->pCan->init_Mask(0, 0, 0xFFFF);
69 this->pCan->init_Mask(1, 0, 0xFFFF);
71 this->pCan->init_Filt(0, 0, inId);
72 this->pCan->init_Filt(1, 0, 0);
73 this->pCan->init_Filt(2, 0, 0);
74 this->pCan->init_Filt(3, 0, 0);
75 this->pCan->init_Filt(4, 0, 0);
76 this->pCan->init_Filt(5, 0, 0);
84 void CANCommanderClass::CAN_recup()
86 unsigned char len = 0;
90 while (CAN_MSGAVAIL == this->pCan->checkReceive())
92 this->pCan->readMsgBuf(&len, buf);
93 Id = (
unsigned char) this->pCan->getCanId();
94 if ((
unsigned int) (this->Ncan + len + 2) <
sizeof(this->Circule))
96 this->Circule[this->indexW] = Id;
99 if (this->indexW ==
sizeof(this->Circule))
101 this->Circule[this->indexW] = len;
104 if (this->indexW ==
sizeof(this->Circule))
106 for (uint8_t z = 0; z<len; z++)
108 this->Circule[this->indexW] = buf[z];
111 if (this->indexW ==
sizeof(this->Circule))
117 this->CANoverflow = 1;
132 #ifdef COMMANDERS_DEBUG_MODE 138 while (this->Ncan > 2)
141 #ifdef COMMANDERS_DEBUG_MODE 142 RId = this->Circule[this->indexR];
144 Serial.print(F(
"CAN id "));
146 Serial.print(F(
", data "));
149 if (this->indexR ==
sizeof(this->Circule))
152 Rlen = this->Circule[this->indexR];
154 if (this->indexR ==
sizeof(this->Circule))
156 for (
int k = 0; k < Rlen; k++)
159 Rbuf[k] = this->Circule[this->indexR];
161 if (this->indexR ==
sizeof(this->Circule))
163 #ifdef COMMANDERS_DEBUG_MODE 164 Serial.print(F(
"0x"));
165 Serial.print(Rbuf[k], HEX);
168 #ifdef COMMANDERS_DEBUG_MODE 174 long three = Rbuf[1];
179 unsigned long foundID = ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
183 int foundData = Rbuf[6];
184 foundData = foundData << 8;
185 foundData |= Rbuf[5];
197 #ifdef COMMANDERS_PRINT_COMMANDERS 198 void CANCommanderClass::printCommander()
200 Serial.print(F(
"Commander: CANCommander - Pin SPI: "));
201 Serial.print(this->SPIpin);
202 Serial.print(F(
" / Speed: "));
205 case CAN_5KBPS: Serial.print(F(
"5KBPS"));
break;
206 case CAN_10KBPS: Serial.print(F(
"10KBPS"));
break;
207 case CAN_20KBPS: Serial.print(F(
"20KBPS"));
break;
208 case CAN_25KBPS: Serial.print(F(
"25KBPS"));
break;
209 case CAN_31K25BPS: Serial.print(F(
"31K25BPS"));
break;
210 case CAN_33KBPS: Serial.print(F(
"33KBPS"));
break;
211 case CAN_40KBPS: Serial.print(F(
"40KBPS"));
break;
212 case CAN_50KBPS: Serial.print(F(
"50KBPS"));
break;
213 case CAN_80KBPS: Serial.print(F(
"80KBPS"));
break;
214 case CAN_83K3BPS: Serial.print(F(
"83K3BPS"));
break;
215 case CAN_95KBPS: Serial.print(F(
"95KBPS"));
break;
216 case CAN_100KBPS: Serial.print(F(
"100KBPS"));
break;
217 case CAN_125KBPS: Serial.print(F(
"125KBPS"));
break;
218 case CAN_200KBPS: Serial.print(F(
"200KBPS"));
break;
219 case CAN_250KBPS: Serial.print(F(
"250KBPS"));
break;
220 case CAN_500KBPS: Serial.print(F(
"500KBPS"));
break;
221 case CAN_666KBPS: Serial.print(F(
"666KBPS"));
break;
222 case CAN_1000KBPS: Serial.print(F(
"1000KBPS"));
break;
224 Serial.print(F(
" / Interrupt: "));
225 Serial.print(this->Interrupt);
226 Serial.print(F(
" / ID: "));
227 Serial.println(this->Id);
static void SetLastEventData(int inData)
static unsigned long RaiseEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEvent = COMMANDERS_EVENT_MOVEPOSITIONID, int inData = 0)
static void SetLastEventType(COMMANDERS_EVENT_TYPE inEvent)
void begin(uint8_t inSPIpin, uint8_t inSpeed, uint8_t inInterrupt, uint16_t inId)