
Example of using "Canvas" form "Graphics" library to display 3D graphics.
Dependencies: BSP_DISCO_F746NG Graphics mbed
Diff: HardwareAccess/Angle.cpp
- Revision:
- 2:ef3093a7a43e
- Parent:
- 1:4a5e329e617b
--- a/HardwareAccess/Angle.cpp Thu Nov 10 15:38:50 2016 +0000 +++ b/HardwareAccess/Angle.cpp Fri Nov 11 15:30:07 2016 +0000 @@ -1,64 +1,80 @@ // // Angle.cpp - Calculate rotation angle. Reads the rotation angle from a potentiometer. // - #include "Angle.h" #define FULL_ANGLE_DEG 360.0f #ifdef STM32 - #include "mbed.h" // for AnalogIn on STM32 environment - AnalogIn angleRead(A0); - #define MAX_ANALOG_INPUT_VALUE 1024.f +#include "mbed.h" // for AnalogIn on STM32 environment +AnalogIn angleRead(A0); +#define MAX_ANALOG_INPUT_VALUE 1024.f #endif #ifdef ARDUINO - int anglePin = 0; - #define MAX_ANALOG_INPUT_VALUE 1024.f +int anglePin = 0; +#define MAX_ANALOG_INPUT_VALUE 1024.f #endif Angle::Angle() { - angle = 0; - _direction = Left; - _delta = 1.0f; + // Set simulated angle as default + SetAngle(AngleSham, 0, DirectionLeft, 1.f); +} + + +void Angle::SetAngle(AngleType type, float initialValue, AngleDirection direction, float delta) +{ + _type = type; + + _angle = initialValue; + _direction = direction; + _delta = delta; } float Angle::GetAngle() { - if (_direction == Left) { - angle += _delta; - if (angle > FULL_ANGLE_DEG) { - angle -= FULL_ANGLE_DEG; - } - } - else { // Right - angle -= _delta; - if (angle < 0) { - angle += FULL_ANGLE_DEG; - } + switch(_type) { + + case AngleReal: + _angle = ReadAngle(); + break; + + case AngleSham: + if (_direction == DirectionLeft) { + _angle += _delta; + if (_angle > FULL_ANGLE_DEG) { + _angle -= FULL_ANGLE_DEG; + } + } else { // Right + _angle -= _delta; + if (_angle < 0) { + _angle += FULL_ANGLE_DEG; + } + } + break; + + default: + break; } - return angle; + return _angle; } float Angle::ReadAngle() { - // Read and return the rotation angle from a potentiometer attached to pin A0 + float angle = 0; #ifdef STM32 - angle = angleRead; - return angle / MAX_ANALOG_INPUT_VALUE * FULL_ANGLE; + angle = angleRead / MAX_ANALOG_INPUT_VALUE * FULL_ANGLE; #endif #ifdef ARDUINO - angle = analogRead(anglePin); - return angle / MAX_ANALOG_INPUT_VALUE * FULL_ANGLE; + angle = analogRead(anglePin) / MAX_ANALOG_INPUT_VALUE * FULL_ANGLE; #endif - //Return simulated angle value - return GetAngle(); + return angle; } \ No newline at end of file