Sistema de controle de LED usando Arduino: Potenciômetro e botões de pressão

Olá a todos,

Estou tentando completar um projeto Arduino no Tinkercad onde preciso fazer esta atividade Arduino, que requer a construção de um circuito com os seguintes componentes:

5 ou 6 LEDs vermelhos

5 ou 6 resistores (150Ω ou similar)

1 potenciômetro

3 botões de pressão

3 resistores (10kΩ)

1 protoboard

1 Arduino UNO

Principais Tarefas:

Controle do potenciômetro:

Quando o potenciômetro estiver na posição inicial (extrema esquerda), todos os LEDs devem estar apagados.

Na posição final (extrema direita), todos os LEDs devem estar acesos.

Em posições intermediárias, apenas alguns LEDs devem acender (por exemplo, a metade acende os LEDs 1, 2 e 3).

Sequência de piscadas dos LEDs:

Os LEDs devem acender e apagar em sequência a cada 500 ms. Por exemplo:

O LED 1 acende, depois de 500 ms o LED 2 acende, depois de 500 ms o LED 3 acende.

Depois que todos estiverem acesos, eles se apagam após 500 ms, e o ciclo se repete indefinidamente.

Ajuste de brilho

Adicione 3 botões de pressão para controlar o brilho do LED:

Botão 1 (KEY1): Brilho mínimo.

Botão 2 (KEY2): Metade do brilho.

Botão 3 (KEY3): Brilho máximo (padrão se nenhum botão for pressionado).

Use as funções PWM do Arduino (analogWrite e map) para o controle do brilho.

Consegui fazer a parte do potenciômetro funcionar, mas o controle de brilho não está respondendo.

int LED1 = 3;
int LED2 = 5;
int LED3 = 6;
int LED4 = 9;
int LED5 = 10;
int LED6 = 11;
int Botao1 = 2;
int Botao2 = 7;
int Botao3 = 8;
int pwm = 255; 

void setup() {
  pinMode(A0, INPUT);
  pinMode(Botao1, INPUT_PULLUP);  
  pinMode(Botao2, INPUT_PULLUP);
  pinMode(Botao3, INPUT_PULLUP);

  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED6, OUTPUT);
}

void loop() {
  if (digitalRead(Botao1) == LOW) {
    pwm = 50;  
  }
  if (digitalRead(Botao2) == LOW) {
    pwm = 150;  
  }
  if (digitalRead(Botao3) == LOW) {
    pwm = 255;  
  }

  pot = analogRead(A0);

  if (pot >= 900) {
    piscaLEDs(6);
  } else if (pot >= 760) {
    piscaLEDs(5);
  } else if (pot >= 590) {
    piscaLEDs(4);
  } else if (pot >= 420) {
    piscaLEDs(3);
  } else if (pot >= 240) {
    piscaLEDs(2);
  } else if (pot >= 70) {
    piscaLEDs(1);
  } else {
    apagaTodosLEDs();
  }
}

void piscaLEDs(int quantidade) {
  int leds[] = {LED1, LED2, LED3, LED4, LED5, LED6};

  for (int i = 0; i < quantidade; i++) {
    analogWrite(leds[i], pwm);
    delay(500);
  }

  for (int i = quantidade - 1; i >= 0; i--) {
    digitalWrite(leds[i], LOW);
  }

  delay(500);
}

void apagaTodosLEDs() {
  int leds[] = {LED1, LED2, LED3, LED4, LED5, LED6};
  for (int i = 0; i < 6; i++) {
    digitalWrite(leds[i], LOW);
  }
}


Este é o circuito que montei no tinkercad, não tenho certeza se todas as conexões estão corretas. Preciso de ajuda, sou muito novo nisso e não sei realmente o que estou fazendo, portanto, se alguém puder me ajudar e explicar o que está acontecendo de errado, isso me ajudaria muito.

Olá!

Eu não tenho cadastro no Tinkercad, mas não estou vendo em princípio nada de errado com o seu programa. Eu levaria num primeiro momento duas coisas em consideração:

  1. Saber se o analogWrite() funciona direito no Tinkercad. Em outro simulador, o Wokwi, é difícil enxergar diferenças no "brilho" do LED;

  2. Assegurar que os botões não estão em curto-circuito. A forma quadrada desses botões não ajuda, porque é fácil você inverter a posição e conectar pinos distintos na mesma coluna da protoboard.

Eu tenho ideia que estes botões ligam na diagonal...

O que está ocorrendo de errado com seu projeto?

Não há muito de obviamente errado no teu programa e circuito que seja claro. Há algumas coisas menores que podes melhorar.

Isto:

int leds[] = {LED1, LED2, LED3, LED4, LED5, LED6};

É repetido em vários sítios, logo podes sempre tornar isto numa variável global tendo em conta o uso que dás a isto.

Podes substituir isto:

  for (int i = quantidade - 1; i >= 0; i--) {
    digitalWrite(leds[i], LOW);
  }

por isto:

apagaTodosLEDs();

O site do Arduino refere que apenas podes usar AnalogWrite com 4 pinos ao mesmo tempo...
https://docs.arduino.cc/language-reference/pt/en/functions/analog-io/analogWrite/

De resto, deves fazer o que todos fazemos e colocar mensagens de debug. Por exemplo:

  Serial.println(pwm); 
  pot = analogRead(A0);
  Serial.println(pot); 

Isto indica-te logo se as tuas entradas estão a funcionar correctamente o que é meio caminho andado para confirmares a lógica.

Que resistência usaste nos LEDs?

Seu codigo não compila.
Falta declarar a variavel pot.

'pot' was not declared in this scope
pot = analogRead(A0);

Os botões quando pressionados, não mudam a luminosidade do LED

Na hora de copiar eu esqueci de copiar com a declaração do pot, mas foi a primeira coisa que eu declarei no código

Pessoal, agora o código está funcionando, o problema era as conexões nos botões que deveriam estar conectados conforme mostrado abaixo

PS: a solução não está no seu post. Está nos posts #2 e #3...