From d5494703ef1158a185d3f3830b8a7fa3d863a205 Mon Sep 17 00:00:00 2001 From: Rob Tillaart Date: Thu, 7 Dec 2023 12:17:08 +0100 Subject: [PATCH 1/6] refactor API, begin() --- AS5600.cpp | 53 +------------------ AS5600.h | 9 +--- CHANGELOG.md | 9 +++- README.md | 9 ++++ .../AS5600L_set_address.ino | 5 +- .../AS5600_I2C_frequency.ino | 9 ++-- .../AS5600_angular_speed.ino | 11 ++-- .../AS5600_angular_speed_RPM.ino | 9 ++-- .../AS5600_burn_conf_mang.ino | 10 ++-- .../AS5600_burn_zpos/AS5600_burn_zpos.ino | 10 ++-- examples/AS5600_demo/AS5600_demo.ino | 12 ++--- examples/AS5600_demo_ESP32/.arduino-ci.yml | 28 ++++++++++ .../AS5600_demo_ESP32/AS5600_demo_ESP32.ino | 44 +++++++++++++++ examples/AS5600_demo_RP2040/.arduino-ci.yml | 28 ++++++++++ .../AS5600_demo_RP2040/AS5600_demo_RP2040.ino | 46 ++++++++++++++++ examples/AS5600_demo_STM32/.arduino-ci.yml | 28 ++++++++++ .../AS5600_demo_STM32/AS5600_demo_STM32.ino | 46 ++++++++++++++++ .../AS5600_demo_offset/AS5600_demo_offset.ino | 4 +- .../AS5600_demo_radians.ino | 5 +- .../AS5600_demo_software_direction.ino | 6 +-- .../AS5600_demo_status/AS5600_demo_status.ino | 5 +- .../AS5600_demo_two_I2C.ino | 7 ++- .../AS5600_outmode_analog_100.ino | 4 +- .../AS5600_outmode_analog_90.ino | 4 +- .../AS5600_outmode_analog_pwm.ino | 4 +- .../AS5600_outmode_pwm_interrupt.ino | 2 +- examples/AS5600_position/AS5600_position.ino | 12 ++--- .../AS5600_resetCumulativeCounter.ino | 8 ++- library.json | 2 +- library.properties | 4 +- 30 files changed, 303 insertions(+), 130 deletions(-) create mode 100644 examples/AS5600_demo_ESP32/.arduino-ci.yml create mode 100644 examples/AS5600_demo_ESP32/AS5600_demo_ESP32.ino create mode 100644 examples/AS5600_demo_RP2040/.arduino-ci.yml create mode 100644 examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino create mode 100644 examples/AS5600_demo_STM32/.arduino-ci.yml create mode 100644 examples/AS5600_demo_STM32/AS5600_demo_STM32.ino diff --git a/AS5600.cpp b/AS5600.cpp index 13652e9..77efd7f 100644 --- a/AS5600.cpp +++ b/AS5600.cpp @@ -1,7 +1,7 @@ // // FILE: AS56000.cpp // AUTHOR: Rob Tillaart -// VERSION: 0.4.1 +// VERSION: 0.5.0 // PURPOSE: Arduino library for AS5600 magnetic rotation meter // DATE: 2022-05-28 // URL: https://github.com/RobTillaart/AS5600 @@ -55,56 +55,6 @@ AS5600::AS5600(TwoWire *wire) } -#if defined (ESP8266) || defined(ESP32) - -bool AS5600::begin(int dataPin, int clockPin, uint8_t directionPin) -{ - _directionPin = directionPin; - if (_directionPin != AS5600_SW_DIRECTION_PIN) - { - pinMode(_directionPin, OUTPUT); - } - setDirection(AS5600_CLOCK_WISE); - - if ((dataPin < 255) && (clockPin < 255)) - { - _wire->begin(dataPin, clockPin); - } else { - _wire->begin(); - } - if (! isConnected()) return false; - return true; -} - -#endif - - -#if defined (ARDUINO_ARCH_STM32) - -bool AS5600::begin(int dataPin, int clockPin, uint8_t directionPin) -{ - _directionPin = directionPin; - if (_directionPin != AS5600_SW_DIRECTION_PIN) - { - pinMode(_directionPin, OUTPUT); - } - setDirection(AS5600_CLOCK_WISE); - - if ((dataPin < 255) && (clockPin < 255)) - { - _wire->setSDA(dataPin); - _wire->setSCL(clockPin); - _wire->begin(); - } else { - _wire->begin(); - } - if (! isConnected()) return false; - return true; -} - -#endif - - bool AS5600::begin(uint8_t directionPin) { _directionPin = directionPin; @@ -114,7 +64,6 @@ bool AS5600::begin(uint8_t directionPin) } setDirection(AS5600_CLOCK_WISE); - _wire->begin(); if (! isConnected()) return false; return true; } diff --git a/AS5600.h b/AS5600.h index 411e49f..7800e65 100644 --- a/AS5600.h +++ b/AS5600.h @@ -2,7 +2,7 @@ // // FILE: AS5600.h // AUTHOR: Rob Tillaart -// VERSION: 0.4.1 +// VERSION: 0.5.0 // PURPOSE: Arduino library for AS5600 magnetic rotation meter // DATE: 2022-05-28 // URL: https://github.com/RobTillaart/AS5600 @@ -12,7 +12,7 @@ #include "Wire.h" -#define AS5600_LIB_VERSION (F("0.4.1")) +#define AS5600_LIB_VERSION (F("0.5.0")) // default addresses const uint8_t AS5600_DEFAULT_ADDRESS = 0x36; @@ -89,11 +89,6 @@ class AS5600 public: AS5600(TwoWire *wire = &Wire); -#if defined (ESP8266) || defined(ESP32) || defined(ARDUINO_ARCH_STM32) - // AS5600_SW_DIRECTION_PIN is software controlled direction pin - bool begin(int dataPin, int clockPin, uint8_t directionPin = AS5600_SW_DIRECTION_PIN); -#endif - bool begin(uint8_t directionPin = AS5600_SW_DIRECTION_PIN); bool isConnected(); diff --git a/CHANGELOG.md b/CHANGELOG.md index 11e0a1d..fd95278 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,19 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [0.5.0] - 2023-12-07 +- refactor API, begin() +- update readme.md +- update examples +- patch library.properties => category=Sensors + +---- + ## [0.4.1] - 2023-09-16 - fix #45 support STM32 set I2C pins ARDUINO_ARCH_STM32 - update readme badges - minor edits - ## [0.4.0] - 2023-06-27 - fix #39 support for Wire2 on ESP32 - update readme.md diff --git a/README.md b/README.md index 0ada705..df47876 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,15 @@ or fluctuating power supply. Please share your experiences. +#### 0.5.0 Breaking change + +Version 0.5.0 introduced a breaking change. +You cannot set the pins in **begin()** any more. +This reduces the dependency of processor dependent Wire implementations. +The user has to call **Wire.begin()** and can optionally set the Wire pins +before calling **begin()**. + + #### Related libraries - https://github.com/RobTillaart/Angle diff --git a/examples/AS5600L_set_address/AS5600L_set_address.ino b/examples/AS5600L_set_address/AS5600L_set_address.ino index c9a0e5e..54057b5 100644 --- a/examples/AS5600L_set_address/AS5600L_set_address.ino +++ b/examples/AS5600L_set_address/AS5600L_set_address.ino @@ -2,7 +2,6 @@ // FILE: AS5600L_set_address.ino // AUTHOR: Rob Tillaart // PURPOSE: demo -// DATE: 2022-08-30 #include "AS5600.h" @@ -21,7 +20,7 @@ void setup() Wire.begin(); ASL.begin(4); // set direction pin. - ASL.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + ASL.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. int b = ASL.isConnected(); Serial.print("Connect: "); Serial.println(b); @@ -48,4 +47,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_I2C_frequency/AS5600_I2C_frequency.ino b/examples/AS5600_I2C_frequency/AS5600_I2C_frequency.ino index df84b3b..0510a51 100644 --- a/examples/AS5600_I2C_frequency/AS5600_I2C_frequency.ino +++ b/examples/AS5600_I2C_frequency/AS5600_I2C_frequency.ino @@ -2,18 +2,18 @@ // FILE: AS5600_I2C_frequency.ino // AUTHOR: Rob Tillaart // PURPOSE: demo -// DATE: 2022-05-28 #include "AS5600.h" #include "Wire.h" -AS5600 as5600; // use default Wire +AS5600L as5600; // use default Wire uint32_t clk = 0; uint32_t start, stop; + void setup() { Serial.begin(115200); @@ -23,13 +23,10 @@ void setup() Wire.begin(); - // UNO as5600.begin(4); // set direction pin. - // ESP32 - // as5600.begin(14, 15); // no direction pin. // as5600.setAddress(0x40); // AS5600L only - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. int b = as5600.isConnected(); Serial.print("Connect: "); Serial.println(b); diff --git a/examples/AS5600_angular_speed/AS5600_angular_speed.ino b/examples/AS5600_angular_speed/AS5600_angular_speed.ino index da1f273..bdcde29 100644 --- a/examples/AS5600_angular_speed/AS5600_angular_speed.ino +++ b/examples/AS5600_angular_speed/AS5600_angular_speed.ino @@ -2,13 +2,12 @@ // FILE: AS5600_angular_speed.ino // AUTHOR: Rob Tillaart // PURPOSE: demo -// DATE: 2022-06-02 #include "AS5600.h" #include "Wire.h" -AS5600 as5600; // use default Wire +AS5600L as5600; // use default Wire void setup() @@ -21,7 +20,7 @@ void setup() Wire.begin(); as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. Serial.println(as5600.getAddress()); @@ -39,10 +38,10 @@ void loop() { // Serial.print("\ta = "); // Serial.print(as5600.readAngle()); - Serial.print("\tω = "); + // Serial.print("\tω = "); Serial.println(as5600.getAngularSpeed()); - delay(100); + delay(25); } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_angular_speed_RPM/AS5600_angular_speed_RPM.ino b/examples/AS5600_angular_speed_RPM/AS5600_angular_speed_RPM.ino index d927b42..d733eb0 100644 --- a/examples/AS5600_angular_speed_RPM/AS5600_angular_speed_RPM.ino +++ b/examples/AS5600_angular_speed_RPM/AS5600_angular_speed_RPM.ino @@ -2,7 +2,6 @@ // FILE: AS5600_angular_speed_RPM.ino // AUTHOR: Rob Tillaart // PURPOSE: demo -// DATE: 2022-06-02 #include "AS5600.h" @@ -19,13 +18,13 @@ void setup() Serial.println(AS5600_LIB_VERSION); Wire.begin(); - // as5600.begin(14,15); + as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. Serial.println(as5600.getAddress()); - // as5600.setAddress(0x40); // AS5600L only + // as5600.setAddress(0x40); // AS5600L only int b = as5600.isConnected(); Serial.print("Connect: "); @@ -45,4 +44,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_burn_conf_mang/AS5600_burn_conf_mang.ino b/examples/AS5600_burn_conf_mang/AS5600_burn_conf_mang.ino index f814181..13ba3c7 100644 --- a/examples/AS5600_burn_conf_mang/AS5600_burn_conf_mang.ino +++ b/examples/AS5600_burn_conf_mang/AS5600_burn_conf_mang.ino @@ -2,7 +2,6 @@ // FILE: AS5600_burn_conf_mang.ino // AUTHOR: Rob Tillaart // PURPOSE: demo (not tested yet - see issue #38) -// DATE: 2023-06-18 // WARNING @@ -31,11 +30,10 @@ void setup() Serial.print("AS5600_LIB_VERSION: "); Serial.println(AS5600_LIB_VERSION); - // ESP32 - // as5600.begin(14, 15); - // AVR + Wire.begin(); + as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. if (as5600.isConnected()) { @@ -172,4 +170,4 @@ void burn_mang() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_burn_zpos/AS5600_burn_zpos.ino b/examples/AS5600_burn_zpos/AS5600_burn_zpos.ino index 8a3a0d9..0360442 100644 --- a/examples/AS5600_burn_zpos/AS5600_burn_zpos.ino +++ b/examples/AS5600_burn_zpos/AS5600_burn_zpos.ino @@ -2,7 +2,6 @@ // FILE: AS5600_burn_zpos.ino // AUTHOR: Rob Tillaart // PURPOSE: demo (not tested yet - see issue #38) -// DATE: 2023-06-18 // WARNING @@ -31,11 +30,10 @@ void setup() Serial.print("AS5600_LIB_VERSION: "); Serial.println(AS5600_LIB_VERSION); - // ESP32 - // as5600.begin(14, 15); - // AVR + Wire.begin(); + as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. if (as5600.isConnected()) { @@ -111,4 +109,4 @@ void burn_zpos() -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_demo/AS5600_demo.ino b/examples/AS5600_demo/AS5600_demo.ino index d41377b..78f10fb 100644 --- a/examples/AS5600_demo/AS5600_demo.ino +++ b/examples/AS5600_demo/AS5600_demo.ino @@ -2,13 +2,12 @@ // FILE: AS5600_demo.ino // AUTHOR: Rob Tillaart // PURPOSE: demo -// DATE: 2022-05-28 #include "AS5600.h" #include "Wire.h" -AS5600 as5600; // use default Wire +AS5600L as5600; // use default Wire void setup() @@ -17,12 +16,11 @@ void setup() Serial.println(__FILE__); Serial.print("AS5600_LIB_VERSION: "); Serial.println(AS5600_LIB_VERSION); + + Wire.begin(); - // ESP32 - // as5600.begin(14,15); - // AVR as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. int b = as5600.isConnected(); Serial.print("Connect: "); Serial.println(b); @@ -43,4 +41,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_demo_ESP32/.arduino-ci.yml b/examples/AS5600_demo_ESP32/.arduino-ci.yml new file mode 100644 index 0000000..e1c447b --- /dev/null +++ b/examples/AS5600_demo_ESP32/.arduino-ci.yml @@ -0,0 +1,28 @@ +platforms: + rpipico: + board: rp2040:rp2040:rpipico + package: rp2040:rp2040 + gcc: + features: + defines: + - ARDUINO_ARCH_RP2040 + warnings: + flags: + +packages: + rp2040:rp2040: + url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json + +compile: + # Choosing to run compilation tests on 2 different Arduino platforms + platforms: + # - uno + # - due + # - zero + # - leonardo + # - m4 + - esp32 + # - esp8266 + # - mega2560 + # - rpipico + diff --git a/examples/AS5600_demo_ESP32/AS5600_demo_ESP32.ino b/examples/AS5600_demo_ESP32/AS5600_demo_ESP32.ino new file mode 100644 index 0000000..a3ba5c2 --- /dev/null +++ b/examples/AS5600_demo_ESP32/AS5600_demo_ESP32.ino @@ -0,0 +1,44 @@ +// +// FILE: AS5600_demo.ino +// AUTHOR: Rob Tillaart +// PURPOSE: demo + + +#include "AS5600.h" +#include "Wire.h" + +AS5600L as5600; // use default Wire + + +void setup() +{ + Serial.begin(115200); + Serial.println(__FILE__); + Serial.print("AS5600_LIB_VERSION: "); + Serial.println(AS5600_LIB_VERSION); + + Wire.begin(14, 15); + + as5600.begin(4); // set direction pin. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + int b = as5600.isConnected(); + Serial.print("Connect: "); + Serial.println(b); + delay(1000); +} + + +void loop() +{ + // Serial.print(millis()); + // Serial.print("\t"); + Serial.print(as5600.readAngle()); + Serial.print("\t"); + Serial.println(as5600.rawAngle()); + // Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); + + delay(1000); +} + + +// -- END OF FILE -- diff --git a/examples/AS5600_demo_RP2040/.arduino-ci.yml b/examples/AS5600_demo_RP2040/.arduino-ci.yml new file mode 100644 index 0000000..534b5e3 --- /dev/null +++ b/examples/AS5600_demo_RP2040/.arduino-ci.yml @@ -0,0 +1,28 @@ +platforms: + rpipico: + board: rp2040:rp2040:rpipico + package: rp2040:rp2040 + gcc: + features: + defines: + - ARDUINO_ARCH_RP2040 + warnings: + flags: + +packages: + rp2040:rp2040: + url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json + +compile: + # Choosing to run compilation tests on 2 different Arduino platforms + platforms: + # - uno + # - due + # - zero + # - leonardo + # - m4 + # - esp32 + # - esp8266 + # - mega2560 + - rpipico + diff --git a/examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino b/examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino new file mode 100644 index 0000000..bc13a94 --- /dev/null +++ b/examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino @@ -0,0 +1,46 @@ +// +// FILE: AS5600_demo.ino +// AUTHOR: Rob Tillaart +// PURPOSE: demo + + +#include "AS5600.h" +#include "Wire.h" + +AS5600L as5600; // use default Wire + + +void setup() +{ + Serial.begin(115200); + Serial.println(__FILE__); + Serial.print("AS5600_LIB_VERSION: "); + Serial.println(AS5600_LIB_VERSION); + + Wire.setSDA(14); + Wire.setSCL(15); + Wire.begin() + + as5600.begin(4); // set direction pin. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + int b = as5600.isConnected(); + Serial.print("Connect: "); + Serial.println(b); + delay(1000); +} + + +void loop() +{ + // Serial.print(millis()); + // Serial.print("\t"); + Serial.print(as5600.readAngle()); + Serial.print("\t"); + Serial.println(as5600.rawAngle()); + // Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); + + delay(1000); +} + + +// -- END OF FILE -- diff --git a/examples/AS5600_demo_STM32/.arduino-ci.yml b/examples/AS5600_demo_STM32/.arduino-ci.yml new file mode 100644 index 0000000..783ab31 --- /dev/null +++ b/examples/AS5600_demo_STM32/.arduino-ci.yml @@ -0,0 +1,28 @@ +platforms: + rpipico: + board: rp2040:rp2040:rpipico + package: rp2040:rp2040 + gcc: + features: + defines: + - ARDUINO_ARCH_RP2040 + warnings: + flags: + +packages: + rp2040:rp2040: + url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json + +compile: + # Choosing to run compilation tests on 2 different Arduino platforms + platforms: + # - uno + # - due + # - zero + # - leonardo + # - m4 + # - esp32 + # - esp8266 + # - mega2560 + # - rpipico + diff --git a/examples/AS5600_demo_STM32/AS5600_demo_STM32.ino b/examples/AS5600_demo_STM32/AS5600_demo_STM32.ino new file mode 100644 index 0000000..bc13a94 --- /dev/null +++ b/examples/AS5600_demo_STM32/AS5600_demo_STM32.ino @@ -0,0 +1,46 @@ +// +// FILE: AS5600_demo.ino +// AUTHOR: Rob Tillaart +// PURPOSE: demo + + +#include "AS5600.h" +#include "Wire.h" + +AS5600L as5600; // use default Wire + + +void setup() +{ + Serial.begin(115200); + Serial.println(__FILE__); + Serial.print("AS5600_LIB_VERSION: "); + Serial.println(AS5600_LIB_VERSION); + + Wire.setSDA(14); + Wire.setSCL(15); + Wire.begin() + + as5600.begin(4); // set direction pin. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + int b = as5600.isConnected(); + Serial.print("Connect: "); + Serial.println(b); + delay(1000); +} + + +void loop() +{ + // Serial.print(millis()); + // Serial.print("\t"); + Serial.print(as5600.readAngle()); + Serial.print("\t"); + Serial.println(as5600.rawAngle()); + // Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); + + delay(1000); +} + + +// -- END OF FILE -- diff --git a/examples/AS5600_demo_offset/AS5600_demo_offset.ino b/examples/AS5600_demo_offset/AS5600_demo_offset.ino index 158d646..c6c7c1a 100644 --- a/examples/AS5600_demo_offset/AS5600_demo_offset.ino +++ b/examples/AS5600_demo_offset/AS5600_demo_offset.ino @@ -20,7 +20,7 @@ void setup() Wire.begin(); as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. } @@ -45,4 +45,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_demo_radians/AS5600_demo_radians.ino b/examples/AS5600_demo_radians/AS5600_demo_radians.ino index 3c7d363..6f75716 100644 --- a/examples/AS5600_demo_radians/AS5600_demo_radians.ino +++ b/examples/AS5600_demo_radians/AS5600_demo_radians.ino @@ -19,9 +19,8 @@ void setup() Wire.begin(); - // as5600.begin(11, 12, 4); // test for STM32 or ESP32 as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. } @@ -37,4 +36,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_demo_software_direction/AS5600_demo_software_direction.ino b/examples/AS5600_demo_software_direction/AS5600_demo_software_direction.ino index 25bab2b..fe23b1f 100644 --- a/examples/AS5600_demo_software_direction/AS5600_demo_software_direction.ino +++ b/examples/AS5600_demo_software_direction/AS5600_demo_software_direction.ino @@ -4,7 +4,7 @@ // PURPOSE: demo software direction control -// connect the DIR pin of teh AS5600 to GND +// connect the DIR pin of the AS5600 to GND #include "AS5600.h" @@ -24,7 +24,7 @@ void setup() Wire.begin(); as5600.begin(); // set software direction control. default param = 255 - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. } @@ -48,4 +48,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_demo_status/AS5600_demo_status.ino b/examples/AS5600_demo_status/AS5600_demo_status.ino index 096caa7..2430b49 100644 --- a/examples/AS5600_demo_status/AS5600_demo_status.ino +++ b/examples/AS5600_demo_status/AS5600_demo_status.ino @@ -2,7 +2,6 @@ // FILE: AS5600_demo_status.ino // AUTHOR: Rob Tillaart // PURPOSE: demo -// DATE: 2022-05-28 #include "AS5600.h" @@ -21,7 +20,7 @@ void setup() Wire.begin(); as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. } @@ -47,4 +46,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_demo_two_I2C/AS5600_demo_two_I2C.ino b/examples/AS5600_demo_two_I2C/AS5600_demo_two_I2C.ino index 444f808..4103bea 100644 --- a/examples/AS5600_demo_two_I2C/AS5600_demo_two_I2C.ino +++ b/examples/AS5600_demo_two_I2C/AS5600_demo_two_I2C.ino @@ -2,11 +2,11 @@ // FILE: AS5600_demo_two_I2C.ino // AUTHOR: Rob Tillaart // PURPOSE: demo two I2C busses -// DATE: 2023-03-07 // -// Works only if Wire1 bus is present +// Works only if Wire1 bus is present e.g. // - nano33 ble // - teensy 4.1 +// - RP2040 #include "AS5600.h" @@ -23,6 +23,9 @@ void setup() Serial.print("AS5600_LIB_VERSION: "); Serial.println(AS5600_LIB_VERSION); + Wire.begin(); + Wire1.begin(); + as5600_0.begin(4); // set direction pin. as5600_0.setDirection(AS5600_CLOCK_WISE); Serial.print("Connect device 0: "); diff --git a/examples/AS5600_outmode_analog_100/AS5600_outmode_analog_100.ino b/examples/AS5600_outmode_analog_100/AS5600_outmode_analog_100.ino index 4570d27..e6ec10b 100644 --- a/examples/AS5600_outmode_analog_100/AS5600_outmode_analog_100.ino +++ b/examples/AS5600_outmode_analog_100/AS5600_outmode_analog_100.ino @@ -22,7 +22,7 @@ void setup() Wire.begin(); as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. as5600.setOutputMode(AS5600_OUTMODE_ANALOG_100); } @@ -39,4 +39,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_outmode_analog_90/AS5600_outmode_analog_90.ino b/examples/AS5600_outmode_analog_90/AS5600_outmode_analog_90.ino index eb5438c..f1662b3 100644 --- a/examples/AS5600_outmode_analog_90/AS5600_outmode_analog_90.ino +++ b/examples/AS5600_outmode_analog_90/AS5600_outmode_analog_90.ino @@ -22,7 +22,7 @@ void setup() Wire.begin(); as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. as5600.setOutputMode(AS5600_OUTMODE_ANALOG_90); } @@ -39,4 +39,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_outmode_analog_pwm/AS5600_outmode_analog_pwm.ino b/examples/AS5600_outmode_analog_pwm/AS5600_outmode_analog_pwm.ino index 2e92776..f68b199 100644 --- a/examples/AS5600_outmode_analog_pwm/AS5600_outmode_analog_pwm.ino +++ b/examples/AS5600_outmode_analog_pwm/AS5600_outmode_analog_pwm.ino @@ -28,7 +28,7 @@ void setup() Wire.begin(); as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. as5600.setOutputMode(AS5600_OUTMODE_PWM); as5600.setPWMFrequency(AS5600_PWM_920); } @@ -46,4 +46,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_outmode_pwm_interrupt/AS5600_outmode_pwm_interrupt.ino b/examples/AS5600_outmode_pwm_interrupt/AS5600_outmode_pwm_interrupt.ino index 34cd132..7838ab3 100644 --- a/examples/AS5600_outmode_pwm_interrupt/AS5600_outmode_pwm_interrupt.ino +++ b/examples/AS5600_outmode_pwm_interrupt/AS5600_outmode_pwm_interrupt.ino @@ -57,4 +57,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_position/AS5600_position.ino b/examples/AS5600_position/AS5600_position.ino index 345a1c7..6c9e740 100644 --- a/examples/AS5600_position/AS5600_position.ino +++ b/examples/AS5600_position/AS5600_position.ino @@ -2,7 +2,6 @@ // FILE: AS5600_position.ino // AUTHOR: Rob Tillaart // PURPOSE: demo -// DATE: 2022-12-20 #include "AS5600.h" @@ -18,15 +17,14 @@ void setup() Serial.print("AS5600_LIB_VERSION: "); Serial.println(AS5600_LIB_VERSION); - // ESP32 - // as5600.begin(14, 15); - // AVR + Wire.begin(); + as5600.begin(4); // set direction pin. - as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. Serial.println(as5600.getAddress()); - // as5600.setAddress(0x40); // AS5600L only + // as5600.setAddress(0x40); // AS5600L only int b = as5600.isConnected(); Serial.print("Connect: "); @@ -61,4 +59,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/examples/AS5600_resetCumulativeCounter/AS5600_resetCumulativeCounter.ino b/examples/AS5600_resetCumulativeCounter/AS5600_resetCumulativeCounter.ino index b5f2543..eeb2f6e 100644 --- a/examples/AS5600_resetCumulativeCounter/AS5600_resetCumulativeCounter.ino +++ b/examples/AS5600_resetCumulativeCounter/AS5600_resetCumulativeCounter.ino @@ -13,7 +13,13 @@ AS5600L as5600; // use default Wire void setup() { Serial.begin(115200); - as5600.begin(14, 15); // ESP32 + Serial.println(__FILE__); + Serial.print("AS5600_LIB_VERSION: "); + Serial.println(AS5600_LIB_VERSION); + + Wire.begin(14, 15); // ESP32 + + as5600.begin(): as5600.setAddress(0x40); // AS5600L has address as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. diff --git a/library.json b/library.json index 7710922..8adefd4 100644 --- a/library.json +++ b/library.json @@ -15,7 +15,7 @@ "type": "git", "url": "https://github.com/RobTillaart/AS5600.git" }, - "version": "0.4.1", + "version": "0.5.0", "license": "MIT", "frameworks": "*", "platforms": "*", diff --git a/library.properties b/library.properties index 4b88ad9..7328f24 100644 --- a/library.properties +++ b/library.properties @@ -1,10 +1,10 @@ name=AS5600 -version=0.4.1 +version=0.5.0 author=Rob Tillaart maintainer=Rob Tillaart sentence=Arduino library for AS5600 and AS5600L magnetic rotation meter. paragraph= -category=Data Processing +category=Sensors url=https://github.com/RobTillaart/AS5600 architectures=* includes=AS5600.h From 57c74c576cb172b423c448e3e8840a58a9fcf2f5 Mon Sep 17 00:00:00 2001 From: Rob Tillaart Date: Thu, 7 Dec 2023 14:07:07 +0100 Subject: [PATCH 2/6] fix build --- CHANGELOG.md | 1 + .../AS5600_demo_RP2040/AS5600_demo_RP2040.ino | 2 +- .../AS5600_resetCumulativeCounter.ino | 2 +- test/unit_test_001.cpp | 16 +++++++++++++++- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd95278..a26d1d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - refactor API, begin() - update readme.md - update examples +- add examples - patch library.properties => category=Sensors ---- diff --git a/examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino b/examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino index bc13a94..49ac9dc 100644 --- a/examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino +++ b/examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino @@ -19,7 +19,7 @@ void setup() Wire.setSDA(14); Wire.setSCL(15); - Wire.begin() + Wire.begin(); as5600.begin(4); // set direction pin. as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. diff --git a/examples/AS5600_resetCumulativeCounter/AS5600_resetCumulativeCounter.ino b/examples/AS5600_resetCumulativeCounter/AS5600_resetCumulativeCounter.ino index eeb2f6e..da3823d 100644 --- a/examples/AS5600_resetCumulativeCounter/AS5600_resetCumulativeCounter.ino +++ b/examples/AS5600_resetCumulativeCounter/AS5600_resetCumulativeCounter.ino @@ -19,7 +19,7 @@ void setup() Wire.begin(14, 15); // ESP32 - as5600.begin(): + as5600.begin(); as5600.setAddress(0x40); // AS5600L has address as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. diff --git a/test/unit_test_001.cpp b/test/unit_test_001.cpp index 913b963..26bb999 100644 --- a/test/unit_test_001.cpp +++ b/test/unit_test_001.cpp @@ -111,6 +111,9 @@ unittest(test_constants_configuration) unittest(test_constructor) { AS5600 as5600; + + Wire.begin(); + as5600.begin(4); assertTrue(as5600.isConnected()); // keep CI happy @@ -123,6 +126,9 @@ unittest(test_constructor) unittest(test_address) { AS5600 as5600; + + Wire.begin(); + as5600.begin(4); assertEqual(0x36, as5600.getAddress()); @@ -140,6 +146,8 @@ unittest(test_hardware_direction) { AS5600 as5600; + Wire.begin(); + as5600.begin(4); assertEqual(AS5600_CLOCK_WISE, as5600.getDirection()); @@ -158,6 +166,8 @@ unittest(test_software_direction) { AS5600 as5600; + Wire.begin(); + as5600.begin(255); assertEqual(AS5600_CLOCK_WISE, as5600.getDirection()); @@ -176,6 +186,8 @@ unittest(test_offset) { AS5600 as5600; + Wire.begin(); + as5600.begin(); for (int of = 0; of < 360; of += 40) @@ -202,6 +214,8 @@ unittest(test_failing_set_commands) { AS5600 as5600; + Wire.begin(); + as5600.begin(); assertFalse(as5600.setZPosition(4096)); @@ -219,7 +233,7 @@ unittest(test_failing_set_commands) } -// FOR REMAINING ONE NEED A STUB +// FOR REMAINING ONE NEED A STUB unittest_main() From d5509c76f0825b83e77e8acfa5823c0aab038279 Mon Sep 17 00:00:00 2001 From: Rob Tillaart Date: Thu, 7 Dec 2023 14:50:02 +0100 Subject: [PATCH 3/6] fix STM example --- examples/AS5600_demo_STM32/AS5600_demo_STM32.ino | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/AS5600_demo_STM32/AS5600_demo_STM32.ino b/examples/AS5600_demo_STM32/AS5600_demo_STM32.ino index bc13a94..999860e 100644 --- a/examples/AS5600_demo_STM32/AS5600_demo_STM32.ino +++ b/examples/AS5600_demo_STM32/AS5600_demo_STM32.ino @@ -2,7 +2,8 @@ // FILE: AS5600_demo.ino // AUTHOR: Rob Tillaart // PURPOSE: demo - +// +// tested compilation with Nucleo-64 #include "AS5600.h" #include "Wire.h" @@ -19,7 +20,7 @@ void setup() Wire.setSDA(14); Wire.setSCL(15); - Wire.begin() + Wire.begin(); as5600.begin(4); // set direction pin. as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. From 3a8bf1321e2f874a7609385b0143a10a8b1179b2 Mon Sep 17 00:00:00 2001 From: Rob Tillaart Date: Thu, 7 Dec 2023 19:23:47 +0100 Subject: [PATCH 4/6] minor fixes --- AS5600.h | 3 ++- README.md | 16 +++++++++++----- .../AS5600_outmode_pwm_interrupt.ino | 1 - 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/AS5600.h b/AS5600.h index 7800e65..5d9fbcb 100644 --- a/AS5600.h +++ b/AS5600.h @@ -92,7 +92,8 @@ class AS5600 bool begin(uint8_t directionPin = AS5600_SW_DIRECTION_PIN); bool isConnected(); - // address = 0x36 for AS5600, 0x40 for AS5600L + // address = fixed 0x36 for AS5600, + // = default 0x40 for AS5600L uint8_t getAddress(); diff --git a/README.md b/README.md index df47876..7349054 100644 --- a/README.md +++ b/README.md @@ -168,11 +168,17 @@ When polling the AS5600 with an ESP32 to measure RPM an issue has been reported. See https://github.com/RobTillaart/AS5600/issues/28 The problem is that the ESP32 can be blocking for up to one second if there is a -problem in the connection with the sensor. Using **setWireTimeout()** does not seem -to solve the problem (2023-01-31). In the issue the goal was to measure the turns -of a rotating device at around 3800 RPM. To do this one need roughly 1 angle measurement -per 5 milliseconds. -which +problem in the connection with the sensor. +Using **setWireTimeout()** does not seem to solve the problem (2023-01-31). +In the issue the goal was to measure the turns of a rotating device at around 3800 RPM. + +3800 RPM == 64 rounds / second. + +To measure speed one need at least 3 angle measurements per rotation. +This results in at least 192 measurements per second which is about 1 per 5 milliseconds. + +Given that the ESP32 can block for a second, it can not be guaranteed to be up to date. +Not for speed, but also not for total number of rotations. ## Interface diff --git a/examples/AS5600_outmode_pwm_interrupt/AS5600_outmode_pwm_interrupt.ino b/examples/AS5600_outmode_pwm_interrupt/AS5600_outmode_pwm_interrupt.ino index 7838ab3..dca2142 100644 --- a/examples/AS5600_outmode_pwm_interrupt/AS5600_outmode_pwm_interrupt.ino +++ b/examples/AS5600_outmode_pwm_interrupt/AS5600_outmode_pwm_interrupt.ino @@ -2,7 +2,6 @@ // FILE: AS5600_outmode_pwm_interrupt.ino // AUTHOR: Rob Tillaart // PURPOSE: demo -// DATE: 2022-05-28 #include "AS5600.h" From 80d93faad20d67bde3ff954986ab53c70f736f22 Mon Sep 17 00:00:00 2001 From: Rob Tillaart Date: Thu, 7 Dec 2023 20:58:25 +0100 Subject: [PATCH 5/6] add example --- .../AS5600_plus_AS5600L.ino | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino diff --git a/examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino b/examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino new file mode 100644 index 0000000..70a012c --- /dev/null +++ b/examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino @@ -0,0 +1,99 @@ +// FILE: AS5600_plus_AS5600L.ino +// AUTHOR: laptophead +// PURPOSE: showing working of a AS5600 and AS5600L side by side +// URL: https://github.com/RobTillaart/AS5600 + + +#include "AS5600.h" +#include "Wire.h" + +AS5600 as5600_R; // uses default Wire +AS5600L as5600_L; // uses default Wire + +int Raw_R; +int Raw_Prev; + +float Deg_R, Deg_L; +float Deg_Prev_R, Deg_Prev_L; + +static uint32_t lastTime = 0; + + +void setup() +{ + Serial.begin(230400); + Serial.println(__FILE__); + Serial.print("AS5600_LIB_VERSION: "); + Serial.println(AS5600_LIB_VERSION); + + Wire.begin(); + + // as5600_L.setAddress(0x40); // AS5600L only + as5600_L.begin(15); // set direction pin. + as5600_L.setDirection(AS5600_CLOCK_WISE); // + delay(1000); + + as5600_R.begin(14); // set direction pin. + as5600_R.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. + + delay(1000); + Serial.print ("Address For AS5600 R "); + Serial.println(as5600_R.getAddress()); + Serial.print ("Address For AS5600 L "); + Serial.println(as5600_L.getAddress()); + + int b = as5600_R.isConnected(); + + Serial.print("Connect_R: "); + Serial.println(as5600_R.isConnected() ? "true" : "false"); + + Serial.print("Connect device LEFT: "); + Serial.println(as5600_L.isConnected() ? "true" : "false"); + + delay(1000); + as5600_R.resetPosition(); + as5600_L.resetPosition(); +} + + +void loop() +{ + Deg_R = convertRawAngleToDegrees(as5600_R.getCumulativePosition()); + Deg_L = convertRawAngleToDegrees(as5600_L.getCumulativePosition()); + // update every 100 ms + // should be enough up to ~200 RPM + if (millis() - lastTime >= 100 and Deg_R != Deg_Prev_R) + { + lastTime = millis(); + + Serial.println("REV R: " + String(as5600_R.getRevolutions())); + Serial.println("REV L: " + String(as5600_L.getRevolutions())); + Serial.println("DEG R= " + String(Deg_R, 0) + "°" ); + Serial.println("DEG L= " + String(Deg_L, 0) + "°" ); + Deg_Prev_R = Deg_R; + } + + // just to show how reset can be used + if (as5600_R.getRevolutions() >= 1 ) + { + as5600_R.resetPosition(); + + if ( as5600_R.getRevolutions() <= -1 ) + { + as5600_R.resetPosition(); + } + } +} + + +float convertRawAngleToDegrees(uint32_t newAngle) +{ + /* Raw data reports 0 - 4095 segments, which is 0.087890625 of a degree */ + float retVal = newAngle * 0.087890625; + retVal = round(retVal); + // retVal=retVal/10; + return retVal; +} + + +// -- END OF FILE -- From aaf1d083cdfdffade6037e31bfeaab2a85df5020 Mon Sep 17 00:00:00 2001 From: Rob Tillaart Date: Fri, 8 Dec 2023 10:29:07 +0100 Subject: [PATCH 6/6] add example --- examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino b/examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino index 70a012c..c7ba1f9 100644 --- a/examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino +++ b/examples/AS5600_plus_AS5600L/AS5600_plus_AS5600L.ino @@ -2,6 +2,7 @@ // AUTHOR: laptophead // PURPOSE: showing working of a AS5600 and AS5600L side by side // URL: https://github.com/RobTillaart/AS5600 +// URL: https://github.com/RobTillaart/AS5600/issues/48 #include "AS5600.h" @@ -42,8 +43,6 @@ void setup() Serial.print ("Address For AS5600 L "); Serial.println(as5600_L.getAddress()); - int b = as5600_R.isConnected(); - Serial.print("Connect_R: "); Serial.println(as5600_R.isConnected() ? "true" : "false");