diff --git a/CanHacker.h b/CanHacker.h
index 1e79947..3047c5b 100644
--- a/CanHacker.h
+++ b/CanHacker.h
@@ -65,7 +65,7 @@ class CanHacker {
static const char BEL = 7;
static const uint16_t TIMESTAMP_LIMIT = 0xEA60;
- CAN_CLOCK canClock = MCP_16MHZ;
+ CAN_CLOCK canClock = MCP_8MHZ;
bool _timestampEnabled = false;
bool _listenOnly = false;
bool _loopback = false;
diff --git a/README.md b/README.md
index 08d0149..8f8a9e2 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,14 @@
-# CanHacker (lawicel) CAN adapter on Arduino + MCP2515
+
+
+
+
+ CANHacker CAN Adapter
+Arduino Nano & MCP2515 Board
-Use that [Library](https://github.com/autowp/arduino-mcp2515) to communicate with MCP2515
## Features
-Implement communication with CAN bus via MCP2515 by CanHacker (lawicel) protocol.
+Implement communication with CAN bus via MCP2515 by CANHacker (lawicel) protocol.
- send & receive can frames
- supports standart (11 bit) & extended (29 bit) frames
@@ -12,26 +16,23 @@ Implement communication with CAN bus via MCP2515 by CanHacker (lawicel) protocol
- supports filter by ID (mask + code)
- interface using [Stream](https://www.arduino.cc/en/Reference/Stream): ability to work with Serial, SoftwareSerial, Ethernet and other
- supported can baudrates from 10Kbps up to 1Mbps
-- supported modules with different oscillators (8, 16, 20 MHz), 16 MHz is default, use setClock if your oscillator is not 16MHz
-- support [CanHacker](http://www.mictronics.de/projects/usb-can-bus/) (application for Windows)
+- supported modules with different oscillators (8, 16, 20 MHz), 8 MHz is default, use setClock if your oscillator is not 8MHz
+- support [CanHacker](https://www.mictronics.de/img/2009/12/CANHackerV2.00.01.zip) (application for Windows)
- support [CANreader](https://github.com/autowp/CANreader) (application for Android)
## Documentation
[English](docs/en/)
-[Русский](docs/ru/)
-
## Library Installation
-1. Install [MCP2515 Library](https://github.com/autowp/arduino-mcp2515)
-2. Download the ZIP file from https://github.com/autowp/arduino-canhacker/archive/master.zip
+1. Install [MCP2515 Library](https://github.com/souravbaghz/arduino-mcp2515)
+2. Download the ZIP file from https://github.com/souravbaghz/arduino-canhacker/archive/master.zip
3. From the Arduino IDE: Sketch -> Include Library... -> Add .ZIP Library...
4. Restart the Arduino IDE to see the new "canhacker" library with examples
-Testes with Arduino Nano.
-On Arduino Uno have problem with too long boot period and losing first command
-
-## Contributing
+Testes with Arduino Nano Only.
-Feel free to open issues, create pull requests and other contributions
+## Repository History
+- Originally from [autowp](https://github.com/autowp/arduino-canhacker.git) Kudos to him :)
+- Forked & Modified by [souravbaghz](https://github.com/souravbaghz/arduino-canhacker)
diff --git a/docs/en/README.md b/docs/en/README.md
index 95150da..b81ac33 100644
--- a/docs/en/README.md
+++ b/docs/en/README.md
@@ -1,10 +1,8 @@
-# CanHacker (lawicel) CAN adapter on Arduino + MCP2515
-
-Use that [Library](https://github.com/autowp/arduino-mcp2515) to communicate with MCP2515
+# CANHacker CAN Adapter on Arduino + MCP2515
## Features
-Implement communication with CAN bus via MCP2515 by CanHacker (lawicel) protocol.
+Implement communication with CAN bus via MCP2515 by CANHacker (lawicel) protocol.
- send & receive can frames
- supports standart (11 bit) & extended (29 bit) frames
@@ -12,23 +10,35 @@ Implement communication with CAN bus via MCP2515 by CanHacker (lawicel) protocol
- supports filter by ID (mask + code)
- interface using [Stream](https://www.arduino.cc/en/Reference/Stream): ability to work with Serial, SoftwareSerial, Ethernet and other
- supported can baudrates from 10Kbps up to 1Mbps
-- supported modules with different oscillators (8, 16, 20 MHZ), 16 MHZ is default, use setClock if your oscillator is not 16MHZ
-- support [CanHacker](http://www.mictronics.de/projects/usb-can-bus/) (application for Windows)
+- supported modules with different oscillators (8, 16, 20 MHZ), 8 MHZ is default, use setClock if your oscillator is not 8MHZ
+- support [CanHacker](https://www.mictronics.de/img/2009/12/CANHackerV2.00.01.zip) (application for Windows)
- support [CANreader](https://github.com/autowp/CANreader) (application for Android)
+## Pins Connection
+
+|MCP2515 Pin|Arduino Pin|
+|-----------|-----------|
+| VCC | 5V |
+| GND | GND |
+| CS | D10 |
+| SO | D12 |
+| SI | D11 |
+| SCK | D13 |
+| INT | D2 |
+
+
## Library Installation
-1. Install [MCP2515 Library](https://github.com/autowp/arduino-mcp2515)
-2. Download the ZIP file from https://github.com/autowp/arduino-canhacker/archive/master.zip
+1. Install [MCP2515 Library](https://github.com/souravbaghz/arduino-mcp2515)
+2. Download the ZIP file from https://github.com/souravbaghz/arduino-canhacker/archive/master.zip
3. From the Arduino IDE: Sketch -> Include Library... -> Add .ZIP Library...
-4. Restart the Arduino IDE to see the new "canhacker" library with examples
+4. You may need to restart the Arduino IDE to see the new "canhacker" library with examples
-Testes with Arduino Nano.
-On Arduino Uno when works with CanHacker for windows have problem with too long boot period and losing first command
+Testes with Arduino Nano Only.
## Usage
-Example
+Upload the below sketch to work with CANHacker Windows:
```
#include
@@ -39,29 +49,80 @@ Example
#include
#include
+#include
const int SPI_CS_PIN = 10;
const int INT_PIN = 2;
+const int SS_RX_PIN = 3;
+const int SS_TX_PIN = 4;
+
CanHackerLineReader *lineReader = NULL;
CanHacker *canHacker = NULL;
+SoftwareSerial softwareSerial(SS_RX_PIN, SS_TX_PIN);
+
void setup() {
Serial.begin(115200);
while (!Serial);
SPI.begin();
+ softwareSerial.begin(115200);
Stream *interfaceStream = &Serial;
+ Stream *debugStream = &softwareSerial;
+
- canHacker = new CanHacker(interfaceStream, NULL, SPI_CS_PIN);
+ canHacker = new CanHacker(interfaceStream, debugStream, SPI_CS_PIN);
+ //canHacker->enableLoopback(); // uncomment this for loopback
lineReader = new CanHackerLineReader(canHacker);
pinMode(INT_PIN, INPUT);
}
void loop() {
- canHacker->processInterrupt();
- lineReader->process();
+ CanHacker::ERROR error;
+
+ if (digitalRead(INT_PIN) == LOW) {
+ error = canHacker->processInterrupt();
+ handleError(error);
+ }
+
+ error = lineReader->process();
+ handleError(error);
+}
+
+void handleError(const CanHacker::ERROR error) {
+
+ switch (error) {
+ case CanHacker::ERROR_OK:
+ case CanHacker::ERROR_UNKNOWN_COMMAND:
+ case CanHacker::ERROR_NOT_CONNECTED:
+ case CanHacker::ERROR_MCP2515_ERRIF:
+ case CanHacker::ERROR_INVALID_COMMAND:
+ return;
+
+ default:
+ break;
+ }
+
+ softwareSerial.print("Failure (code ");
+ softwareSerial.print((int)error);
+ softwareSerial.println(")");
+
+ digitalWrite(SPI_CS_PIN, HIGH);
+ pinMode(LED_BUILTIN, OUTPUT);
+
+ while (1) {
+ int c = (int)error;
+ for (int i=0; i Include Library... -> Add .ZIP Library...
-4. Перезапустите Arduino IDE, чтобы увидеть "canhacker" в списке библиотек и примеров
-
-Протестировано с Arduino Nano.
-На Arduino Uno при работе через CanHacker для Windows, есть проблема с слишком долгой перезагрузкой и потерей первой комманды
-
-## Использование
-
-Пример
-
-```
-#include
-#include
-
-#include
-#include
-#include
-
-#include
-
-const int SPI_CS_PIN = 10;
-const int INT_PIN = 2;
-
-CanHackerLineReader *lineReader = NULL;
-CanHacker *canHacker = NULL;
-
-void setup() {
- Serial.begin(115200);
- while (!Serial);
- SPI.begin();
- softwareSerial.begin(115200);
-
- Stream *interfaceStream = &Serial;
-
- canHacker = new CanHacker(interfaceStream, null, SPI_CS_PIN);
- lineReader = new CanHackerLineReader(canHacker);
-
- pinMode(INT_PIN, INPUT);
-}
-
-void loop() {
- canHacker->processInterrupt();
- lineReader->process();
-}
-```
-
-## Протокол
-
-Протокол CanHacker (lawicel) описан в [документации к приложению CanHacker](http://www.mictronics.de/projects/usb-can-bus/)
-
-Библиотека реализует его не полностью. [Поддерживаемые комманды приведены здесь](protocol.md).
-
-## Содействие
-
-Приветствуются любые способы участия в коде.
\ No newline at end of file
diff --git a/docs/ru/protocol.md b/docs/ru/protocol.md
deleted file mode 100644
index 660345c..0000000
--- a/docs/ru/protocol.md
+++ /dev/null
@@ -1,188 +0,0 @@
-Протокол CanHacker (lawicel) описан в [документации к приложению CanHacker](http://www.mictronics.de/projects/usb-can-bus/)
-
-Библиотека реализует его не полностью. Поддерживаемые комманды приведены ниже.
-
-### `C[CR]`
-
-Эта команда переключает CAN контроллер из операционного режима в режим сброса. Контроллер более не вовлечен в какое-либо взаимодействие с CAN.
-
-Комманда доступна только в операционном режиме, запущеннос командой `O` ранее.
-
-Возвращает: [CR] или [BEL]
-
-### `L[CR]`
-
-Эта комманда переключает CAN controller в режим Только Чтение. Комманда открытия канала (`O`) не требуется после исполнения `L`.
-
-Используйте `C` для возврата в режим сброса.
-
-Возвращает: [CR]
-
-### `Mxxxxxxxx[CR]`
-
-Установить код фильтра. Эта комманда доступна только в режиме сброса.
-
-xxxxxxxx - код в hexadecimal
-
-Значение по-уолчанию после загузки 0x00000000 для приема всех сообщений.
-
-Возвращает: [CR] или [BEL]
-
-### `mxxxxxxxx[CR]`
-
-Установить маску фильтра. Эта комманда доступна только в режиме сброса.
-
-xxxxxxxx - маска в hexadecimal
-
-Значение по-уолчанию после загузки 0xFFFFFFFF для приема всех сообщений.
-
-Возвращает: [CR] или [BEL]
-
-### `N[CR]`
-
-Серийный номер устройства.
-
-Возвращает: Nxxxx[CR]
-
-xxxx - серийный номер в цифро-алфавитных символах.
-
-### `O[CR]`
-
-Эта комманда переключает CAN контроллер из режима сброса в операциооный режим. Контроллер вовлечен во взаимодействие с CAN. Комманда достуна только после установки скорости коммандой `S` ранее или контроллер переведен в режим сброса коммандой `C`.
-
-Возвращает: [CR] or [BEL]
-
-### `riiiL [CR]`
-
-Комманда пердает стандартный remote 11 Bit CAN фрейм. Комманда доступна только в операционном режиме после исполнения комманды `O`.
-
-```
-iii - идентификатор в hexadecimal (000-7FF)
-L - код длины сообщения (0-8)
-```
-
-Возвращает: [CR] или [BEL]
-
-### `RiiiiiiiiL [CR]`
-
-Комманда пердает расширенный remote 29 Bit CAN фрейм. Комманда доступна только в операционном режиме после исполнения комманды `O`.
-
-```
-iiiiiiii - идентификатор в hexadecimal (00000000-1FFFFFFF)
-L - код длины сообщения (0-8)
-```
-
-Возвращает: [CR] или [BEL]
-
-### `Sn[CR]`
-
-Эта комманда устанавливает скорость CAN в одно из предопределеных состояний.
-Команда доступна после включения или после перевода конроллера в режим сброса командой `C`.
-
-Следующие скорости доступны:
-
-```
-S0 - 10Kbps
-S1 - 20Kbps
-S2 - 50Kbps
-S3 - 100Kbps
-S4 - 125Kbps
-S5 - 250Kbps
-S6 - 500Kbps
-S7 - 800Kbps
-S8 - 1Mbps
-```
-
-Возвращает: [CR] или [BEL]
-
-### `tiiiLDDDDDDDDDDDDDDDD[CR]`
-
-Комманда пердает стандартный 11 Bit CAN фрейм. Комманда доступна только в операционном режиме после исполнения комманды `O`.
-
-```
-iii - идентификатор в hexadecimal (000-7FF)
-L - код длины сообщения (0-8)
-DD - Байт данных в hexadecimal (00-FF). Количество байт должно соответствовать коду длины сообщения
-```
-
-Возвращает: [CR] или [BEL]
-
-### `TiiiiiiiiLDDDDDDDDDDDDDDDD[CR]`
-
-Комманда пердает расширенный 29 Bit CAN фрейм. Комманда доступна только в операционном режиме после исполнения комманды `O`.
-```
-iiiiiiii - идентификатор в hexadecimal (00000000-1FFFFFFF)
-L - код длины сообщения (0-8)
-DD - Байт данных в hexadecimal (00-FF). Количество байт должно соответствовать коду длины сообщения
-```
-
-Возвращает: [CR] или [BEL]
-
-### `V[CR]`
-
-Чтение версии программного обеспечения и платы
-
-Возвращает: Vhhff[CR]
-
-```
-hh - версия платы
-ff - версия программного обеспечения
-```
-
-### `v[CR]`
-
-Чтение подробной версии программного обеспечения
-
-Возвращает: vmami[CR]
-
-```
-ma - мажорный номер версии
-mi - минорный номер версии
-```
-
-### `Zv[CR]`
-
-Эта комманда включает или выключает метки времени в получаемых сообщениях. По-умолчнию - выключено.
-
-Если метки времени включены, получаемые сообщения содержат дополнительные 2 байта на конце, в которых закодирована временная метка в миллисекнудах.
-
-Счетчик времени начинается с 0x0000 и переполняется на 0xEA5F, что эквивалентно 59999мс.
-
-Каждый инкремент временной метки соответствует 1мс из 60000мс окна.
-
-### Входящие фреймы
-
-Все вхоядщие фреймы передаются сразу после получения, опционально с временной меткой.
-
-Опрос не требуется. Отправляются в следующем формате:
-
-11 bit ID фрейм
-```
-tiiiLDDDDDDDDDDDDDDDD[ssss][CR]
-```
-
-11 bit ID Remote фрейм
-```
-riiiL[ssss][CR]
-```
-
-29 bit ID фрейм
-```
-TiiiiiiiiLDDDDDDDDDDDDDDDD[ssss][CR]
-```
-
-29 bit ID Remote фрейм
-```
-RiiiiiiiiL[ssss][CR]
-```
-
-```
-r - идентификатор для Remote 11 bit фрейма
-R - идентификатор для Remote 29 bit фрейма
-t - идентификатор для 11 bit фрейма
-T - идентификатор для 29 bit фрейма
-i - идентификатор (000-7FF) или (00000000-1FFFFFFF)
-L - код длины (0-8)
-DD - байты данных (00-FF)
-ssss - опциональная метка времени (0000-EA5F)
-```