extern void __analogWrite(uint8_t pin, int value) { bool start_timer = false; if(value == 0) { digitalWrite(pin, LOW); prep_pwm_steps(); return; } if((pwm_mask & (1 << pin)) == 0) { if(pwm_mask == 0) { memset(&_pwm_isr_data, 0, sizeof(struct pwm_isr_data*)); start_timer = true; } pinMode(pin, OUTPUT); digitalWrite(pin, LOW); pwm_mask |= (1 << pin); } if((F_CPU / ESP8266_CLOCK) == 1) { value = (value+1) / 2; } pwm_values[pin] = value % (pwm_range + 1); prep_pwm_steps(); if(start_timer) { pwm_start_timer(); } }
extern void __analogWrite(uint8_t pin, int value) { bool start_timer = false; if(value == 0){ pwm_mask &= ~(1 << pin); prep_pwm_steps(); digitalWrite(pin, LOW); if(pwm_mask == 0) timer1_disable(); return; } if((pwm_mask & (1 << pin)) == 0){ if(pwm_mask == 0) start_timer = true; pwm_mask |= (1 << pin); pinMode(pin, OUTPUT); digitalWrite(pin, LOW); } pwm_values[pin] = value % (pwm_range + 1); prep_pwm_steps(); if(start_timer){ pwm_start_timer(); } }
extern void __analogWriteRange(uint32_t range){ pwm_range = range; prep_pwm_steps(); }
extern void __analogWriteFreq(uint32_t freq){ pwm_freq = freq; prep_pwm_steps(); }