Entrada e Saída - Manipulando Registradores

Entrada e Saída - Manipulando Registradores

Para determinar os estados de suas entradas e saídas o microcontrolador possui registradores na qual esses dados são armazenados. Ao chamar as funções de entrada e saída fornecidas pela biblioteca padrão do Arduino o que fazemos é nada mais que modificar tais registradores. Então porque acessar estes registradores diretamente?

A manipulação direta de registradores permite que:

  • A leitura e escrita em pinos seja feita muito mais rápida.
  • Ler e escrever em mais de um pino de uma mesma porta por vez.
  • O código produzido é menor, em alguns casos esse fator pode fazer a diferença entre seu código caber na memória flash ou não.

Essa técnica também possuí desvantagens:

  • O código produzido é menos portável, difícil de debbugar e de ser mantido.

Na abordagem dos conceitos a seguir o microcontrolador atmega328 presente na placa Arduino Uno será utilizado. Para acompanhar esse tutorial é necessário algum conhecimento de lógica digital.

Todos os registradores desse microcontrolador possuem 8 bits. Os pinos de entrada e saída são divididos em PORTs. O atmega328 possui 3 PORTs, como podemos observar no diagrama a seguir:

Cada PORT possui 3 registradores com diferentes funções:

DDR

Os registradores do tipo DDR (Data Direction Register) são responsáveis por determinar se os pinos de um determinado PORT se comportarão como entrada ou saída. Cada bit do registrador DDR controla o estado do respectivo pino. Por exemplo: O bit 1 do registrador DDRB (DDB1) controlará o estado do pino PB1 e consequentemente o pino D9 do Arduino Uno como mostrado no mapa.

Para definir um pino como saída devemos setar seu respectivo bit do registrador DDR como 1 e  para defini-lo como entrada seta-lo para 0.

/* Equivalente:
pinMode(9,OUTPUT);
pinMode(9,INPUT);
*/

DDRB |= (1 << DDB1);
DDRB &= ~(1 << DDB1);

PORT

Os registradores do tipo PORT são responsáveis por determinar se um pino está definido como alto (HIGH) ou baixo (LOW).

portb

Para definir um pino como alto devemos setar seu respectivo bit do registrador PORT como 1 e para defini-lo como baixo seta-lo para 0.

 

/* Equivalente:
pinMode(9,OUTPUT);
digitalWrite(9,LOW);
*/
 
DDRB |= (1 << DDB1);
PORTB &= ~(1 << PORTB1);

Outro exemplo:

/* Equivalente:
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
*/
 
PORTB = 0xFF;

 

PIN

Os registradores do tipo PIN são responsáveis por guardar o estado lógico de um pino.

/* Equivalente:
pinMode(9,INPUT);
digitalWrite(9,HIGH); //Nesse contexto, ativa o pull-up interno.
bool x = digitalRead(9);
*/
 
DDRB &= ~(1 << DDB1);
PORTB |= (1 << PORTB1);
bool x = (PINB & (1 << PINB1));
Todo o conteúdo apresentado pode ser encontrado no datasheet do microcontrolador.

Arduino - Entradas e Saídas Digitais - Pinos digitais

Arduino - Entradas e saídas digitais - Pinos digitais

Nesse tutorial daremos prosseguimento aos conceitos básicos para aqueles que desejam aprender como utilizar uma placa Arduino. Este conteúdo será voltado para ensinar como configurar e manipular as entradas e saídas digitais em uma placa Arduino, de modo que, no decorrer deste material você aprenderá a desenvolver programas capazes de fazer com que o seu Arduino realize o acionamento de um led e também com que ele consiga saber se um botão, por exemplo, foi pressionado. Entretanto, sugerimos que, antes de acompanhar este conteúdo, você veja nosso tutorial sobre grandezas digitais, analógicas e PWM, para que então, possa extrair o máximo de informação daqui. 

[toc]

Pinos de entrada e saída digital

Primeiramente, deve-se ter em mente que, quando falamos em entradas ou saídas digitais em uma placa Arduino, estamos falando de elementos que trabalham apenas dois níveis de tensão definidos. No caso do Arduino UNO, por exemplo, estes são:

  • Um nível lógico alto, correspondente a 5V;
  • Um nível lógico baixo, correspondente a 0V.

É importante ressaltar que na prática existem faixas de valores próximos a esses números em que o circuito digital entende como nível alto ou baixo e da mesma forma, existe também uma faixa intermediária não definida que pode gerar resultados inesperados e que, portanto, deve ser evitada.

Em um Arduino UNO, as entradas e saídas digitais estão localizadas desde pino 0 até o pino 13. Note que, estes pinos devem ser configurados previamente para que atuem como entradas ou saídas (é importante ressaltar que alguns destes pinos possuem funções especiais, no entanto, isto será tratado em outros tutoriais. Neste momento basta salientar a função destes enquanto entradas e saídas digitais).


Hardware para o desenvolvimento dos projetos

Nas próximas seções deste tutorial serão desenvolvidos 3 exemplos à respeito da utilização das entradas e saídas digitais. Para simplificar, iremos propor o mesmo hardware para executar todas as propostas de projetos citadas, pois, desta forma o leitor poderá aprender os conceitos de maneira mais fácil. Os projetos que serão desenvolvidos são:

  • Acionando um led através de uma saída digital
  • Piscando um led
  • Realizando a leitura de um botão através de uma entrada digital

Componentes utilizados

Montagem do projeto

Placa Arduino Uno - Uso de entradas e saídas digitais
Esquema de montagem da placa Arduino para desenvolvimento do projeto

Veja o nosso como ficou:

Placa Arduino Uno - Uso de entradas e saídas digitais
Circuito montado com uma Placa Arduino Uno

Entendendo o hardware

A função do hardware apresentado anteriormente consiste em criar o cenário propicio para que possamos ensinar o básico que você precisa aprender para poder utilizar um Arduino UNO.

Primeiramente, perceba que, na montagem em questão, temos um led ligado através de um resistor ao pino 10 do Arduino UNO, de modo que, este resistor é colocado para limitar a corrente que passa pelo led, evitando assim, um eventual problema com os componentes. Observe que quando o pino 10 disponibiliza um potencial de 5V em seu terminal, o circuito será fechado, proporcionando o acionamento do led.

Pino digital do Arduino Uno trabalhando como saída
Pino digital do Arduino Uno trabalhando como saída

Em seguida, lembre-se que o hardware utilizado também possui um botão que ao ser pressionado estabelecerá um potencial de 5V no pino 9 do Arduino UNO. Em contrapartida, caso o botão permaneça sem ser pressionado a porta de entrada digital estará com um potencial de 0V. Dessa forma é importante usarmos aqui um resistor de pull-down de 10kΩ(explicado com mais detalhes no nosso artigo sobre grandezas digitais, analógicas e PWM).

Pino digital do Arduino Uno trabalhando como entrada
Pino digital do Arduino Uno trabalhando como entrada

Projeto 1: Acionando um led através de uma saída digital

Neste projeto ensinaremos a você como proceder para utilizar uma saída digital para acionar algum dispositivo através da mesma.

Código do projeto

Segue o código para ser utilizado no Arduino para realizar o acionamento de uma saída digital

void setup() 
{ 
    pinMode(10,OUTPUT);
    digitalWrite(10,HIGH); 
} 

void loop() 
{
 
}

Entendendo o software

- Definindo as configurações iniciais

O primeiro passo para realizar qualquer tipo de interação utilizando um dos pinos de entrada/saída digital consiste em determinar o modo de operação do mesmo. Como queremos acender um led, devemos fazer com que o pino em que o mesmo está conectado se comporte como uma saída digital. Para isso, dentro da função setup() (lembre-se que a esta função é executada somente quando o Arduino UNO é iniciado e apenas uma vez) utiliza-se a função pinMode(), onde os parâmetros passados para a mesma são: o número do pino a ser utilizado e o modo de operação do mesmo (neste caso, definimos o pino 10 como uma saída digital através da palavra OUTPUT).

pinMode(10,OUTPUT);

- Realizando o acionamento

Depois de definirmos o pino 10 como saída digital, deve-se fazer com que o Arduino UNO coloque o mesmo em nível alto, ou seja, que disponibilize 5V na saída em questão. Para realizar este procedimento, utiliza-se a função digitalWrite() (assim como a função pinMode(), esta também possui dois parâmetros, onde o primeiro corresponde ao pino que terá seu estado alterado e o segundo corresponde ao nível que será disponibilizado na saída, HIGH para nível alto e LOW para nível baixo).

