mirror of
https://github.com/digistump/DigistumpArduino.git
synced 2025-04-28 15:49:02 -07:00
68 lines
2.5 KiB
Markdown
68 lines
2.5 KiB
Markdown
![]() |
SoftRcPulseOut library
|
||
|
======================
|
||
|
|
||
|
**SoftRcPulseOut** is pseudo-asynchronous library designed to generate RC pulse signals. RC pulse signals are intended to command servos, **E**lectronic **S**peed **C**ontrollers (**ESC**), Brushless Controllers and any devices expecting such a command signal.
|
||
|
|
||
|
Some examples of use cases:
|
||
|
-------------------------
|
||
|
* **Servo/ESC/Brushless Controller tester**
|
||
|
* **Servo sequencer** (look at RcSeq library which uses _SoftRcPulseOut_)
|
||
|
* **Robot wheels using modified Servo to support 360° rotation**
|
||
|
* **RC pulse stretcher** (in conjunction with **SoftRcPulseIn** library)
|
||
|
|
||
|
Supported Arduinos:
|
||
|
------------------
|
||
|
* **ATmega368 (UNO)**
|
||
|
* **ATmega2560 (MEGA)**
|
||
|
* **ATtiny84 (Standalone)**
|
||
|
* **ATtiny85 (Standalone or Digispark)**
|
||
|
* **ATtiny167 (Digispark pro)**
|
||
|
|
||
|
Tip and Tricks:
|
||
|
--------------
|
||
|
Develop your project on an arduino UNO or MEGA, and then shrink it by loading the sketch in an ATtiny or Digispark (pro).
|
||
|
|
||
|
API/methods:
|
||
|
-----------
|
||
|
* The **SoftRcPulseOut** library uses the same API as the regular **SoftwareServo** library:
|
||
|
* attach()
|
||
|
* attached()
|
||
|
* detach()
|
||
|
* write()
|
||
|
* read()
|
||
|
* setMinimumPulse()
|
||
|
* setMaximumPulse()
|
||
|
* refresh()
|
||
|
|
||
|
* Two additional methods allow using µs rather than angle in ° :
|
||
|
* write_us()
|
||
|
* read_us()
|
||
|
|
||
|
* Methods for version management:
|
||
|
* LibVersion
|
||
|
* LibRevision
|
||
|
* LibTextVersionRevision
|
||
|
|
||
|
* Synchronization:
|
||
|
* By giving **_1_** or **_true_** as optional argument for the **SoftRcPulseOut::refresh()** method, the pulses are refreshed immediately (without waiting for the usual 20ms).
|
||
|
|
||
|
* the **SoftRcPulseOut::refresh()** method returns **_1_** or **_true_** when the pulses have been refreshed. Testing this return value provides a 20ms timer.
|
||
|
|
||
|
Design considerations:
|
||
|
---------------------
|
||
|
The **SoftRcPulseOut** library relies on a 8 bit timer. This allows using it even on little MCU (such as ATtiny85) which do not have any 16 bit timer.
|
||
|
|
||
|
Whereas a 8 bit timer is used for pulse generation, the jitter is limited by using anticipated interrupt masking.
|
||
|
|
||
|
Interrups are only masked during rising and falling edges of the pulse signals.
|
||
|
|
||
|
CAUTION:
|
||
|
-------
|
||
|
The end user shall also use asynchronous programmation method in the loop() function (not too long blocking functions such as delay(1000): the **SoftRcPulseOut::refresh()** method shall be called at least every 50ms).
|
||
|
|
||
|
Contact
|
||
|
-------
|
||
|
|
||
|
If you have some ideas of enhancement, please contact me by clicking on: [RC Navy](http://p.loussouarn.free.fr/contact.html).
|
||
|
|