Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // GPIO_OUT_W1TS_REG Set
- // GPIO_OUT_W1TC_REG Clear
- // Port 31 30 29 28 27 26 25 24
- // GPIO31 GPIO30 GPIO29 GPIO28 GPIO27 GPIO26 GPIO25 GPIO24
- // Port 23 22 21 20 19 18 17 16
- // GPIO23 GPIO22 GPIO21 GPIO20 GPIO19 GPIO18 GPIO17 GPIO16
- // Port 15 14 13 12 11 10 9 8
- // GPIO15 GPIO14 GPIO13 GPIO12 GPIO11 GPIO10 GPIO9 GPIO8
- // Port 7 6 5 4 3 2 1 0
- // GPIO7 GPIO6 GPIO5 GPIO4 GPIO3 GPIO2 GPIO1 GPIO0
- // SER DATA DS 14 Lilas 12
- // SRCLK SHIFT SH_CP 11 Marrom 13
- // RCLK LATCH ST_CP 12 Azul 14
- #define leds // Define se usa 1 led ou todos leds em cascata (led ou leds)
- int ledNum = 4; // se for 1 led, acende este
- #define SER 12 // DS data port
- #define SRCLK 13 // SH_CP clock
- #define RCLK 14 // ST_CP latch
- #define SER_bit BIT12 // DS bit usado no ESP32
- #define SRCLK_bit BIT13 // SH_CP bit usado no ESP32
- #define RCLK_bit BIT14 // ST_CP usado no ESP32
- int totalLeds = 24; // Total de leds na cascata
- float resolucao = 4096; // Resolução do PWM
- float porcento = 99.90; // % de duty
- //float duty = resolucao * porcento / 100; // Calculo duty
- float duty = resolucao * (100-porcento) / 100; // Calculo duty
- int maximo = resolucao; // Maxima resolucao de PWM
- //--------------------------------------------------
- void setup()
- {
- Serial.begin(115200); // Inicializacao Serial
- pinMode(SER, OUTPUT); // DS data port como saida
- pinMode(SRCLK, OUTPUT); // SH_CP clock port como saida
- pinMode(RCLK, OUTPUT); // ST_CP latch port como saida
- digitalWrite(SER, LOW); // DS data port em LOW
- digitalWrite(SRCLK, LOW); // SH_CP clock port em LOW
- digitalWrite(RCLK, LOW); // ST_CP latch port em LOW
- apaga(); // Apaga todos leds
- }
- //--------------------------------------------------
- void apaga() // Rotina para apagar todos leds
- {
- for (int i = 0; i < totalLeds; i++) // Apaga led de 0 a xx
- {
- REG_WRITE(GPIO_OUT_W1TC_REG, SER_bit); // Serial data em LOW
- REG_WRITE(GPIO_OUT_W1TS_REG, SRCLK_bit); // Shift clock em HIGH
- REG_WRITE(GPIO_OUT_W1TS_REG, RCLK_bit); // Latch clock em HIGH
- }
- }
- //--------------------------------------------------
- void loop()
- {
- REG_WRITE(GPIO_OUT_W1TS_REG, SER_bit); // Set data HIGH
- for (int i = 0; i < totalLeds; i++) // Scan led de 0 a xx
- {
- REG_WRITE(GPIO_OUT_W1TS_REG, SRCLK_bit); // Set Shift HIGH
- if (i == ledNum) // Se for o LED especifico
- {
- if (resolucao >= duty) // Se chegou o momento de acender o led
- {
- REG_WRITE(GPIO_OUT_W1TS_REG, RCLK_bit); // Pulsa Latch bit
- REG_WRITE(GPIO_OUT_W1TC_REG, RCLK_bit);
- }
- }
- REG_WRITE(GPIO_OUT_W1TC_REG, SRCLK_bit); // Set Shift LOW
- REG_WRITE(GPIO_OUT_W1TC_REG, SER_bit); // Set data LOW
- }
- resolucao++; // Incrementa resolucao
- if (resolucao >= maximo) // Se passou o maximo de resolucao
- {
- resolucao = 0; // Retorna pra zero
- #ifdef leds
- ledNum++; // Incrementa led para acender
- if (ledNum >= totalLeds) // Se atingiu ultimo led
- ledNum = 0; // Reinicia resolucao de led
- #endif
- }
- if (resolucao < duty) // Se ainda nao e o momento de acender o led
- { // // Apaga tudo
- REG_WRITE(GPIO_OUT_W1TC_REG, SER_bit); // Serial data em LOW
- REG_WRITE(GPIO_OUT_W1TS_REG, SRCLK_bit); // Shift clock em HIGH
- REG_WRITE(GPIO_OUT_W1TS_REG, RCLK_bit); // Latch clock em HIGH
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement