diff --git a/libraries/Radar/.arduino-ci.yml b/libraries/Radar/.arduino-ci.yml index cecf5850..e189eb67 100644 --- a/libraries/Radar/.arduino-ci.yml +++ b/libraries/Radar/.arduino-ci.yml @@ -1,5 +1,21 @@ +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 + # selected only those that work platforms: - uno # - due @@ -7,5 +23,6 @@ compile: # - leonardo - m4 - esp32 - # - esp8266 + - esp8266 # - mega2560 + - rpipico diff --git a/libraries/Radar/CHANGELOG.md b/libraries/Radar/CHANGELOG.md new file mode 100644 index 00000000..634d67ba --- /dev/null +++ b/libraries/Radar/CHANGELOG.md @@ -0,0 +1,42 @@ +# Change Log Radar + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + + +## [0.1.7] - 2022-11-23 +- add changelog.md +- add RP2040 to build-CI +- fix keywords.txt +- minor edit readme.md +- minor edit unit test + + +## [0.1.6] - 2021-12-27 +- update library.json +- update readme.md +- update license +- minor edits + +## [0.1.5] - 2021-05-27 +- fix Arduino-lint + +## [0.1.4] - 2021-01-07 +- Arduino-CI, unit-test + +## [0.1.3] - 2020-07-06 +- refactor +- clean up +- documentation + +## [0.1.2] - 2017-07-16 +- refactor & review + +## [0.1.01] - 2015-03-06 +- updated some code, still not functional + +## [0.1.00] - 2013-09-30 (oldest version found ?) +- outline the idea + diff --git a/libraries/Radar/keywords.txt b/libraries/Radar/keywords.txt index f73c863b..3b464d1b 100644 --- a/libraries/Radar/keywords.txt +++ b/libraries/Radar/keywords.txt @@ -1,9 +1,8 @@ -# Syntax Colouring Map for runningAngle +# Syntax Colouring Map for RADAR # Data types (KEYWORD1) -runningAngle KEYWORD1 -AngleType KEYWORD1 +RADAR KEYWORD1 # Methods and Functions (KEYWORD2) diff --git a/libraries/Radar/library.json b/libraries/Radar/library.json index ebf05f2f..bb688ab5 100644 --- a/libraries/Radar/library.json +++ b/libraries/Radar/library.json @@ -15,7 +15,7 @@ "type": "git", "url": "https://github.com/RobTillaart/RADAR" }, - "version": "0.1.6", + "version": "0.1.7", "license": "MIT", "frameworks": "arduino", "platforms": "*", diff --git a/libraries/Radar/library.properties b/libraries/Radar/library.properties index 376093d4..2eb96229 100644 --- a/libraries/Radar/library.properties +++ b/libraries/Radar/library.properties @@ -1,5 +1,5 @@ name=RADAR -version=0.1.6 +version=0.1.7 author=Rob Tillaart maintainer=Rob Tillaart sentence=Arduino library for a pan tilt radar. diff --git a/libraries/Radar/radar.cpp b/libraries/Radar/radar.cpp index ef043c39..70667f36 100644 --- a/libraries/Radar/radar.cpp +++ b/libraries/Radar/radar.cpp @@ -1,18 +1,10 @@ // // FILE: radar.cpp // AUTHOR: Rob Tillaart -// VERSION: 0.1.6 +// VERSION: 0.1.7 // PURPOSE: Arduino library for a pan tilt radar. // URL: https://github.com/RobTillaart/RADAR -// -// HISTORY -// 0.1.00 2013-09-30 (?) outline -// 0.1.01 2015-03-06 updated some code, still not functional -// 0.1.2 2017-07-16 refactor & review -// 0.1.3 2020-07-06 refactor, clean up and some documentation -// 0.1.4 2021-01-07 Arduino-CI, unit-test -// 0.1.5 2021-05-27 fix Arduino-lint -// 0.1.6 2021-12-27 Update library.json, readme, license, minor edits + #include "radar.h" @@ -20,7 +12,7 @@ //////////////////////////////////////////////////////////// // -// CONSTRUCTOR +// CONSTRUCTOR // RADAR::RADAR(const uint8_t pinPan, const uint8_t pinTilt) { @@ -41,7 +33,10 @@ RADAR::RADAR(const uint8_t pinPan, const uint8_t pinTilt) } -// PUBLIC +//////////////////////////////////////////////////////////// +// +// PUBLIC +// void RADAR::gotoPan(const int16_t pan) { if (pan == _pan) return; @@ -54,15 +49,15 @@ void RADAR::gotoPan(const int16_t pan) int16_t RADAR::getPan() { - // ESTIMATE current position on time it takes to go from previous to new + // ESTIMATE current position on time it takes to go from previous to new if (_pan == _prevPan) return _pan; - // if (enough time passed to move to new position) return new position + // if (enough time passed to move to new position) return new position uint32_t duration = millis() - _lastPanTime; uint32_t movement = round(duration * _panPerSecond * 0.001); if ( abs(_pan - _prevPan) <= movement) return _pan; - // else estimate PAN by linear interpolation + // else estimate PAN by linear interpolation if (_pan > _prevPan) return _prevPan + movement; return _prevPan - movement; } @@ -74,22 +69,22 @@ void RADAR::gotoTilt(const int16_t tilt) _prevTilt = getTilt(); _tilt = tilt; - analogWrite(_pinTilt, _tilt); // 0..180 + analogWrite(_pinTilt, _tilt); // 0..180 _lastTiltTime = millis(); } int16_t RADAR::getTilt() { - // ESTIMATE current position on time it takes to go from previous to new + // ESTIMATE current position on time it takes to go from previous to new if (_tilt == _prevTilt) return _tilt; - // if (enough time passed to move to new position) return new position + // if (enough time passed to move to new position) return new position uint32_t duration = millis() - _lastTiltTime; uint32_t movement = round(duration * _tiltPerSecond * 0.001); if (abs(_tilt - _prevTilt) <= movement) return _tilt; - // estimate TILT by linear interpolation + // estimate TILT by linear interpolation if (_tilt > _prevTilt) return _prevTilt + movement; return _prevTilt - movement; } @@ -145,7 +140,7 @@ void RADAR::gotoHomePosition() uint32_t RADAR::ping() { - // TODO ping code here - playground or teckel's improved ping))) + // TODO ping code here - playground or teckel's improved ping))) ? return 0; } @@ -157,10 +152,16 @@ uint32_t RADAR::ping(const int16_t pan, const int16_t tilt) while (isMoving()); return ping(); } -// PRIVATE + + +//////////////////////////////////////////////////////////// +// +// PRIVATE +// // TODO distil private parts (getPan and getTilt share a lot -// -- END OF FILE -- + +// -- END OF FILE -- diff --git a/libraries/Radar/radar.h b/libraries/Radar/radar.h index 46dbb48d..0f1c071c 100644 --- a/libraries/Radar/radar.h +++ b/libraries/Radar/radar.h @@ -2,7 +2,7 @@ // // FILE: radar.h // AUTHOR: Rob Tillaart -// VERSION: 0.1.6 +// VERSION: 0.1.7 // PURPOSE: Arduino library for a pan tilt radar. // URL: https://github.com/RobTillaart/RADAR @@ -10,10 +10,10 @@ #include "Arduino.h" -#define RADAR_LIB_VERSION (F("0.1.6")) +#define RADAR_LIB_VERSION (F("0.1.7")) -// TODO # positions in a begin() or constructor? +// TODO # positions in a begin() or constructor? #ifndef RADAR_POSITIONS #define RADAR_POSITIONS 10 #endif @@ -22,57 +22,63 @@ class RADAR { public: - RADAR(const uint8_t pinPan, const uint8_t pinTilt); + RADAR(const uint8_t pinPan, const uint8_t pinTilt); - // no valid range checking or negative value check. - void setPanPerSecond(float pps) { _panPerSecond = pps; }; - float getPanPerSecond() { return _panPerSecond; }; - void setTiltPerSecond(float tps) { _tiltPerSecond = tps; }; - float getTiltPerSecond() { return _tiltPerSecond; }; - // basic moves - void gotoPan(const int16_t pan); - int16_t getPan(); - void gotoTilt(const int16_t tilt); - int16_t getTilt(); - void gotoPanTilt(const int16_t pan, const int16_t tilt); + // no valid range checking or negative value check. + void setPanPerSecond(float pps) { _panPerSecond = pps; }; + float getPanPerSecond() { return _panPerSecond; }; + void setTiltPerSecond(float tps) { _tiltPerSecond = tps; }; + float getTiltPerSecond() { return _tiltPerSecond; }; - // memory positions - store / recall? - uint8_t getMaxPositions() { return RADAR_POSITIONS; }; - bool setPosition(const uint8_t index, const int16_t pan, const int16_t tilt); - bool getPosition(const uint8_t index, int16_t & pan, int16_t & tilt); - bool gotoPosition(const uint8_t index); - void setHomePosition(const int16_t pan, const int16_t tilt); - void gotoHomePosition(); - // feedback on positions. - bool isMoving() { return isPanMoving() || isTiltMoving(); }; - bool isPanMoving() { return getPan() != _pan; }; - bool isTiltMoving() { return getTilt() != _tilt; }; + // basic moves + void gotoPan(const int16_t pan); + int16_t getPan(); + void gotoTilt(const int16_t tilt); + int16_t getTilt(); + void gotoPanTilt(const int16_t pan, const int16_t tilt); + + + // memory positions - store / recall? + uint8_t getMaxPositions() { return RADAR_POSITIONS; }; + bool setPosition(const uint8_t index, const int16_t pan, const int16_t tilt); + bool getPosition(const uint8_t index, int16_t & pan, int16_t & tilt); + bool gotoPosition(const uint8_t index); + void setHomePosition(const int16_t pan, const int16_t tilt); + void gotoHomePosition(); + + + // feedback on positions. + bool isMoving() { return isPanMoving() || isTiltMoving(); }; + bool isPanMoving() { return getPan() != _pan; }; + bool isTiltMoving() { return getTilt() != _tilt; }; + + + // TODO NIY + uint32_t ping(); + uint32_t ping(const int16_t pan, const int16_t tilt); - // TODO NIY - uint32_t ping(); - uint32_t ping(const int16_t pan, const int16_t tilt); private: - int16_t _pinPan; - int16_t _pinTilt; + int16_t _pinPan; + int16_t _pinTilt; - int16_t _prevPan; - int16_t _pan; - int16_t _homePan; - uint32_t _lastPanTime; + int16_t _prevPan; + int16_t _pan; + int16_t _homePan; + uint32_t _lastPanTime; - int16_t _prevTilt; - int16_t _tilt; - int16_t _homeTilt; - uint32_t _lastTiltTime; + int16_t _prevTilt; + int16_t _tilt; + int16_t _homeTilt; + uint32_t _lastTiltTime; - int16_t _panArray[RADAR_POSITIONS]; - int16_t _tiltArray[RADAR_POSITIONS]; + int16_t _panArray[RADAR_POSITIONS]; + int16_t _tiltArray[RADAR_POSITIONS]; - float _panPerSecond = 15; - float _tiltPerSecond = 15; + float _panPerSecond = 15; + float _tiltPerSecond = 15; }; diff --git a/libraries/Radar/readme.md b/libraries/Radar/readme.md index ae34ca27..dfb195de 100644 --- a/libraries/Radar/readme.md +++ b/libraries/Radar/readme.md @@ -14,7 +14,7 @@ Arduino library for a pan tilt radar based upon 2 servo's. ## Warning **WARNING: not extensively tested** -There are still a lot of things to be tested. +There are still a lot of things to be tested. The example code is now working to show the concept. @@ -32,14 +32,11 @@ From that number and the start moment one can determine approximately its positi Given its position while moving is interesting for radar purposes as one can determine e.g. in which direction a ping is given and therefore which distance belongs to which pair of angles. -Note: no active development +Note: no active development. ## Interface -TODO elaborate - - ### Constructor and config - **RADAR(pan, tilt)** define pan / tilt pins of the radar. These should be PWM pins. @@ -60,7 +57,7 @@ Note: no valid range checking or negative value check. - **void gotoPanTilt(const int16_t pan, const int16_t tilt)** -### memory positions - store / recall? +### memory positions - store / recall - **uint8_t getMaxPositions()** - **bool setPosition(const uint8_t index, const int16_t pan, const int16_t tilt)** @@ -70,7 +67,7 @@ Note: no valid range checking or negative value check. - **void gotoHomePosition()** -### feedback on positions. +### feedback on position - **bool isMoving()** - **bool isPanMoving()** @@ -84,12 +81,21 @@ See examples ## Future +#### must +- build the thing when time permits! - improve documentation. + +#### should - test more (e.g. continuous servo versus 180 servo). - add sketches. - remember lastPing (angle pan tilt). - check TODO's in code. +- move code from .h to .cpp + + +#### could - single servo radar (Pan only) as derived class. - dynamic allocation of position arrays. +- store positions in EEPROM/FRAM for reboot? diff --git a/libraries/Radar/test/unit_test_001.cpp b/libraries/Radar/test/unit_test_001.cpp index ac4d4a92..fee27d43 100644 --- a/libraries/Radar/test/unit_test_001.cpp +++ b/libraries/Radar/test/unit_test_001.cpp @@ -46,18 +46,11 @@ unittest_teardown() { } -/* -unittest(test_new_operator) -{ - assertEqualINF(exp(800)); - assertEqualINF(0.0/0.0); - assertEqualINF(42); - assertEqualNAN(INFINITY - INFINITY); - assertEqualNAN(0.0/0.0); - assertEqualNAN(42); +unittest(test_constants) +{ + assertEqual(10, RADAR_POSITIONS); } -*/ unittest(test_constructor)