Commit Graph

89 Commits

Author SHA1 Message Date
HomeSpan 1566f93274 Update extras.ino 2021-10-16 11:33:49 -05:00
Gregg 760abae5ce Testing pronto codes 2021-10-16 08:16:22 -05:00
Gregg 5976fd3d0d Add enableCarrier(uint32_t frequency, float duty) and disableCarrier() to RFControl
Allows you to overlay a carrier wave on the RF Signal - in practice this is only used for IR signals (not RF).  Automatically scales frequency to account for 80x difference between APB Clock and Ref Tick Clock depending on which is used.   Checks to ensure resulting parameters (high period and low period) are all in bounds (0,65536) and reports an error if they are not.
2021-10-15 22:32:03 -05:00
Gregg 4ad607951f Add clock selection to RFControl (80 MHz or 1 MHz)
Added second argument to RFControl(uint8_t pin, boolean refClock=true) to allow choice of Ref Tick (1 MHz) clock or APB (80 MHz) clock.  Default is to use 1 MHz Ref Tick.

Also fixed bug in logic that divides clock for ESP32-C3.  Factor should be 79, not 80, since divider is apparently configured to divide by factor+1.
2021-10-15 18:16:18 -05:00
Gregg 5bced71345 Changed rf.add() and rf.phase() to allow for uint32_t durations
Instead of limiting number of ticks to 15-bits (32767), RFControl allows for tick size to be any 32-bit number.  If ticks > 32767, RFControl adds repeated LOW or HIGH phases as needed to match full duration.  This provides for much more flexibility in creating pulse trains that include very long-duration "spaces" between repeats.
2021-10-15 17:42:17 -05:00
Gregg 641e2ca955 Added check in RFControl to allow for backwards compatibility with Arduino-ESP 1.0.6
To do: Disable watchdog timer in ESP32-C3
2021-10-03 22:01:37 -05:00
Gregg 7980273609 Completed update of RFControl for ESP32-S2 and -C3 compatability
Testing completed for RFControl and PWM on all three ESP32 chip types.

To Do: update RFControl documentation to include total number of usable channels per chip, as well as the alternate version of start();
2021-10-03 18:08:07 -05:00
Gregg dc5844b520 Updated RFControl for compatibility with ESP32-S2 and ESP32-C3
Complete re-write of code.
2021-10-03 12:08:33 -05:00
Gregg 82ad33c98f Updated error-check for out-of-range PWM frequency (an ESP32-S2 check)
PWM has now been fully tested and verified with an ESP32 device under Arduino-ESP32 versions 1.0.6 and 2.0.0, and with an ESP32-S2 device under Arduino-ESP32 version 2.0.0.  Tests confirmed using both high (5000 Hz) and low (1 Hz or 5Hz) frequencies to ensure timers are correctly configured.

Next Task:  Update RFControl routines for 2.0.0 and ESP32-S2 compatibility.
2021-09-25 15:58:23 -05:00
Gregg 0ea762b4a8 Added backwards compatibility to PWM to operate in 2.0.0 and 1.0.6
Accounts for new *required* elements of the LEDC channel and timer structures to be set in later versions of the IDF.  These elements are not available in earlier versions of the IDF and the program can't be compiled unless ignored.
2021-09-25 14:33:32 -05:00
Gregg 61a87ccc63 Clean up PWM - ready for testing
To do: Test RGB LED Examples with ESP32 and ESP32-S2 boards.

Next:  Re-work Remote Control routines to make compatible with S2 and C3
2021-09-19 13:53:20 -05:00
Gregg 0ccb1d34a0 More updates to PWM to ensure S2 and C3 compatibility
New IDF parameter in 2.0.0 for LEDC allows PWM signal to be inverted!  Need to ensure flags.output_inverted is set to 0!

Also:  Deleted old PWM class, which was saved for backwards compatibility.  This "breaks" HomeSpan for those using the old PWM class (instead of LedPin).

Also:  Added checks to ensure that frequency is achievable (for S2 and C3, the 14-bit duty resolution is insufficient to allow frequencies slower than 5 Hz - this is  not a practical limit when using LedPin to drive actual LEDs and lights).
2021-09-19 13:39:40 -05:00
HomeSpan 7255a9530f Updating Extras to work through S2 and C3 issues 2021-09-18 16:28:56 -05:00
Gregg 014def4c66 Fixed compiler complaint about pow() function.
AND added 2.0.0 only variable - see LED_USE_APB_CLK.
2021-09-15 20:05:15 -05:00
Gregg 6c9bf39f54 Added PWM diagnostic messages and chip-specific maximum duty resolution 2021-09-14 21:09:58 -05:00
Gregg 3ea8f956a5 Converted initial level of LedPin from uint8_t to float 2021-09-13 06:02:20 -05:00
HomeSpan 98a5a895cc Update PwmPin.cpp
Tested new functionality on RGB LED.  Works well with using floating point precision.
2021-09-12 16:19:10 -05:00
HomeSpan 60cb20f132 Completed update to PWM code
Should now work with ESP32-S2 and C3.  Allows for as many LEDs and Servos as there are channels and timers across low and high (esp32 only) modes. Allows LED to be set with floating point precession instead of just uint8.  Allows specification of LED frequency for each LED (1-65535 Hz).  Automatically provides maximum duty resolution for frequency chosen.
2021-09-12 15:17:27 -05:00
HomeSpan 0a0c536b6d Starting work on ServoPin update 2021-09-12 12:31:08 -05:00
HomeSpan a5d31b1ea5 Re-working PWM routines 2021-09-12 09:23:29 -05:00
Gregg 451a2885b1 Changed PwmPin to LedPin in all Tutorial Examples
Greatly simplifies use interface.  No need to specify or save channels.  And no need to even save pin number since that can be found using LedPin->getPin() method whenever needed.
2021-03-21 09:54:57 -05:00
Gregg d49bca9bbe Completed LedPin() and ServoPin()
Both classes check that total number of combined instantiations does not exceed 16.  ServoPin() has additional limit of only 8 instantiations.

DEPRECATED: PwmPin().  Keep for backwards compatibility only.
TO DO:  Update Tutorial Examples to replace PwmPin with LedPin, and update Extras.h documentations with LedPin and ServoPin.
2021-03-20 23:21:09 -05:00
Gregg a8dff0a7de Update PwmPin.cpp 2021-03-20 17:35:04 -05:00
Gregg 59e34fde05 Updated LedPin() 2021-03-20 17:19:47 -05:00
Gregg bc498c32e4 Created LedPin()
This is a replacement for PwmPin().   It keeps track of channel numbers internally, which greatly simplifies the user interface.  Starts by using the 8 Low Speed Timer channels and then moves to the 8 High Speed Timer channels if more than 8 LedPins are instantiated.  Throws a non-fatal error if more than 16 LedPins are instantiated, and ignores any attempts to set the duty cycle of those channels.
2021-03-20 17:14:19 -05:00
Gregg 65df97c563 Added ServoPin() class to PwmPin.h
Controls a 50-Hz servo motor using ESP32 built-in LED PWM.  Allows custom range for microseconds and degrees.
2021-03-20 12:20:43 -05:00
Gregg 61655845a9 Updated PWM
Removed need to include channel number in set() method.  Why was this ever there?  Need to update Examples and PwmPin docs.  But keep stub method that includes channel for backwards compatibility.
2021-03-19 06:38:41 -05:00
Gregg cc748f346c Updated RFControl
Changed enum class PHASE back to simple uint8.  Was too complicated to have a dedicted structure just to represent HIGH and LOW.
2020-12-22 17:27:56 -06:00
Gregg e7e6d4de61 Added 'phase' method to RFControl
RFControl::phase() allows you to add either a HIGH or LOW entry (i.e. a single phase of a pulse.  RFControl::add() continues to add a full HIGH/LOW pulse so these changes are fully backwards compatible.
2020-12-21 22:07:58 -06:00
Gregg 302a84007e Update RFControl.cpp
Added new tests for out-of-range conditions
2020-11-27 19:59:09 -06:00
Gregg cefc1df399 RF Control Update
Changed arguments for add() method from int to uint8_t.   Updated pulse train figure.
2020-11-27 10:24:03 -06:00
Gregg f200138a2d Added back src/ino files which will be excluded via .gitattributes instead of .gitignore
This keeps them in the reop, but excludes them from releases.
2020-11-08 07:41:36 -06:00
Gregg d3029af569 Delete extras.ino 2020-10-05 21:33:55 -05:00
Gregg 7548ddd79e Update RFControl.h 2020-10-04 13:54:57 -05:00
Gregg 0d9b7e3c16 Made RFControl more generic
Instead of pre-defining RF433 and RF315, the user should define their own RFControl{pin} as a variable in their device-specific DEV_*.h file.  Makes RFControl more generic and not specific to any transmitter name (such as 433 or 315).  Also means that the pin can be set by the user instead of having to modify RFControl.h deep in the library.
2020-10-04 13:53:07 -05:00
Gregg f2a5e5e4f5 Re-worked Examples 5-10
Updated to reflect use of getVal(), getNewVal(), and updated(), intead of directly accessing the underlying member variables.
2020-08-04 21:58:57 -05:00
Gregg 1fd493aa31 Completed Example 11
Transtioned to all getter methods: getVal(), getNewVal(), updated(), using templates for all floats.

Finalized templates for getVal and getNewVal, including making <int>  default so it does not have to be set for most getVal() and getNewVal() calls.  Works for booleans as well.  TO DO:  Re-work and check ALL prior examples to ensure they use getVal, etc., and DON'T access value, newValue, isUpdated, directly.
2020-08-04 07:56:53 -05:00
Gregg 1ebce9ab92 Created Example 11
And added static HSVtoRGB method to PwmPin
2020-08-02 11:12:53 -05:00
Gregg 57fef4b496 Create /extras folder
Created /extras folder and moved PwmPin and RFControl files from src into src/extras.
2020-07-25 20:47:05 -05:00