digitalWrite(10,HIGH);

Neste projeto não é necessário utilizar a função loop() (apesar de vazia, ela deve estar presente no código), pois, o conteúdo da função setup() é suficiente para cumprir o objetivo proposto.


Projeto 2: Piscando um led

Assim como no projeto anterior, este terá como objetivo acionar um led, porém, de maneira temporizada, fazendo com que o mesmo permaneça aceso somente por alguns instantes.

Código do projeto

Segue o código a ser utilizado no Arduino para piscar um led.

void setup() 
{ 
    pinMode(10,OUTPUT);
} 

void loop() 
{
    digitalWrite(10,HIGH); 
    delay(1000);
    digitalWrite(10, LOW);
    delay(1000);
}

Entendendo o software

- Definindo as configurações iniciais

Assim como no projeto anterior, o primeiro procedimento a ser realizado neste momento consiste em configurar o modo de operação do pino utilizado, de modo que, para isso, utiliza-se a função pinMode() para definir o mesmo como uma saída digital. Como dito anteriormente, este é apenas um procedimento de configuração, portanto, está inserido na função setup().

void setup() 
{ 
    pinMode(10,OUTPUT);
}

- Realizando o ciclo de acionamentos do led

Como sabemos, o conteúdo da função loop() executado repetidamente do início ao fim. A primeira linha de código existente no conteúdo citado consiste na função digitalWrite(), que por sua vez, é utilizada para acionar o led.

digitalWrite(10,HIGH);

Em seguida, utiliza-se a função delay() para fazer com que o programa espere um determinado tempo (este tempo é passado como parâmetro da função e é no formato de milissegundos) antes de prosseguir com a execução das próximas linhas de código.

delay(1000);

Posteriormente, voltamos a utilizar a função digitalWrite(), porém para desligar o led.

digitalWrite(10, LOW);

E por fim, recorremos uma segunda vez à função delay() para que o ciclo não seja reiniciado de maneira abrupta.

delay(1000);

Veja como ficou nossa função loop():

void loop() 
{
    digitalWrite(10,HIGH); 
    delay(1000);
    digitalWrite(10, LOW);
    delay(1000);
}

Projeto 3: Realizando a leitura de um botão através de uma entrada digital

Neste projeto será demonstrado como você deve proceder para realizar a leitura do estado de uma entrada digital. Nestes casos torna-se possível, por exemplo, determinar o estado de um push-button, ou seja, através da leitura do pino (configurado como uma entrada digital) no qual o mesmo está conectado, pode-se determinar se este foi pressionado ou não.

Código do projeto

Segue o código a ser utilizado no Arduino para ler o estado de uma entrada digital, acender um led caso o botão seja pressionado e mantê-lo aceso por 2 segundos.

void setup() 
{ 
  pinMode(10,OUTPUT);
  pinMode(9,INPUT); 
}

void loop() {
  
  if(digitalRead(9) == HIGH)
  {
      digitalWrite(10, HIGH);
      delay(2000);
      digitalWrite(10, LOW);
  }

}

Entendendo o software

- Definindo as configurações iniciais

Primeiramente, na função setup(), deve-se determinar os modos de operação dos pinos que serão utilizados, sendo assim, definimos o pino 10 como uma saída digital (utilizando OUTPUT no segundo parâmetro da função pinMode()), pois, este será responsável por alimentar o led em questão. Além disso, determinamos também que o pino 9 servirá como uma entrada digital, por isso, utilizamos a palavra INPUT no segundo parâmetro da função pinMode()).

  pinMode(10,OUTPUT);
  pinMode(9,INPUT);

Desta forma, a função setup() terá o seguinte conteúdo:

void setup() 
{ 
  pinMode(10,OUTPUT);
  pinMode(9,INPUT); 
}

- Realizando os acionamentos

Neste momento, antes de prosseguirmos com a explicação do conteúdo função loop(), devemos apresentar o funcionamento da função if(), que pos sua vez, consiste em um elemento muito importante para que esta parte do código possa ser entendida de maneira clara.

Entendendo a função IF

Constantemente, ao nos depararmos com um determinado problema, temos que tomar uma ou várias decisões para que o mesmo possa ser resolvido ou amenizado. Sendo assim, quanto mais informações tivermos, ou seja, quanto mais e melhores forem os resultados coletados sobre uma determinada situação, mais fácil será de tomar uma decisão sobre quais ações devem ser realizadas quando nos encontrarmos naquele tipo de situação. É neste cenário que entra a utilização da função if().

