Skip to content

Commit 144ac90

Browse files
author
Michael Kluge
committed
allow to set pin to OUTPUT_OPEN_DRAIN in analogWrite
1 parent 349e67f commit 144ac90

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

cores/esp8266/Arduino.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ void digitalWrite(uint8_t pin, uint8_t val);
170170
int digitalRead(uint8_t pin);
171171
int analogRead(uint8_t pin);
172172
void analogReference(uint8_t mode);
173-
void analogWrite(uint8_t pin, int val);
173+
void analogWrite(uint8_t pin, int val, bool openDrain = false);
174174
void analogWriteFreq(uint32_t freq);
175175
void analogWriteResolution(int res);
176176
void analogWriteRange(uint32_t range);

cores/esp8266/core_esp8266_wiring_pwm.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ extern void __analogWriteFreq(uint32_t freq) {
4343
_setPWMFreq(freq);
4444
}
4545

46-
extern void __analogWrite(uint8_t pin, int val) {
46+
extern void __analogWrite(uint8_t pin, int val, bool openDrain) {
4747
if (pin > 16) {
4848
return;
4949
}
@@ -62,7 +62,11 @@ extern void __analogWrite(uint8_t pin, int val) {
6262
analogMap &= ~(1 << pin);
6363
}
6464
else {
65-
pinMode(pin, OUTPUT);
65+
if(openDrain) {
66+
pinMode(pin, OUTPUT_OPEN_DRAIN);
67+
} else {
68+
pinMode(pin, OUTPUT);
69+
}
6670
}
6771
uint32_t high = (analogPeriod * val) / analogScale;
6872
uint32_t low = analogPeriod - high;
@@ -87,7 +91,7 @@ extern void __analogWriteResolution(int res) {
8791
}
8892
}
8993

90-
extern void analogWrite(uint8_t pin, int val) __attribute__((weak, alias("__analogWrite")));
94+
extern void analogWrite(uint8_t pin, int val, bool openDrain) __attribute__((weak, alias("__analogWrite")));
9195
extern void analogWriteFreq(uint32_t freq) __attribute__((weak, alias("__analogWriteFreq")));
9296
extern void analogWriteRange(uint32_t range) __attribute__((weak, alias("__analogWriteRange")));
9397
extern void analogWriteResolution(int res) __attribute__((weak, alias("__analogWriteResolution")));

0 commit comments

Comments
 (0)