Código de Pesquisa

Lição 14/31-5: Exemplo 2 de map() na programação Arduino

Lição 14/31-5: Exemplo 2 de map() na programação Arduino

Este tutorial demonstra como usar a função map() do Arduino para controlar o brilho de um LED usando um valor percentual (0–100%) em vez da faixa bruta de 0–255 exigida por analogWrite(). Esta é uma técnica fundamental que simplifica seu código e o torna muito mais intuitivo, pois você pode pensar em termos de porcentagens em vez de valores de byte arbitrários.

Carro Sunfounder montado

Essa habilidade é essencial para qualquer projeto em que você precise dimensionar leituras de sensores ou sinais de controle. Por exemplo, você pode usá-la para:

  • Controlar o brilho de um LED ou a velocidade de um motor com base na leitura de um potenciômetro.
  • Converter a saída de um sensor de temperatura (por exemplo, 0–1023) para uma faixa em Celsius ou Fahrenheit.
  • Mapear a entrada analógica de um joystick para controlar a posição de um servomotor.
  • Criar uma interface de usuário simples onde um valor percentual é usado para definir o nível de potência de um dispositivo.

Ao final desta lição, você será capaz de escrever um código mais limpo e sustentável, que seja mais fácil de ler e ajustar.

Hardware/Componentes

Este projeto usa um conjunto mínimo de componentes, tornando-o perfeito para iniciantes. Você precisará de:

  • Uma placa Arduino (por exemplo, Uno).
  • Um LED.
  • Um resistor de 220 ohms.
  • Fios de ligação (jumpers).
  • Uma protoboard (opcional, mas recomendada).

Guia de Ligação

A ligação para este projeto é muito simples, como demonstrado no vídeo (no vídeo em 20:47). O LED está conectado ao pino 3 do Arduino através de um resistor limitador de corrente de 220 ohms.

Conecte o ânodo (perna mais longa) do LED ao pino 3 através do resistor. Conecte o cátodo (perna mais curta) do LED ao pino de terra (GND) no Arduino.

Explicação do Código

Este exemplo foca em uma função definida pelo usuário que simplifica o controle do brilho do LED. O código é construído em torno de uma função personalizada chamada pwmValue(), que é a chave para tornar o código intuitivo.

Vamos detalhar as partes configuráveis do código:

int LEDpin = 3; //define o pino para o LED

Esta linha define o pino do Arduino ao qual o LED está conectado. Você pode alterar o número 3 para qualquer outro pino compatível com PWM na sua placa Arduino.

O núcleo do projeto é a função personalizada pwmValue(). Esta função recebe um valor percentual como entrada e o converte para a faixa de 0–255 usada por analogWrite(). É aqui que a função map() faz sua mágica.

int pwmValue(int percent)
{
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
}

Para usar esta função, basta chamá-la com a porcentagem de brilho desejada. A função retornará o valor correto para analogWrite(). Por exemplo, pwmValue(60) retornará 153, que corresponde a 60% de 255. A função também inclui uma verificação de segurança para garantir que a porcentagem de entrada esteja entre 0 e 100, retornando 0 se estiver fora dessa faixa.

Na função setup(), você pode ver como isso é usado:

int b=5;//60% de brilho
Serial.println( pwmValue(b)   );//imprime no monitor serial
analogWrite(LEDpin, pwmValue(b));// liga o LED com 60% de brilho

Aqui, a variável b é definida com a porcentagem de brilho desejada. A função pwmValue(b) é então usada tanto para imprimir o valor mapeado no Monitor Serial quanto para definir o brilho do LED. Para alterar o brilho do LED, você só precisa modificar o valor de b. A função map() cuida de todos os cálculos necessários para você.

Projeto ao Vivo/Demonstração

No vídeo, o apresentador demonstra o projeto alterando o valor da variável b e enviando o código para o Arduino. Quando b é definido como 60, o código o mapeia para 153 e o LED acende com 60% de brilho. Alterar b para 90 mapeia para 229, tornando o LED visivelmente mais brilhante. Definir como 100 mapeia para 255, que é o brilho máximo. A demonstração mostra claramente como a função map() permite controlar o LED usando um valor percentual intuitivo, enquanto o Monitor Serial confirma o valor exato de 0–255 enviado ao pino (no vídeo em 21:29).

Projetos relacionados deste vídeo

Capítulos

  • [00:00] Introdução às funções Millis e map
  • [01:19] O que é Millis e por que usá-lo
  • [05:46] Usando Millis com um evento para agir
  • [08:35] Exemplo 2 de Millis com um botão de pressão
  • [12:14] Exemplo 3 de Millis verificando dois pressionamentos de botão
  • [17:20] Introdução à função map()
  • [19:47] Exemplo de código para mapear uma porcentagem para o brilho do LED
  • [20:47] Demonstração ao vivo da função map()
  • [22:41] Criando uma função personalizada para lidar com o mapeamento

Imagens

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
Idioma: C++
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
int LEDpin = 3; //defind pin for LED
                   
 
 void setup() {
    Serial.begin(9600);//initialzie serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=5;//60% brightness

    Serial.println( pwmValue(b)   );//print it on serial monitor
    analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }

/*
 * pwmValue(int percent)
 * @param precent is value between 0 to 100
 * @return it returns the mapped value from 0 to 255
 * written by Ahmad Shamshiri on Dec 9, 2022
 * 
 */
 int pwmValue(int percent)
 {
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
 } //pwmValue end
 

Arquivos📁

Manual do Usuário