AnalogWrite - frequency and resolution log errors + returns (#7471)
* Added log errors + returns * Update LEDC docs
This commit is contained in:
parent
394f7218ba
commit
dbeae9480d
2 changed files with 35 additions and 4 deletions
|
|
@ -222,9 +222,12 @@ void analogWrite(uint8_t pin, int value) {
|
||||||
log_e("No more analogWrite channels available! You can have maximum %u", LEDC_CHANNELS);
|
log_e("No more analogWrite channels available! You can have maximum %u", LEDC_CHANNELS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(ledcSetup(cnt_channel - 1, analog_frequency, analog_resolution) == 0){
|
||||||
|
log_e("analogWrite setup failed (freq = %u, resolution = %u). Try setting different resolution or frequency");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ledcAttachPin(pin, cnt_channel - 1);
|
||||||
pin_to_channel[pin] = cnt_channel--;
|
pin_to_channel[pin] = cnt_channel--;
|
||||||
ledcSetup(cnt_channel, analog_frequency, analog_resolution);
|
|
||||||
ledcAttachPin(pin, cnt_channel);
|
|
||||||
}
|
}
|
||||||
ledcWrite(pin_to_channel[pin] - 1, value);
|
ledcWrite(pin_to_channel[pin] - 1, value);
|
||||||
}
|
}
|
||||||
|
|
@ -237,7 +240,10 @@ int8_t analogGetChannel(uint8_t pin) {
|
||||||
void analogWriteFrequency(uint32_t freq) {
|
void analogWriteFrequency(uint32_t freq) {
|
||||||
if (cnt_channel != LEDC_CHANNELS) {
|
if (cnt_channel != LEDC_CHANNELS) {
|
||||||
for (int channel = LEDC_CHANNELS - 1; channel >= cnt_channel; channel--) {
|
for (int channel = LEDC_CHANNELS - 1; channel >= cnt_channel; channel--) {
|
||||||
ledcChangeFrequency(channel, freq, analog_resolution);
|
if (ledcChangeFrequency(channel, freq, analog_resolution) == 0){
|
||||||
|
log_e("analogWrite frequency cant be set due to selected resolution! Try to adjust resolution first");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
analog_frequency = freq;
|
analog_frequency = freq;
|
||||||
|
|
@ -250,7 +256,10 @@ void analogWriteResolution(uint8_t bits) {
|
||||||
}
|
}
|
||||||
if (cnt_channel != LEDC_CHANNELS) {
|
if (cnt_channel != LEDC_CHANNELS) {
|
||||||
for (int channel = LEDC_CHANNELS - 1; channel >= cnt_channel; channel--) {
|
for (int channel = LEDC_CHANNELS - 1; channel >= cnt_channel; channel--) {
|
||||||
ledcChangeFrequency(channel, analog_frequency, bits);
|
if (ledcChangeFrequency(channel, analog_frequency, bits) == 0){
|
||||||
|
log_e("analogWrite resolution cant be set due to selected frequency! Try to adjust frequency first");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
analog_resolution = bits;
|
analog_resolution = bits;
|
||||||
|
|
|
||||||
|
|
@ -169,6 +169,28 @@ It is compatible with Arduinos analogWrite function.
|
||||||
* ``value`` select the duty cycle of pwm.
|
* ``value`` select the duty cycle of pwm.
|
||||||
* range is from 0 (always off) to 255 (always on).
|
* range is from 0 (always off) to 255 (always on).
|
||||||
|
|
||||||
|
analogWriteResolution
|
||||||
|
*********************
|
||||||
|
|
||||||
|
This function is used to set resolution for all analogWrite channels.
|
||||||
|
|
||||||
|
.. code-block:: arduino
|
||||||
|
|
||||||
|
void analogWriteResolution(uint8_t bits);
|
||||||
|
|
||||||
|
* ``bits`` select resolution for analog channels.
|
||||||
|
|
||||||
|
analogWriteFrequency
|
||||||
|
********************
|
||||||
|
|
||||||
|
This function is used to set frequency for all analogWrite channels.
|
||||||
|
|
||||||
|
.. code-block:: arduino
|
||||||
|
|
||||||
|
void analogWriteFrequency(uint32_t freq);
|
||||||
|
|
||||||
|
* ``freq`` select frequency of pwm.
|
||||||
|
|
||||||
Example Applications
|
Example Applications
|
||||||
********************
|
********************
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue