Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Подключим RGB-модуль с общим катодом
Задействуем выводы платы 21, 22, 23 и GND.
// use first 3 channels of 16 channels (started from zero)
#define LEDC_CHANNEL_0_R 0
#define LEDC_CHANNEL_1_G 1
#define LEDC_CHANNEL_2_B 2
// use 13 bit precission for LEDC timer
#define LEDC_TIMER_13_BIT 13
// use 5000 Hz as a LEDC base frequency
#define LEDC_BASE_FREQ 5000
// LED PINs
#define LED_PIN_R 21
#define LED_PIN_G 22
#define LED_PIN_B 23
// Arduino like analogWrite
// value has to be between 0 and valueMax
void ledcAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) {
// calculate duty
uint32_t duty = (LEDC_BASE_FREQ / valueMax) * min(value, valueMax);
// write duty to LEDC
ledcWrite(channel, duty);
}
void setup() {
// Setup timer and attach timer to a led pins
ledcSetup(LEDC_CHANNEL_0_R, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);
ledcAttachPin(LED_PIN_R, LEDC_CHANNEL_0_R);
ledcSetup(LEDC_CHANNEL_1_G, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);
ledcAttachPin(LED_PIN_G, LEDC_CHANNEL_1_G);
ledcSetup(LEDC_CHANNEL_2_B, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);
ledcAttachPin(LED_PIN_B, LEDC_CHANNEL_2_B);
}
void loop() {
ledcAnalogWrite(LEDC_CHANNEL_0_R, 0);
ledcAnalogWrite(LEDC_CHANNEL_1_G, 0);
ledcAnalogWrite(LEDC_CHANNEL_2_B, 0);
delay(1000);
for (int i = 0; i < 255; i++) {
ledcAnalogWrite(LEDC_CHANNEL_0_R, i);
delay(10);
}
for (int i = 255; i > 0; i--) {
ledcAnalogWrite(LEDC_CHANNEL_0_R, i);
delay(10);
}
for (int i = 0; i < 255; i++) {
ledcAnalogWrite(LEDC_CHANNEL_1_G, i);
delay(10);
}
for (int i = 255; i > 0; i--) {
ledcAnalogWrite(LEDC_CHANNEL_1_G, i);
delay(10);
}
for (int i = 0; i < 255; i++) {
ledcAnalogWrite(LEDC_CHANNEL_2_B, i);
delay(10);
}
for (int i = 255; i > 0; i--) {
ledcAnalogWrite(LEDC_CHANNEL_2_B, i);
delay(10);
}
for (int i = 0; i < 255; i++) {
ledcAnalogWrite(LEDC_CHANNEL_0_R, i);
ledcAnalogWrite(LEDC_CHANNEL_1_G, i);
ledcAnalogWrite(LEDC_CHANNEL_2_B, i);
delay(10);
}
for (int i = 255; i > 0; i--) {
ledcAnalogWrite(LEDC_CHANNEL_0_R, i);
ledcAnalogWrite(LEDC_CHANNEL_1_G, i);
ledcAnalogWrite(LEDC_CHANNEL_2_B, i);
delay(10);
}
}
RGB-модуль использовался также в Базовых примерах.