Skip to content

Commit fe6c361

Browse files
committed
Add new library and example
1 parent 6d07b28 commit fe6c361

File tree

3 files changed

+153
-0
lines changed

3 files changed

+153
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "deneyap.h"
2+
#include "analogWrite.h"
3+
4+
#define LED_PIN LEDB // Led pini (PWM cikis pini)
5+
6+
uint8_t brightness = 0; // Ledin parlaklik ayari (0-255)
7+
uint8_t brightStep = 5; // Parlaklik degisim adimi
8+
9+
void setup() {
10+
analogWriteChannel(LED_PIN); // PWM pin ayari
11+
}
12+
13+
void loop() {
14+
brightness += brightStep; // Parlaklik kademesi degistiriliyor
15+
16+
if ( brightness == 0 || brightness == 255 ) // Sinir degerlerde parlaklik yonu degistiriliyor
17+
{
18+
brightStep = -brightStep;
19+
}
20+
21+
analogWrite(LED_PIN, brightness); // Parlaklik degeri pin ile iliskilendiriliyor
22+
23+
delay(50);
24+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#include "analogWrite.h"
2+
3+
analog_write_channel_t _analog_write_channels[16] = {
4+
{-1, 5000, 13},
5+
{-1, 5000, 13},
6+
{-1, 5000, 13},
7+
{-1, 5000, 13},
8+
{-1, 5000, 13},
9+
{-1, 5000, 13},
10+
{-1, 5000, 13},
11+
{-1, 5000, 13},
12+
{-1, 5000, 13},
13+
{-1, 5000, 13},
14+
{-1, 5000, 13},
15+
{-1, 5000, 13},
16+
{-1, 5000, 13},
17+
{-1, 5000, 13},
18+
{-1, 5000, 13},
19+
{-1, 5000, 13}};
20+
21+
int analogWriteChannel(uint8_t pin)
22+
{
23+
int channel = -1;
24+
25+
// Check if pin already attached to a channel
26+
for (uint8_t i = 0; i < 16; i++)
27+
{
28+
if (_analog_write_channels[i].pin == pin)
29+
{
30+
channel = i;
31+
break;
32+
}
33+
}
34+
35+
// If not, attach it to a free channel
36+
if (channel == -1)
37+
{
38+
for (uint8_t i = 0; i < 16; i++)
39+
{
40+
if (_analog_write_channels[i].pin == -1)
41+
{
42+
_analog_write_channels[i].pin = pin;
43+
channel = i;
44+
ledcSetup(channel, _analog_write_channels[i].frequency, _analog_write_channels[i].resolution);
45+
ledcAttachPin(pin, channel);
46+
break;
47+
}
48+
}
49+
}
50+
51+
return channel;
52+
}
53+
54+
void analogWriteFrequency(double frequency)
55+
{
56+
for (uint8_t i = 0; i < 16; i++)
57+
{
58+
_analog_write_channels[i].frequency = frequency;
59+
}
60+
}
61+
62+
void analogWriteFrequency(uint8_t pin, double frequency)
63+
{
64+
int channel = analogWriteChannel(pin);
65+
66+
// Make sure the pin was attached to a channel, if not do nothing
67+
if (channel != -1 && channel < 16)
68+
{
69+
_analog_write_channels[channel].frequency = frequency;
70+
}
71+
}
72+
73+
void analogWriteResolution(uint8_t resolution)
74+
{
75+
for (uint8_t i = 0; i < 16; i++)
76+
{
77+
_analog_write_channels[i].resolution = resolution;
78+
}
79+
}
80+
81+
void analogWriteResolution(uint8_t pin, uint8_t resolution)
82+
{
83+
int channel = analogWriteChannel(pin);
84+
85+
// Make sure the pin was attached to a channel, if not do nothing
86+
if (channel != -1 && channel < 16)
87+
{
88+
_analog_write_channels[channel].resolution = resolution;
89+
}
90+
}
91+
92+
void analogWrite(uint8_t pin, uint32_t value, uint32_t valueMax)
93+
{
94+
int channel = analogWriteChannel(pin);
95+
96+
// Make sure the pin was attached to a channel, if not do nothing
97+
if (channel != -1 && channel < 16)
98+
{
99+
uint8_t resolution = _analog_write_channels[channel].resolution;
100+
uint32_t levels = pow(2, resolution);
101+
uint32_t duty = ((levels - 1) / valueMax) * min(value, valueMax);
102+
103+
// write duty to LEDC
104+
ledcWrite(channel, duty);
105+
}
106+
}

libraries/03_PWM/src/analogWrite.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#ifndef _ESP32_ANALOG_WRITE_
2+
#define _ESP32_ANALOG_WRITE_
3+
4+
#include <Arduino.h>
5+
6+
typedef struct analog_write_channel
7+
{
8+
int8_t pin;
9+
double frequency;
10+
uint8_t resolution;
11+
} analog_write_channel_t;
12+
13+
int analogWriteChannel(uint8_t pin);
14+
15+
void analogWriteFrequency(double frequency);
16+
void analogWriteFrequency(uint8_t pin, double frequency);
17+
18+
void analogWriteResolution(uint8_t resolution);
19+
void analogWriteResolution(uint8_t pin, uint8_t resolution);
20+
21+
void analogWrite(uint8_t pin, uint32_t value, uint32_t valueMax = 255);
22+
23+
#endif

0 commit comments

Comments
 (0)