0.1.6 Radar

This commit is contained in:
rob tillaart 2021-12-27 20:23:58 +01:00
parent 84c364e1e0
commit b0789477d2
11 changed files with 82 additions and 55 deletions

View File

@ -2,6 +2,10 @@ compile:
# Choosing to run compilation tests on 2 different Arduino platforms # Choosing to run compilation tests on 2 different Arduino platforms
platforms: platforms:
- uno - uno
- leonardo # - due
- due # - zero
- zero # - leonardo
- m4
- esp32
# - esp8266
# - mega2560

View File

@ -4,10 +4,14 @@ name: Arduino CI
on: [push, pull_request] on: [push, pull_request]
jobs: jobs:
arduino_ci: runTest:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: Arduino-CI/action@master - uses: ruby/setup-ruby@v1
# Arduino-CI/action@v0.1.1 with:
ruby-version: 2.6
- run: |
gem install arduino_ci
arduino_ci.rb

View File

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2013-2021 Rob Tillaart Copyright (c) 2013-2022 Rob Tillaart
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -1,7 +1,6 @@
// //
// FILE: radarDemo.ino // FILE: radarDemo.ino
// AUTHOR: Rob Tillaart // AUTHOR: Rob Tillaart
// VERSION: 0.1.1
// PURPOSE: demo of the radar library // PURPOSE: demo of the radar library
// DATE: 29-03-2015 // DATE: 29-03-2015
// URL: https://github.com/RobTillaart/RADAR // URL: https://github.com/RobTillaart/RADAR

View File

@ -1,7 +1,7 @@
# Syntax Coloring Map for runningAngle # Syntax Colouring Map for runningAngle
# Datatypes (KEYWORD1) # Data types (KEYWORD1)
runningAngle KEYWORD1 runningAngle KEYWORD1
AngleType KEYWORD1 AngleType KEYWORD1

View File

@ -1,6 +1,6 @@
{ {
"name": "RADAR", "name": "RADAR",
"keywords": "Pan,tilt,radar,ping", "keywords": "Pan,tilt,radar,ping,position",
"description": "Arduino library for a pan tilt radar. Experimental", "description": "Arduino library for a pan tilt radar. Experimental",
"authors": "authors":
[ [
@ -15,8 +15,9 @@
"type": "git", "type": "git",
"url": "https://github.com/RobTillaart/RADAR" "url": "https://github.com/RobTillaart/RADAR"
}, },
"version": "0.1.5", "version": "0.1.6",
"license": "MIT", "license": "MIT",
"frameworks": "arduino", "frameworks": "arduino",
"platforms": "*" "platforms": "*",
"headers": "radar.h"
} }

View File

@ -1,5 +1,5 @@
name=RADAR name=RADAR
version=0.1.5 version=0.1.6
author=Rob Tillaart <rob.tillaart@gmail.com> author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com> maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Arduino library for a pan tilt radar. sentence=Arduino library for a pan tilt radar.

View File