Imagine que o Vida de Silício, além produzir os melhores conteúdos e vender os melhores componentes, esteja se aventurando no meio gastronômico, mais especificamente, no ramo da confeitaria. Obviamente, como dominamos este assunto, temos uma grande variedade de receitas bolos que vão de A a Z, no entanto, somente alguns bolos possuem cobertura, os de aniversário. Sendo assim, internamente, elaboramos um algoritmo, ou passo-a-passo, para que nossa equipe esteja atenta a esta situação, veja:

Função bolo(){
 Faça o bolo;
 Se o bolo é de aniversário {
     Faça uma cobertura;
 }Senão
     Não faça uma cobertura
 }
fim

Para ficar mais fácil de visualizar esta situação, preparamos um fluxograma para você. Veja que utilizamos um parâmetro para decidir se iremos ou não executar a atividade.

Operadores lógicos

É importante ressaltar que os recursos de tomadas de decisão, como por exemplo, a função if(), devem ser utilizados juntamente com os operadores lógicos (como veremos a seguir), os quais, são responsáveis por criar as condições de execução de uma estrutura lógica de tomada de decisão.

Agora que já aprendemos o conceito da função if() e que a mesma é responsável por conferir se uma determinada sentença é verdadeira ou falsa e tomar as providências necessárias com base nesta resposta, neste código, desejamos testar se a entrada digital na qual o botão está conectado, está em nível alto, ou seja, queremos saber se o botão está pressionado (isso pode ser feito colocando o elemento, o operador de igualdade "==" e o que queremos saber se é verdade, no argumento da estrutura condicional if()).

if(digitalRead(9) == HIGH)
{
   //****** CONTEÚDO DA ESTRUTURA CONDICIONAL IF() ******
}

Caso a sentença testada anteriormente seja verdadeira, o código parte para a execução do conteúdo da mesma. Logo, caso o botão seja pressionado, ocorrerá uma situação semelhante a do exemplo 2, onde o led será aceso através da função pinMode() e permanecerá assim por 2 segundos até que seja apagado pela mesma função.

   digitalWrite(10, HIGH);
   delay(2000);
   digitalWrite(10, LOW);

Após o led ser apagado, o programa deve ficar esperando por um novo pressionamento do botão. Isto é possível pois esta parte do código está dentro da função loop(), portanto, será executada repetidamente. Veja como ficou a função loop().

void loop() {
  
  if(digitalRead(9) == HIGH)
  {
      digitalWrite(10, HIGH);
      delay(2000);
      digitalWrite(10, LOW);
  }

}

Nota: Nada irá acontecer caso o botão seja pressionado novamente entre o intervalo onde o led permanece aceso, pois, neste momento, o programa estará parado por conta da função delay().


Considerações finais

Produzimos este conteúdo para auxiliar o leitor na manipulação das entradas e saídas digitais encontradas em uma placa Arduino. Esperamos que você tenha gostado deste conteúdo, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

 

Apostila Arduino Básico

 


Arduino - Grandezas digitais, analógicas e PWM

Arduino - Grandezas digitais, analógicas e PWM

Antes de partirmos para o desenvolvimento de aplicações praticas utilizando algum tipo de sistema embarcado como por exemplo, uma placa Arduinoé necessário que o leitor tenha o conhecimento necessário para diferenciar uma grandeza analógica de uma grandeza digital. O domínio destes conceitos é muito importante para que seja possível aprender como estes sistemas trabalham com essas grandezas (de maneira mais específica, como estes sistemas realizam os processos de conversão entre as mesmas). Sendo assim, este tutorial visa trazer informações referentes aos tipos de grandezas citadas, para que então, o leitor possa adentrar com maior segurança em outros conteúdos.

[toc]

 

Diferença entre grandezas digitais e analógicas

Primeiramente, as grandezas digitais são aquelas que podem ser definidas por meio de saltos entre valores bem definidos dentro de uma faixa de valores. Um exemplo de elementos que trabalham com estas grandezas são os relógios digitais, de modo que, nestes, apesar do tempo em si variar continuamente, o visor dos mesmos mostra o tempo em saltos de um em um segundo (observe que os visores destes relógios nunca mostrarão 30,4 segundos, pois, para eles, só existem 30 e 31 segundos, ou seja, qualquer valor intermediário não está definido).

