Questão nº 30
Questão de Engenharia Elétrica · FCC TRT15 2024 (nº 30)
Abaixo, têm-se as duas primeiras etapas do programa de teste, isto é, as declarações de variáveis e o setup:
// Variáveis #define LED 33 #define BOTAO 32 int T = 100; void setup() { pinMode(LED, OUTPUT); pinMode(BOTAO, INPUT_PULLUP); }
A etapa void loop() do programa que atende aos objetivos do teste é:
- A
(alternativa correta)void loop() { while (digitalRead(BOTAO) == 0) { digitalWrite(LED, HIGH); delay(10*T); digitalWrite(LED, LOW); delay(10*T); } digitalWrite(LED, HIGH); delay(T); digitalWrite(LED, LOW); delay(T); } - B
void loop() { if (digitalRead(BOTAO) == 1) { digitalWrite(LED, HIGH); delay(10*T); digitalWrite(LED, LOW); delay(10*T); } else { digitalWrite(LED, HIGH); delay(T); digitalWrite(LED, LOW); delay(T); } } - C
void loop() { while (digitalRead(BOTAO) == 1) { digitalWrite(LED, HIGH); delay(10*T); digitalWrite(LED, LOW); delay(10*T); } digitalWrite(LED, HIGH); delay(T); digitalWrite(LED, LOW); delay(T); } - D
void loop() { while (digitalRead(BOTAO) == 0) { digitalWrite(LED, HIGH); delay(T); digitalWrite(LED, LOW); delay(T); } digitalWrite(LED, HIGH); delay(10*T); digitalWrite(LED, LOW); delay(10*T); } - E
void loop() { if (digitalRead(BOTAO) == 1) { digitalWrite(LED, HIGH); delay(10*T); digitalWrite(LED, LOW); delay(10*T); } digitalWrite(LED, HIGH); delay(T); digitalWrite(LED, LOW); delay(T); }
Resposta comentada
Gabarito Alternativa A
O void loop() é a função principal em programas Arduino/ESP32 que se repete infinitamente, executando o código dentro dela de forma contínua. A configuração INPUT_PULLUP para um botão significa que o pino lê ALTO (HIGH) quando o botão não está pressionado e BAIXO (LOW) quando o botão está pressionado.
(A) Correta: Quando o botão está pressionado (digitalRead(BOTAO) == 0), o laço while executa repetidamente, fazendo o LED piscar lentamente (com delay(10*T)). Quando o botão não está pressionado (digitalRead(BOTAO) == 1), a condição do while é falsa, então o código após o while é executado, fazendo o LED piscar rapidamente (com delay(T)) uma vez por iteração do loop(), resultando em um piscar rápido contínuo.
(B) Incorreta: Esta alternativa faz o LED piscar lentamente quando o botão não está pressionado (digitalRead(BOTAO) == 1) e rapidamente quando está pressionado (else, ou seja, digitalRead(BOTAO) == 0), o que é o oposto do comportamento esperado pela alternativa A.
(C) Incorreta: Esta alternativa faz o LED piscar lentamente quando o botão não está pressionado (digitalRead(BOTAO) == 1) e rapidamente quando está pressionado (digitalRead(BOTAO) == 0, após o while), o que é o oposto do comportamento esperado pela alternativa A.
(D) Incorreta: Esta alternativa faz o LED piscar rapidamente quando o botão está pressionado (digitalRead(BOTAO) == 0) e lentamente quando não está pressionado (digitalRead(BOTAO) == 1, após o while), o que é o oposto do comportamento esperado pela alternativa A.
(E) Incorreta: Esta alternativa faz o LED piscar lentamente se o botão não estiver pressionado (digitalRead(BOTAO) == 1), mas sempre faz o LED piscar rapidamente em seguida, independentemente do estado do botão, pois o segundo bloco de código não está dentro de um else. Isso resulta em um comportamento inconsistente e não desejado.
Fonte: FCC TRT15 2024 Analista Judiciário - Área Apoio Especializado - Especialidade Engenharia (Elétrica) (Caderno Tipo 003). Reproduzida para fins de estudo.