@ -1,16 +1,18 @@
// //
// FILE: radar.cpp // FILE: radar.cpp
// AUTHOR: Rob Tillaart // AUTHOR: Rob Tillaart
// VERSION: 0.1.5 // VERSION: 0.1.6
// PURPOSE: Arduino library for a pan tilt radar. // PURPOSE: Arduino library for a pan tilt radar.
// URL: https://github.com/RobTillaart/RADAR // URL: https://github.com/RobTillaart/RADAR
// //
// HISTORY
// 0.1.00 2013-09-30 (?) outline // 0.1.00 2013-09-30 (?) outline
// 0.1.01 2015-03-06 updated some code, still not functional // 0.1.01 2015-03-06 updated some code, still not functional
// 0.1.2 2017-07-16 refactor & review // 0.1.2 2017-07-16 refactor & review
// 0.1.3 2020-07-06 refactor, clean up and some documentation // 0.1.3 2020-07-06 refactor, clean up and some documentation
// 0.1.4 2021-01-07 arduino-ci, unit-test // 0.1.4 2021-01-07 Arduino-CI, unit-test
// 0.1.5 2021-05-27 fix arduino-lint // 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" #include "radar.h"
@ -60,7 +62,7 @@ int16_t RADAR::getPan()
uint32_t movement = round(duration * _panPerSecond * 0.001); uint32_t movement = round(duration * _panPerSecond * 0.001);
if ( abs(_pan - _prevPan) <= movement) return _pan; 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; if (_pan > _prevPan) return _prevPan + movement;
return _prevPan - movement; return _prevPan - movement;
} }
@ -87,8 +89,8 @@ int16_t RADAR::getTilt()
uint32_t movement = round(duration * _tiltPerSecond * 0.001); uint32_t movement = round(duration * _tiltPerSecond * 0.001);
if (abs(_tilt - _prevTilt) <= movement) return _tilt; if (abs(_tilt - _prevTilt) <= movement) return _tilt;
// estimate TILT by linear interpolation // estimate TILT by linear interpolation
if (_tilt > _prevTilt) return _prevTilt + movement; if (_tilt > _prevTilt) return _prevTilt + movement;
return _prevTilt - movement; return _prevTilt - movement;
} }
@ -100,29 +102,29 @@ void RADAR::gotoPanTilt(const int16_t pan, const int16_t tilt)
} }
bool RADAR::setPosition(const uint8_t n, const int16_t pan, const int16_t tilt) bool RADAR::setPosition(const uint8_t index, const int16_t pan, const int16_t tilt)
{ {
if (n >= RADAR_POSITIONS) return false; if (index >= RADAR_POSITIONS) return false;
_panArray[n] = pan; _panArray[index] = pan;
_tiltArray[n] = tilt; _tiltArray[index] = tilt;
return true; return true;
} }
bool RADAR::getPosition(const uint8_t n, int16_t & pan, int16_t & tilt) bool RADAR::getPosition(const uint8_t index, int16_t & pan, int16_t & tilt)
{ {
if (n >= RADAR_POSITIONS) return false; if (index >= RADAR_POSITIONS) return false;
pan = _panArray[n]; pan = _panArray[index];
tilt = _tiltArray[n]; tilt = _tiltArray[index];
return true; return true;
} }
bool RADAR::gotoPosition(const uint8_t n) bool RADAR::gotoPosition(const uint8_t index)
{ {
if (n >= RADAR_POSITIONS) return false; if (index >= RADAR_POSITIONS) return false;
gotoPan(_panArray[n]); gotoPan(_panArray[index]);
gotoTilt(_tiltArray[n]); gotoTilt(_tiltArray[index]);
return true; return true;
} }
@ -157,7 +159,8 @@ uint32_t RADAR::ping(const int16_t pan, const int16_t tilt)
} }
// PRIVATE // PRIVATE
// TODO distill private parts (getPan and getTilt share a lot // TODO distil private parts (getPan and getTilt share a lot
// -- END OF FILE -- // -- END OF FILE --

View File

@ -2,7 +2,7 @@
// //
// FILE: radar.h // FILE: radar.h
// AUTHOR: Rob Tillaart // AUTHOR: Rob Tillaart
// VERSION: see RADAR_LIB_VERSION // VERSION: 0.1.6
// PURPOSE: Arduino library for a pan tilt radar. // PURPOSE: Arduino library for a pan tilt radar.
// URL: https://github.com/RobTillaart/RADAR // URL: https://github.com/RobTillaart/RADAR
@ -10,7 +10,7 @@
#include "Arduino.h" #include "Arduino.h"
#define RADAR_LIB_VERSION (F("0.1.5")) #define RADAR_LIB_VERSION (F("0.1.6"))
// TODO # positions in a begin() or constructor? // TODO # positions in a begin() or constructor?
@ -39,9 +39,9 @@ public:
// memory positions - store / recall? // memory positions - store / recall?
uint8_t getMaxPositions() { return RADAR_POSITIONS; }; uint8_t getMaxPositions() { return RADAR_POSITIONS; };
bool setPosition(const uint8_t idx, const int16_t pan, const int16_t tilt); bool setPosition(const uint8_t index, const int16_t pan, const int16_t tilt);
bool getPosition(const uint8_t idx, int16_t & pan, int16_t & tilt); bool getPosition(const uint8_t index, int16_t & pan, int16_t & tilt);
bool gotoPosition(const uint8_t idx); bool gotoPosition(const uint8_t index);
void setHomePosition(const int16_t pan, const int16_t tilt); void setHomePosition(const int16_t pan, const int16_t tilt);
void gotoHomePosition(); void gotoHomePosition();
@ -53,21 +53,21 @@ public:
// TODO NIY // TODO NIY
uint32_t ping(); uint32_t ping();
uint32_t ping(const int16_t pan, const int16_t tilt); uint32_t ping(const int16_t pan, const int16_t tilt);
private: private:
int16_t _pinPan; int16_t _pinPan;
int16_t _pinTilt; int16_t _pinTilt;
int16_t _prevPan; int16_t _prevPan;
int16_t _pan; int16_t _pan;
int16_t _homePan; int16_t _homePan;
uint32_t _lastPanTime; uint32_t _lastPanTime;
int16_t _prevTilt; int16_t _prevTilt;
int16_t _tilt; int16_t _tilt;
int16_t _homeTilt; int16_t _homeTilt;
uint32_t _lastTiltTime; uint32_t _lastTiltTime;
int16_t _panArray[RADAR_POSITIONS]; int16_t _panArray[RADAR_POSITIONS];
int16_t _tiltArray[RADAR_POSITIONS]; int16_t _tiltArray[RADAR_POSITIONS];

View File

@ -1,8 +1,11 @@
[![Arduino CI](https://github.com/RobTillaart/Radar/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci) [![Arduino CI](https://github.com/RobTillaart/Radar/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
[![Arduino-lint](https://github.com/RobTillaart/RADAR/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/RADAR/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/RADAR/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/RADAR/actions/workflows/jsoncheck.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/Radar/blob/master/LICENSE) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/Radar/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/Radar.svg?maxAge=3600)](https://github.com/RobTillaart/Radar/releases) [![GitHub release](https://img.shields.io/github/release/RobTillaart/Radar.svg?maxAge=3600)](https://github.com/RobTillaart/Radar/releases)
# Radar # Radar
Arduino library for a pan tilt radar based upon 2 servo's. Arduino library for a pan tilt radar based upon 2 servo's.
@ -11,22 +14,25 @@ Arduino library for a pan tilt radar based upon 2 servo's.
## Warning ## Warning
**WARNING: not extensively tested** **WARNING: not extensively tested**
There are stil 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. The example code is now working to show the concept.
## Description ## Description
radar is a concept library not elaborated yet that implements a Ping))) based Radar Radar is a concept library (not elaborated) that implements a Ping))) based Radar
with the use of two pan/tilt servo's. It was written after a question on the forum but with the use of two pan and tilt servo's.
never finished or tested it. Still, it has some interesting concepts wrt determine It was written after a question on the Arduino forum but never finished or tested it.
the position of pan/tilt while in progress. Still, it has some interesting concepts with respect to how to determine the position
of pan/tilt while the movements are in progress.
The idea is that one knows how fast the pan and tilt servos are working in degrees per second. The idea is that one knows how fast the pan and tilt servos are working in degrees per second.
From that number and the start moment one can determine approximately its position. From that number and the start moment one can determine approximately its position.
Given its position while moving is interesting for radar purposes as one can determine e.g. Given its position while moving is interesting for radar purposes as one can determine e.g.
in which direction a ping is given and which distance belongs to which pair of angles. in which direction a ping is given and therefore which distance belongs to which pair of angles.
Note: no active development
## Interface ## Interface
@ -57,9 +63,9 @@ Note: no valid range checking or negative value check.
### memory positions - store / recall? ### memory positions - store / recall?
- **uint8_t getMaxPositions()** - **uint8_t getMaxPositions()**
- **bool setPosition(const uint8_t idx, const int16_t pan, const int16_t tilt)** - **bool setPosition(const uint8_t index, const int16_t pan, const int16_t tilt)**
- **bool getPosition(const uint8_t idx, int16_t & pan, int16_t & tilt)** - **bool getPosition(const uint8_t index, int16_t & pan, int16_t & tilt)**
- **bool gotoPosition(const uint8_t idx)** - **bool gotoPosition(const uint8_t index)**
- **void setHomePosition(const int16_t pan, const int16_t tilt)** - **void setHomePosition(const int16_t pan, const int16_t tilt)**
- **void gotoHomePosition()** - **void gotoHomePosition()**
@ -76,3 +82,14 @@ Note: no valid range checking or negative value check.
See examples See examples
## Future
- improve documentation.
- test more (e.g. continuous servo versus 180 servo).
- add sketches.
- remember lastPing (angle pan tilt).
- check TODO's in code.
- single servo radar (Pan only) as derived class.
- dynamic allocation of position arrays.

View File

@ -33,11 +33,12 @@
#include <ArduinoUnitTests.h> #include <ArduinoUnitTests.h>
#include "radar.h" #include "radar.h"
unittest_setup() unittest_setup()
{ {
fprintf(stderr, "RADAR_LIB_VERSION: %s\n", (char *) RADAR_LIB_VERSION);
} }
@ -51,7 +52,7 @@ unittest(test_new_operator)
assertEqualINF(exp(800)); assertEqualINF(exp(800));
assertEqualINF(0.0/0.0); assertEqualINF(0.0/0.0);
assertEqualINF(42); assertEqualINF(42);
assertEqualNAN(INFINITY - INFINITY); assertEqualNAN(INFINITY - INFINITY);
assertEqualNAN(0.0/0.0); assertEqualNAN(0.0/0.0);
assertEqualNAN(42); assertEqualNAN(42);
@ -61,8 +62,6 @@ unittest(test_new_operator)
unittest(test_constructor) unittest(test_constructor)
{ {
fprintf(stderr, "VERSION: %s\n", RADAR_LIB_VERSION);
RADAR radar(10, 11); RADAR radar(10, 11);
assertEqual(10, radar.getMaxPositions()); assertEqual(10, radar.getMaxPositions());