Em contrapartida, as grandezas analógicas são aquelas que, ao contrário das grandezas digitais, podem assumir infinitos valores de amplitude dentro de uma faixa de valores. O velocímetro de um carro, por exemplo, pode ser considerado analógico, pois o ponteiro gira continuamente conforme o automóvel acelera ou freia. Se o ponteiro girasse em saltos, o velocímetro seria considerado digital.

Uma analogia interessante que pode ser feita é a comparação de uma escada com uma rampa, pois, enquanto uma rampa sobe de forma contínua, assumindo todos os valores de altura entre a base e o topo, a escada sobe em saltos, com apenas alguns valores de altura definidos entre a base e o topo. A escada representa, portanto, uma grandeza digital, enquanto a rampa representa uma grandeza analógica.

É importante observar que a quantidade de degraus em uma escada define quais e quantas posições pode-se escolher. Por exemplo, suponha que um determinado degrau em uma escada está a 1,00 m de altura do solo e o próximo está a 1,20 m da mesma referência, note que, neste caso, não é possível ocupar uma posição a 1,15 m do solo porque não existe um degrau lá.

Portanto, percebe-se que ao adicionar mais degraus em uma escada, mais perto de uma rampa esta se aproximará.


Entradas e saídas digitais

Os circuitos e equipamentos elétricos ditos digitais trabalham com apenas dois níveis de tensão definidos. No caso do Arduino UNO, estes são:

  • Um nível lógico alto, correspondente a 5V;
  • Um nível lógico baixo, correspondente a 0V.

Na prática existem faixas de valores próximos a esses números em que o circuito digital entende como nível alto ou baixo. De maneira complementar, existe também uma faixa intermediária não definida que pode gerar resultados inesperados e que, portanto, deve ser evitada.

No Arduino UNO, as entradas e saídas digitais estão localizadas desde pino 0 até o pino 13. Note que, estes pinos devem ser configurados previamente para que atuem como entradas ou saídas (é importante ressaltar que alguns destes pinos possuem funções especiais, no entanto, isto será tratado posteriormente. Neste momento basta salientar a função destes enquanto entradas e saídas digitais).

Entradas digitais do Arduino Uno
Entradas digitais do Arduino Uno

 

Características de uma entrada digital

Quando configuramos um pino como entrada digital ele apresentará uma característica chamada alta impedância. Isso significa que uma pequena corrente consegue fazer com que seu estado mude. Utiliza-se essa configuração, por exemplo, para ler botões, fotodiodos entre outros, de modo que, a partir do estado lido ou das mudanças desses estados conclui-se o que está acontecendo no mundo externo e então pode-se tomar decisões baseadas nessas medidas.

Caso um determinado pino seja configurado como entrada digital mas não esteja conectado a nada, seu estado poderá ser alterado aleatoriamente em virtude de ruídos elétricos do ambiente. Para evitar esse problema utiliza-se um resistor de pull up ou pull down, cuja função é fazer com que a tensão na entrada em questão esteja bem definida quando a mesma não estiver conectada a nada.

As figuras abaixo mostram três ligações de um botão a um pino configurado como entrada digital de um Arduino UNO. Observe o que acontece em cada caso :

  • Caso 1: O estado do pino não estará bem definido fazendo com que este esteja suscetível a ruído.

 

 

  • Caso 2: Neste caso devido à presença do resistor de pull-down seu estado está bem definido e ele enxergará GND (0V). Como consequência seu estado será definido como baixo.

 

Botão com Pull-down no Arduino Uno
Botão com Pull-down

 

  • Caso 3: Neste caso devido à presença do resistor de pull-up, seu estado está bem definido e ele enxergará 5V. Sendo assim, seu estado estará definido como alto.

 

Botão com Pull-up no Arduino Uno
Botão com Pull-up

 

Como curiosidade, vale ressaltar que os microcontroladores presentes nas placas Arduino possuem resistores de pull-up construídos internamente que podem ser acessados por software.

 

Características de uma saída digital

