Estou tentando escrever um programa que acenda dois leds, da seguinte maneira:
enquanto um vai acendendo gradualmente o outro vai apagando, porém não estou conseguindo o resultado desejado.
o primeiro led termina de acender para depois o outro apagar, mas eu quero que seja simultâneo, vocês podem me ajudar?
Segue o código que escrevi.
O seu código está parcialmente correto, em tese, não há nada para ajustar em questões técnicas (como valores de PWM), o que ocorre é que você ignora um princípio básico de programação: O programa executa sequencialmente, ele precisa terminar um bloco de código, para só então iniciar a execução de um outro bloco de código.
Partindo dessa premissa, é impossível que o seu programa, do jeito que está, apague o led vermelho e acenda o led azul simultaneamente, pois ele precisa terminar o segundo bloco for que apaga o led vermelho, para só então acender o led azul no terceiro bloco de código.
Eu fiz uma alteração no seu código, tentando condensar os dois blocos for centrais para executarem de forma sincronizada e talvez isso resolva, pois eu não testei o código, mas sabendo qual a sua falha, mesmo que minha alteração não resolva, você já está encaminhado para resolver sozinho.
#define red_led 11
#define blue_led 9
#define min 0
#define max 255
#define tmp 100
void setup() {
pinMode(red_led, OUTPUT);
pinMode(blue_led, OUTPUT);
}
void loop() {
for(int i = min; i < max; i++) {
analogWrite(red_led, i);
delay(tmp);
}
int a = max;
int b = min;
while (a > min && b < max) {
analogWrite(red_led, a);
analogWrite(blue_led, b);
a--; b++;
delay(tmp)
}
for(int i = max; i > min; i–-) {
analogWrite(blue_led, i);
delay(tmp);
}
}
Obrigado Sandro!
Acho que dessa forma resolve o meu problema. Foi mesmo, meio que esqueci que os blocos de comandos são executados passo a passo kkk
Valeu pela ajuda
Porém estou fazendo os testes no Tinkercard, e lá dá impressão que os leds acendem e permanecem ligados indefinidamente, ou seja, não consegui perceber mudança na luminosidade. Não sei se ainda é erro na programação ou se com o material real iria funcionar.
mas continuarei tentando aqui!
O caso é que ainda não consegui o efeito desejado com aquela programação que te mandei ontem, tenho a impressão de que os leds ficam acesos indefinidamente.
const int red_led = 5;
const int blue_led = 6;
const int min = 0;
const int max = 255;
const int timer = 5;
void setup() {
pinMode(red_led, OUTPUT);
pinMode(blue_led, OUTPUT);
}
void loop() {
for(int i = min; i < max; i++) {
analogWrite(red_led, i);
delay(timer);
}
int a = max;
int b = min;
while (a > min && b < max) {
analogWrite(red_led, a);
analogWrite(blue_led, b);
a--;
b++;
delay(timer);
}
for (int i = max; i > min; i--) {
analogWrite(blue_led, i);
delay(timer);
}
}
Finalmente consegui o que queria, e reparando esse código que eu coloquei acima percebi que não utilizei o “delay”. Talvez esse fosse o problema kk.
Obrigado pelas contribuições!!