0.1.1 AngleConvertor

This commit is contained in:
rob tillaart 2023-01-31 16:28:11 +01:00
parent 1b628ab9bf
commit c18b6e9995
12 changed files with 126 additions and 20 deletions

View File

@ -6,7 +6,7 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: arduino/arduino-lint-action@v1
with:
library-manager: update

View File

@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: 2.6

View File

@ -10,7 +10,7 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: json-syntax-check
uses: limitusus/json-syntax-check@v1
with:

View File

@ -2,7 +2,7 @@
//
// FILE: AngleConvertor.h
// AUTHOR: Rob Tillaart
// VERSION: 0.1.0
// VERSION: 0.1.1
// DATE: 2022-12-01
// PURPOSE: angle conversion class
// URL: https://github.com/RobTillaart/AngleConvertor
@ -11,7 +11,7 @@
#include "Arduino.h"
#define ANGLECONVERTOR_LIB_VERSION (F("0.1.0"))
#define ANGLECONVERTOR_LIB_VERSION (F("0.1.1"))
/////////////////////////////////////////////////////////////
@ -34,7 +34,7 @@ public:
void setHexacontade(float value = 0) { _v = value * (M_PI / 30.0); };
void setHourAngle(float value = 0) { _v = value * (M_PI / 12.0); };
void setMilliTurn(float value = 0) { _v = value * (M_PI / 500.0); };
void setMinuteTime(float value = 0) { _v = value * (M_PI / 720.0); };
void setOctant(float value = 0) { _v = value * (M_PI / 4.0); };
void setPechus(float value = 0) { _v = value * (M_PI / 90.0); }; // assumes 2°
@ -58,7 +58,7 @@ public:
float getHexacontade() { return _v * (30.0 / M_PI); };
float getHourAngle() { return _v * (12.0 / M_PI); };
float getMilliTurn() { return _v * (500.0 / M_PI); };
float getMinuteTime() { return _v * (720.0 / M_PI); };
float getOctant() { return _v * (4.0 / M_PI); };
float getPechus() { return _v * (90.0 / M_PI); }; // assumes 2°
@ -71,8 +71,24 @@ public:
float getTurn() { return _v * (0.5 / M_PI); };
// WINDROSE
//
char * windrose()
{
return windrose(_v * (180.0 / M_PI));
}
char * windrose(float degrees)
{
uint8_t idx = (degrees + 11.25) * 0.044444444444444; // 1.0 / 22.5
return _wr2[idx];
}
private:
float _v; // internal use radians.
float _v; // internal use radians.
char _wr2[17][4] = {
"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW", "N"};
};

View File

@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## [0.1.1] - 2023-01-23
- update GitHub actions
- update license 2023
- update readme
- add windrose() (2x)
- add example
## [0.1.0] - 2022-12-01
- initial version

View File

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

View File

@ -43,7 +43,9 @@ AngleConvertor is an Arduino class to convert an angle from and to less known fo
| Turn | 1 |
#### Related to
#### Related
- https://github.com/RobTillaart/AngleConvertor
- https://github.com/RobTillaart/AverageAngle
- https://github.com/RobTillaart/Angle
- https://github.com/RobTillaart/runningAngle
@ -51,12 +53,17 @@ AngleConvertor is an Arduino class to convert an angle from and to less known fo
## Interface
```cpp
#include "AngleConvertor.h"
```
#### Constructor
- **AngleConvertor()** create an AngleConvertor, default value is zero.
#### setters
#### Setters
- **void setDegrees(float value = 0)**
- **void setRadians(float value = 0)**
@ -80,7 +87,7 @@ AngleConvertor is an Arduino class to convert an angle from and to less known fo
- **void setTurn(float value = 0)**
#### getters
#### Getters
- **float getDegrees()**
- **float getRadians()**
@ -103,6 +110,18 @@ AngleConvertor is an Arduino class to convert an angle from and to less known fo
- **float getSign()**
- **float getTurn()**
#### WindRose
From: https://forum.arduino.cc/t/function-optimization-wind-direction-open-for-ideas/92493/10
Converts an angle in degrees to a char array like "WSW".
0 and 360 degrees is considered North.
- **char \* windrose()** converter version.
- **char \* windrose(float degrees)** stand alone version.
degrees should be between 0 and 360, as function does no normalization.
## Operation
@ -111,16 +130,17 @@ See examples.
## Future
#### must
#### Must
- improve documentation
#### should
#### Should
#### could
#### Could
- add dedicated functions == faster (on request only).
- add more conversions
- integrate with **Angle class** ?
- printing can be a lot of work

View File

@ -0,0 +1,55 @@
//
// FILE: AngleConverter_windrose.ino
// AUTHOR: Rob Tillaart
// PURPOSE: demo sketch to test angleConvertor class
// DATE: 2022-12-01
// URL: https://github.com/RobTillaart/AngleConvertor
//
#include "AngleConvertor.h"
AngleConvertor conv;
uint32_t start, stop;
void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("lib version: ");
Serial.println(ANGLECONVERTOR_LIB_VERSION);
Serial.println();
for (int angle = 0; angle <= 360; angle += 5)
{
Serial.print(angle);
Serial.print("\t");
Serial.print(conv.windrose(angle));
Serial.println();
}
Serial.println();
delay(100);
start = micros();
conv.setDegrees(127.876);
char * p = conv.windrose();
stop = micros();
Serial.print("WINDROSE TIME: \t");
Serial.println(stop - start);
Serial.print("WINDROSE DIR: \t");
Serial.println(p);
Serial.println("\nDone...");
}
void loop()
{
}
// -- END OF FILE --

View File

@ -53,6 +53,10 @@ getSextant KEYWORD2
getSign KEYWORD2
getTurn KEYWORD2
# Windrose
windrose KEYWORD2
# Constants (LITERAL1)
ANGLECONVERTOR_LIB_VERSION LITERAL1

View File

@ -1,6 +1,6 @@
{
"name": "AngleConvertor",
"keywords": "Angle,convert,degrees,radians",
"keywords": "Angle,convert,degrees,radians,windrose",
"description": "Library to convert between different less known angle formats.",
"authors":
[
@ -15,7 +15,7 @@
"type": "git",
"url": "https://github.com/RobTillaart/AngleConvertor.git"
},
"version": "0.1.0",
"version": "0.1.1",
"license": "MIT",
"frameworks": "arduino",
"platforms": "*",

View File

@ -1,9 +1,9 @@
name=AngleConvertor
version=0.1.0
version=0.1.1
author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Library to convert between different less known angle formats.
paragraph=
paragraph=degrees,radians,gradians,windrose
category=Data Processing
url=https://github.com/RobTillaart/AngleConvertor
architectures=*

View File

@ -42,6 +42,7 @@ unittest_setup()
fprintf(stderr, "ANGLECONVERTOR_LIB_VERSION: %s\n", (char *) ANGLECONVERTOR_LIB_VERSION);
}
unittest_teardown()
{
}
@ -115,4 +116,6 @@ unittest(test_conversions)
unittest_main()
// -- END OF FILE --