Quando configurados nesse estado os pinos podem fornecer 0 ou 5 V fazendo com que eles drenem ou forneçam corrente. O valor máximo dessa corrente varia de placa para placa, mas, em geral, é de 30mA. Note que esta corrente é mais do que suficiente para ligar um LED de alto-brilho e alguns sensores, porém não é suficiente para ligar a maioria dos relés e motores.

Deve-se ter cuidado, pois, caso uma corrente maior que o limite passe por um pino, este poderá ser danificado.


Entradas analógicas

Com um pouco de observação, pode-se notar que o mundo é quase todo formado por variáveis analógicas, tais como posição, temperatura e pressão, de forma que, torna-se necessário saber trabalhar com esses tipos de grandezas. Um Arduino UNO, por exemplo, possui um conjunto de pinos destinados a serem utilizados como entradas analógicas.

Entradas analógicas no Arduino Uno
Entradas analógicas no Arduino Uno

Como no Arduino UNO tudo é processado de forma digital, é necessário converter as grandezas analógicas em digitais. Para realizar esta tarefa existem conversores já embutidos na placa, de forma que, deve-se apenas compreender o básico do processo de conversão para poder utilizar portas analógicas citadas anteriormente.

De volta no exemplo da escada e da rampa, a quantidade de degraus que temos em uma escada nos podemos associar o conceito de resolução. A resolução de um conversor indica o número de valores discretos (degraus) que o mesmo pode produzir. Quanto mais intervalos (degraus) existirem, mais perto estará um sinal digital de um sinal analógico.

Características de uma entrada analógica

Os conversores analógico-digital do Arduino UNO possuem uma resolução de 10 bits e o intervalo de tensão no qual são realizadas as discretizações (degraus da escada) é de 0 a 5V, ou seja, este intervalo será dividido em 1024 pedaços (210, onde 10 é a resolução do conversor ) , de forma que, o valor atribuído à tensão presente em um determinado pino será o valor discreto (um dos 1024 valores) mais próximo da mesma.

Em outras palavras, com 10 bits de resolução e um intervalo de 0 a 5V de tensão pode-se representar 1024 degraus, os quais, cada um representa um salto de 0,0048828 V (este resultado foi obtido através da razão 5/1024).

Por exemplo, suponha uma tensão de 3,25 V. o valor retornado pela conversão será:

O resultado deve ser inteiro para que o conversor consiga representá-lo, portanto, o valor 666 será escolhido por ser o degrau mais próximo. Esse valor representa uma tensão de 3,251953125 V. Repare que a utilização deste valor insere um erro de 0,001953125 V na medida em questão.


PWM - Simulando saídas analógicas

Além de possuir portas para realizar a leitura de variáveis analógicas, o Arduino UNO conta também com pinos que podem ser usados para simularem saídas analógicas através do PWM, que por sua vez, é uma técnica para obter resultados analógicos por meios digitais. No Arduino UNO, os pinos em questão são: 3,4,6,9,10 e 11, mostrados conforme a figura abaixo.

Saídas PWM
Saídas PWM

 

Este recurso consiste na geração de uma onda quadrada, na qual, controla-se a porcentagem do tempo em que a onda permanece em nível lógico alto. Esta porcentagem é chamada de Duty Cycle e sua alteração provoca mudança no valor médio da onda, indo desde 0V (0% de Duty Cycle) a 5V (100% de Duty Cycle) no caso do Arduino UNO.

O Duty Cycle a ser definido no projeto corresponde a um número inteiro, que é armazenado em um registrador 8 bits. Sendo assim, seu valor vai de 0 (0%) a 255 (100%).

 

 

De maneira mais detalhada, o Duty Cycle é a razão entre o tempo em que o sinal permanece na tensão máxima (5V no Arduino UNO) e o tempo total de oscilação, conforme ilustrado na figura abaixo:

O  Duty Cycle pode ser calculado da seguinte maneira:

Da mesma forma, pode-se também calcular o valor médio da tensão que está sendo entregue pela saída utilizada.


CONSIDERAÇÕES FINAIS

Este conteúdo foi totalmente voltado para esclarecer alguns pontos à respeito dos tipos de grandezas encontradas ao utilizar uma placa Arduino. Esperamos que você tenha gostado deste conteúdo, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Este conteúdo consiste em uma modificação/revisão do tutorial sobre grandezas digitais, analógicas e PWM do autor Ronan Largura (Eng Elétrica - UFES).

 

Apostila Arduino Básico