/*+++ACAN2515+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* ACAN2515: Version 2.1.0 vom 16.02.2022 Programmspeicherbedarf: 214442 Byte Board : Wemos D1 R32, ESP32 Boardeinstellung: !!ESP32 DEV Modul!! Shield : Watterott Can-Bus V2 Quarz 16MHz Baudrate[sw] 10kb/s Ub: 3,3V /5,0V Rs: !120 Ohm! Kein Jumper Standart Pinning SPI Bemerkung: ICSP auf Pin Script : V 0.1 inArbeit: x ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ #ifndef ARDUINO_ARCH_ESP32 #error "Select an ESP32 board" #endif //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* #include "ACAN2515.h" // "" Lib im Ordner; <> extern static const byte MCP2515_SCK = 18 ; // SCK input of MCP2515 static const byte MCP2515_MOSI = 23 ; // SDI input of MCP2515 static const byte MCP2515_MISO = 19 ; // SDO output of MCP2515 static const byte MCP2515_CS = 5 ; // CS input of MCP2515 static const byte MCP2515_INT = 26 ; // INT (2) output of MCP2515 static const uint8_t LED_BUILTIN =2; // Board_Led uint8_t Tx = 12; // Sende_LED_D03 uint8_t Rx = 14; // Empfangs_LED_D02 String Ver="ESP_R32_REC_xV.01"; ACAN2515 can (MCP2515_CS, SPI,MCP2515_INT ) ; // Einstellung ACAN 2515 static const uint32_t QUARTZ_FREQUENCY = 16UL * 1000UL * 1000UL ; // Quarz Frequenz Can-Bus 16MHz //+++Setup++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* void setup () { pinMode (LED_BUILTIN, OUTPUT) ; digitalWrite (LED_BUILTIN, HIGH) ; pinMode(Tx, OUTPUT); digitalWrite(Tx, LOW); // Ausgang; Tx_Led out, kurz aktiv pinMode(Rx, OUTPUT); digitalWrite(Rx, HIGH); // Ausgang; Rx_Led out, kurz aktiv Serial.begin (115200) ; // Serial_Schnittstelle bitrate 115200 b/s while (!Serial) { delay (100); digitalWrite (LED_BUILTIN, !digitalRead (LED_BUILTIN)) ; } delay (100); digitalWrite (LED_BUILTIN, LOW) ; SPI.begin (MCP2515_SCK, MCP2515_MISO, MCP2515_MOSI) ; // SPI ini Standart Serial.println ("ACAN2515 Ini") ; // Info_001 ex delay(200); ACAN2515Settings settings (QUARTZ_FREQUENCY, 10UL * 1000UL) ; // CAN bit rate 10 kb/s settings.mRequestedMode = ACAN2515Settings::NormalMode; // LoopBackMode,NormalMode const uint16_t errorCode = can.begin (settings, [] { can.isr () ; }) ; if (errorCode == 0) { Serial.println("Setting"); Serial.printf ("Bit Rate prescaler: %d\t\n",settings.mBitRatePrescaler) ; Serial.printf ("Propagation Segment: %d\t\n",settings.mPropagationSegment) ; Serial.printf ("Phase segment 1: %d\t\n",settings.mPhaseSegment1) ; Serial.printf ("Phase segment 2: %d\t\n",settings.mPhaseSegment2) ; Serial.printf ("SJW: %d\t\n",settings.mSJW) ; Serial.printf ("Triple Sampling: %s\t\n",(settings.mTripleSampling ? "yes" : "no")) ; Serial.printf ("Actual bit rate: %d bit/s\t\n",settings.actualBitRate ()) ; Serial.printf ("Exact bit rate ? %s\t\n",(settings.exactBitRate () ? "yes" : "no")) ; Serial.printf ("Sample point: %d%%\t\n\n",settings.samplePointFromBitStart ()) ; Serial.printf ("Configuration error: 0x%X\nRUN\n",errorCode) ; } else { Serial.printf ("Configuration error: 0x%X\nSTOP!\n",errorCode) ; } Serial.println (Ver) ; delay (1000); } //+++Loop++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* void loop () { CANMessage frame ; if (can.receive (frame)) { digitalWrite(Rx, HIGH); // Rx LED High if (frame.id>=0xF9 && frame.id<=0x55F) // * Löschen Adressbereich Junkers { // * Löschen, Empfang ohne Adressbegrenzung Serial.printf("CAN_Bus sendet -->id:0x%X\text: %d\trtr: %d\tlen: %d\tdata:", (frame.id),(frame.ext),(frame.rtr),(frame.len)); for(int x=0;x