Códigos de Exemplo


Pisca Led com Laço finito


/***************Título: Pisca led:***************
  Empresa: Escola Técnica Parobé
  Autor: Fulano de Tal
  Versão: 1.2.4
  Data: 25/10/2019
  Modificado: 25/10/2019
  Referências: www.arduino.cc  */

// Coloque aqui as bibliotecas
#include <Arduino.h> // Biblioteca exemplo

// defina os pinos aqui

// Dá um nome para cada pino
#define teclaUm 2
#define ledVermelho 13

// Variáveis

int estadoTecla = 1; // Estado inicial da tecla

// Configura o hardware

void setup() {

  pinMode(teclaUm, INPUT_PULLUP);
  pinMode(ledVermelho, OUTPUT);
}
// Função principal- Coloque aqui as estruturas
void loop() {
  // compara o valor da tecla
  estadoTecla = digitalRead(teclaUm);
  if (estadoTecla == 0) {
    ledPiscando();
  }
  // se falso
  else {
    ledApagado();
  }

}

void ledApagado() {

  digitalWrite(ledVermelho, LOW);
}

void ledPiscando() {
  // repete a rotina
  for (int x = 1; x <= 3; x++) {
    digitalWrite(ledVermelho, LOW);
    delay(1000);
    digitalWrite(ledVermelho, HIGH);
    delay(1000);
  }
}

LCD I2C


// Programa : Display LCD 16x2 e modulo I2C
// Autor : Arduino e Cia

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
void setup()
{
 lcd.begin (16,2);
}
void loop()
{
  lcd.setBacklight(HIGH);
  lcd.setCursor(0,0);
  lcd.print("Arduino e Cia !!");
  lcd.setCursor(0,1);
  lcd.print("LCD e modulo I2C");
  delay(1000);
  lcd.setBacklight(LOW);
  delay(1000);
}


Leitura de Sensores Analógicos, impressão serial/LCD simultâneas com saída PWM:


// Início do código
/*
  Título: Crie o seu
  Nome:
  Empresa: Escola Técnica Parobé
  Data:21/03/2019
  Versão: 2.2.0

  Descrição:

  Entradas Analógicas, Saída Analógica, Saida serial

  Este circuito lê a entrada analógica, mapeia e joga o resultado para a saida analógica, imprimindo 
  os valores de I/O na porta seria e Lcd, os valores de saída serão utilizados para acionar um motor 
  CC via pwm de software.
  .

  O circuito:
  - Potenciômetro ligado ao pino analógico A0.
  - Potenciômetro de contraste para o LCD;
  - LCD
  - Led ligado ao led interno da placa
  - Motor CC conectado em uma saída analógica
    O centros dos potenciômetros vão aos pinos.
    Os demais lados em +5V e GND
  
  criado em 11/03/2019
  modificado em 12/03/2019  por Luis
  Referâncias em:
  http://www.arduino.cc
  Fim do Cabeçalho*/

// Parte 2 - Inclusáo de bibliotecas

#include <Arduino.h> // Biblioteca padrão
#include <LiquidCrystal.h>

// Parte 3 - Planejamento - Definição dos pinos

#define sensorPino A0 //  define rótulo ao pino
#define pinoSaida 13 //define ao rótulo ao pino 13
#define pinoMotor 9 // define o pino do motor
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// Parte 4 Definição de variáveis efunções

void imprimeSerial();// estrutura impressão serial
void imprimeLcd ();// estrutura impressão lcd
void acionaMotor(); // estrutura PWM

int valorSensor = 0;        // valor inicial do sensor
int valorSaida = 0;        // valor inicial da saída

// Parte 5 faz o setup do hardware
void setup() {

  Serial.begin(9600);// inicializa a porta serial- reservar pinos 0 e 1
  lcd.begin(16, 2);// inicializa o lcd
}

// Parte 6 - função principal- corpo do programa

void loop() {

  valorSensor = analogRead(sensorPino);// lê entrada A) de o a 1023

  valorSaida = map(valorSensor, 0, 1023, 0, 255);// coverte entrada para saída - resolução
  analogWrite(pinoSaida, valorSaida);//escreve na saida
  imprimeSerial();
  imprimeLcd();
  acionaMotor();
  delay(2);// aguarda 2 ms
}

void imprimeSerial() {

  Serial.print("sensor = "); // imprime a palavra sensor
  Serial.print(valorSensor);// imprime o valor da entrada
  Serial.print("\t motor = ");// tabula e imprime a palavra saida
  Serial.println(valorSaida);// imprime em nova linha o valor saida

}

void imprimeLcd() {

  lcd.setCursor(0, 0);
  lcd.print("sensor = "); // imprime a palavra sensor
  lcd.print(valorSensor);// imprime o valor da entrada
  lcd.setCursor(0, 1);
  lcd.print("motor = ");//  imprime a palavra saida
  lcd.print(valorSaida);// imprime em nova linha o valor saida
  delay (10);
  }

  void acionaMotor() {

  analogWrite(pinoMotor, valorSaida);//escreve na saida

}

// Fim do código

Voltímetro 0 a 5V


// Início do Código Voltímetro 5V:

/*
  Título: Voltímetro 0 a 5V
  Nome:
  Empresa:
  Data:
  Versão: 0.1.0

  Descrição: Programa para efetuar medidas de 0 a 5V
  Entradas Analógicas, Saida serial

  Este circuito utiliza a entrada analógica, para construir um voltímetro digital de 0 a 5V.

  O circuito:
  - Potenciômetro ligado ao pino analógico A0.
    O centro do potenciômetro vai ao pino..
    Os demais lados em +5V e GND

  criado em 11/03/2019
  modificado em 12/03/2019  por Luis
  Referâncias em:
  http://www.arduino.cc/en/Tutorial/AnalogInOutSerial
  Fim do Cabeçalho*/

#include <Arduino.h> // Biblioteca opcional

// Definição dos pinos
#define entradaVoltimetro  A0 // Rótulo para o pino A0

// declaração de varáiveis e funções

void medirEntrada ();
void imprimirSerial();
int valorSensor = 0;
float media = 0;
float acumul = 0;

// função de configuraçao

void setup() {

  Serial.begin(9600);// inicializa serial em 9600 bps
}

void loop() {

  medirEntrada();// chama rotina para medir
  imprimirSerial(); // chama rotina de impressão
  delay(100);
}


// Rotina para medir 100 vezes o valor de entrada
void medirEntrada () {

  // Efetua 100 vezes a medida, calcula a média e converte o fundo de escala

  for (int x = 1; x < 100; x++) {
    valorSensor = analogRead(entradaVoltimetro);// lê porta analógica
    acumul = acumul + valorSensor; // soma o valor acumulado
  }
  acumul = acumul / 100; // calcula a média
  media = acumul * 5 / 1023; // Converte para o fundo de escala 5V
}
// Rotina para impressão serial

void imprimirSerial() {
  Serial.print("sensor = ");
  Serial.print(valorSensor);
  Serial.print("\t tensão= ");
  Serial.println(media, 1);
}

// Fim do código

Medidor e Controlador de temperatura com LM 35

// Início do Código
/*
  Título: Medidor e Controlador de Temperatura com LM 35
  Nome:Professor Aransegui
  Empresa:Escola Técnica Parobé
  Data:12/03/2019, release 27/03/2019
  Versão: 0.0.0

  Descrição: Medidor de 0 a 150 graus Celsius com alarme

  Entradas Analógicas, Saida serial

  Este circuito utiliza a entrada analógica, para construir um termômetro digital de 0 a 150.


  O circuito:

  - Sensor LM 35
  Pino 2 ligado a porta analógica A0
  Pino 1 +5V
  Pino 3 em  GND

  criado em 11/03/2019

  modificado em 12/03/2019  por Luis
  Referâncias em:
  http://www.arduino.cc/en/Tutorial/AnalogInOutSerial
  Fim do Cabeçalho*/

#include <Arduino.h> // Biblioteca opcional

// Definição dos pinos
#define entradaLm35  A0 // Rótulo para o pino A0
#define ledPino 13

// declaração de varáiveis e estruturas que serão utilizadas

void medirEntrada ();
void imprimirSerial();
void alarmeTemperatura ();
int valorSensor = 0;
float media = 0;
float acumul = 0;
float fundoEscala = 150;

// função de configuraçao

void setup() {

  Serial.begin(9600);// inicializa serial em 9600 bps

  pinMode(ledPino, OUTPUT);
}

void loop() {

  medirEntrada();// chama rotina para medir

  imprimirSerial(); // chama rotina de impressão

  delay(100);

}


// Rotina para medir 100 vezes o valor de entrada e calcular a édia
void medirEntrada () {

  // Efetua 100 vezes a medida, calcula a média e converte o fundo de escala


  for (int x = 1; x < 100; x++) {

    valorSensor = analogRead(entradaLm35);// lê porta analógica
    acumul = acumul + valorSensor; // soma o valor acumulado
  }
  acumul = acumul / 100; // calcula a média
  media = acumul * fundoEscala / 1023; // Converte para o fundo de escala para 150
  if (media >= 100) {
    alarmeTemperatura (); // chama a função

  }

}


// Rotina de Alarme

void alarmeTemperatura () {

  // Início de um loop infinito

  while (true) {

    digitalWrite(ledPino, HIGH);

    delay(500);
    digitalWrite(ledPino, LOW);
    delay(500);
    Serial.println("Superaquecimento, corrija e Pressione Reset para Reiniciar ");
    delay(10);

  }

}
// Rotina para impressão serial

void imprimirSerial() {
  Serial.print("sensor = ");
  Serial.print(valorSensor);
  Serial.print("\t temperatura= ");
  Serial.println(media, 1);
}

// Fim do Código



Dicas Para declarar variáveis, consulte a documentação e compare os conteúdos,










codigo1
// Inicio do Código

int input1 = 4;
int enable1 = 2;
int input2 = 5;
int button1 = 6;
int button2 = 7;
 
void setup(){
  pinMode(input1, OUTPUT);
  pinMode(enable1, OUTPUT);
  pinMode(input2, OUTPUT);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
}
 
void rotateLeft(){
  digitalWrite(enable1, HIGH);
  digitalWrite(input2, LOW);
  digitalWrite(input1, HIGH);
}
 
void rotateRight(){
  digitalWrite(enable1, HIGH);
  digitalWrite(input1, LOW);
  digitalWrite(input2, HIGH);
}
 
void parar(){
  digitalWrite(enable1, LOW);
  digitalWrite(input1, LOW);
  digitalWrite(input2, LOW);
}
 
void loop(){
  while(digitalRead(button1) == HIGH){
    rotateLeft();
  }
 
  while(digitalRead(button2) == HIGH){
    rotateRight();
  }
 
  parar();
}
// Fim do Código

Interrupções - Parada de Emergência


// Como parar um código

// Daremos um nome ao pino que ficara o LED:

 #define  ledPino 13


 #define botaoPino 2


void interrupcao(){

 digitalWrite(ledPino, HIGH); // Liga o LED (HIGH = nível lógico alto)


 delay(5000);


 }


// Esta função "setup" roda uma vez quando a placa e ligada ou resetada



 void setup() {


 pinMode(ledPino, OUTPUT); // Configura o pino do led (digital) como saída


 attachInterrupt(botaoPino,interrupcao,RISING); //Configurando a interrupção


 }


// Função que se repete infinitamente quando a placa é ligada

 void loop() {


 digitalWrite(ledPino, HIGH); // Liga o LED (HIGH = nível lógico alto)


 delay(1000); // Espera um segundo


 digitalWrite(ledPino, LOW);// Desliga o LED (LOW = nível lógico baixo)


 delay(1000); // Espera um segundo


 }



Comunicação entre duas portas


// Início do código
/*
  Recebe as duas portas seriais de software,
  envia para a porta serial do hardware.
  Para escutar em uma porta de software, você chama port.listen ().
  Ao usar duas portas seriais de software, você precisa alternar portas
  por listen () em cada um de cada vez. Escolha um tempo lógico para alternar
  portas, como o fim de uma transmissão esperada, ou quando o
  buffer está vazio. Este exemplo muda as portas quando não há nada
  mais para ler de uma porta

  O circuito:

  Dois dispositivos que se comunicam serialmente são necessários.
   TX do primeiro dispositivo serial conectado ao pino digital 10 (RX), RX ao pino 11 (TX)
   TX de segundo dispositivo serial conectado ao pino digital 8 (RX), RX ao pino 9 (TX)

  Nota:

  Nem todos os pinos no Mega e Mega 2560 suportam interrupções de mudança,
  então somente o seguinte pode ser usado para RX:
  10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

  Nem todos os pinos no suporte Leonardo mudam de interrupção,

  então somente o seguinte pode ser usado para RX:
  8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

  criado em 18 de abril de 2011

  modificado 19 março 2016
  de Tom Igoe
  baseado no TwoPortRXExample de Mikal Hart

  Este código de exemplo está no domínio público.

*/
#include <SoftwareSerial.h>
// software serial #1: RX = digital pino 10, TX = digital pino 11
SoftwareSerial portaUm(10, 11);

// software serial #2: RX = digital pino 8, TX = digital pino 9
// no Mega, use outros pinos, já que 8 e 9 não funcionam no Mega
SoftwareSerial portaDois(8, 9);

void setup() {
  // Abra as comunicações seriais e aguarde a abertura da porta:
  Serial.begin(9600);
  while (!Serial) {
    // aguarde a porta serial se conectar. Necessário apenas para porta USB nativa
  }
  // Inicializa as duas portas
  portaDois.begin(9600);
  portaUm.begin(9600);

}
// Inicie cada porta serial do software

void loop() {
  // Por padrão, a última porta inicializada está escutando.
  // quando você quiser ouvir em uma porta, selecione-a explicitamente:
  portaUm.listen();
  Serial.println("Dados da porta Um:");
  // enquanto houver dados chegando, leia
  // e envie para a porta serial do hardware:
  while (portaUm.available() > 0) {
    char entradaByte = portaUm.read();
    Serial.write(entradaByte);
    delay(100);
  }
  // linha em branco para separar os dados das duas portas:
  Serial.println();
  // Agora escute na segunda porta
  portaDois.listen();
  // enquanto houver dados chegando, leia
  // e envie para a porta serial do hardware:
  Serial.println("Dados da porta dois:");
  while (portaDois.available() > 0) {
    char entradaByte = portaDois.read();
    Serial.write(entradaByte);
    delay(100);
  }

  // linha em branco para separar os dados das duas portas:

  Serial.println();
}


// Final do código


Estrutura para Teclado Utilizando apenas uma porta analógica


// Início do Código
/*
  Modelo de Prescaller
  Luis Antonio Aransegui
  13/04/2019
  Versão:0.0.0

  Este exemplo é baseado no código:


  http://www.arduino.cc/en/Tutorial/AnalogInOutSerial

*/

// Definição dos pinos
#define analogInPin  A0  // Pino da entrada analógica

// Declaração de ISRs(opcional)

void imprimeMensagem();
void teclaZero();// função 0
void teclaUm();// função  1
void teclaDois();// função  2
void teclaTres();// função  3
void teclaQuatro();// função 4

// Declaração de variáveis
int sensorValue = 0;        // valor inicial do sensor

// Configuração

void setup() {
  // inicialização da porta serial
  Serial.begin(9600);

}

void loop() {

  // leitura do sensor

  sensorValue = analogRead(analogInPin);
  delay(100);
  // Testes da porta analógica

  //Próximo a 5V

  if (sensorValue >= 1020) {

    imprimeMensagem ();

    delay(100);

  }


  // Tecla 0, formada por Divisor de Tensão 10K e 22K


  if (sensorValue <= 710  && sensorValue >= 700) {


    teclaZero();

    delay(100);

  }


  // Tecla 1, formada por Divisor de Tensão 10K e 18K

  if (sensorValue <= 660 && sensorValue >= 650) {

    teclaUm();

    delay(100);

  }


  // Tecla 0, formada por Divisor de Tensão 10K e 15K

  if (sensorValue <= 620 && sensorValue >= 610) {
    teclaDois();
    delay(100);

  }


  // Tecla 0, formada por Divisor de Tensão 10K e 12K

  if (sensorValue <= 560 && sensorValue >= 550) {
    teclaTres();
    delay(100);

  }


  // Tecla 4, formada por Divisor de Tensão 10K e 10K

  if (sensorValue <= 520 && sensorValue >= 510) {
    teclaQuatro();
    delay(100);

  }

}
// Estruturas de controle
void teclaZero() {
  // aqui vai o código numero zero
  Serial.print("Tecla 0= ");
  Serial.println(sensorValue);

}

void teclaUm() {
  // aqui vai o codigo 1
  Serial.print("Tecla 1 = ");
  Serial.println(sensorValue);
}

void teclaDois() {
  // aqui vai o código do 2
  Serial.print("Tecla 2 = ");
  Serial.println(sensorValue);
}

void teclaTres() {
  // aqui vai o código do 3
  Serial.print("Tecla 3 = ");
  Serial.println(sensorValue);
}

void teclaQuatro() {
  // aqui vai o código do 4
  Serial.print("Tecla 4 = ");
  Serial.println(sensorValue);
}
void imprimeMensagem() {
  // |Aqui vai o código desejado
  Serial.println("Pressione uma Tecla");
  delay(100);
}


// Final do Código

// Código Exemplo, Conclual

//Código em Boas Práticas par interpretação de sensores de saídas analógicas

/*  Parte 1 - Cabeçalho
  Título: Controle de Sensores
  Nome: Luis Antonio Aransegui
  Empresa: Escola Técnica Parobé
  Data: 12/03/2019
  Midificado em 20/08/2019
  Versão: 0.1.0

  Descrição:

  Entradas Analógicas, Saída Analógica, Saida serial
  Este circuito lê a entrada analógica, mapeia e joga o resultado para a saída analógica.
  Também imprime na saída serial.

  O circuito:


   Potenciômetro ligado ao pino analógico A0.

    O centro do potenciômetro vai ao pino..
    Os demais lados em +5V e GND
    Led conectado no pino 9 ao terra

  criado em 11/03/2019
  modificado em 12/03/2019  por Luis
  Referências em:
  http://www.arduino.cc/en/Tutorial/AnalogInOutSerial
  Fim do Cabeçalho

*/

// Parte 2 - Inclusão de bibliotecas

#include <Arduino.h> // Biblioteca padrão

// Parte 3 - Planejamento - Definição dos pinos

#define sensorPino A0 //  define rótulo ao pino
#define pinoSaida 13 //define ao rótulo ao pino 13

// Parte 4 Definição de variáveis

int valorSensor = 0;        // valor inicial do sensor
int valorSaida = 0;        // valor inicial da saída

// Parte 5  faz o setup do hardware
void setup() {

  Serial.begin(9600);// inicializa a porta serial- reservar pinos 0 e 1
}
// Parte 6 - função principal- corpo do programa

void loop() {

  leituraSensor();
  acionaMotor();
  // imprime no monitor serial
  imprimeSerial();
  imprimeLcd();
  delay(100);// aguarda 2 ms
}

void imprimeSerial() {

  Serial.print("sensor = "); // imprime a palavra sensor
  Serial.print(valorSensor);// imprime o valor da entrada
  Serial.print("\t saida = ");// tabula /t e imprime a palavra saida
  Serial.println(valorSaida);// imprime em nova linha o valor saida

}

void leituraSensor() {

  valorSensor = analogRead(sensorPino);// lê entrada A0) de 0 a 1023
  valorSaida = map(valorSensor, 0, 1023, 0, 255);// converte entrada para saída - resolução

}
// Rotina para Acionar motor
void acionaMotor() {
  analogWrite(pinoSaida, valorSaida); //escreve na saida
}
// Imprime na Serial
void imprimeLcd() {
  // aqui vai o codigo
}


Schimitt Trigger

 
O comparador é uma das peças mais importantes para os sistemas digitais. Ele tem a função de decidir se a entrada está em nível alto ou baixo, independente do sinal de entrada ser digital ou analógico.
Neste post veremos como comparadores Schmitt-trigger (comparadores com histerese) fazem uso de realimentação positiva para evitar ruídos de transição de estado.





Comparador Schmitt-trigger inversor e não-inversor
Comparador Schmitt-trigger inversor e não-inversor
 
Entretanto muitas vezes a sua              montagem necessita de um hardware maior e quando tarbalhamos com         microcontroladores podemos utilizar o próprio chip e mascarar este hardware através do software. O código abaixo implementa um schimit trigger por software na palataforma Arduino.

 /***************Título: Schimit Trigger or Software***************

  Empresa: Escola Técnica Parobé
  Autor: Professor Luis Aransegui
  Versão: 0.0.0
  Data: 03/04/2020
  Modificado: 03/04/2020
  Referências: www.arduino.cc  */

// Rotulando os pinos

#define pinoEntrada 4
#define pinoSaida 5


// Definindo os pinos

void setup() {
  pinMode(pinoEntrada, INPUT_PULLUP);
  pinMode(pinoSaida, OUTPUT);
}
// Rotina de teste
void loop() {
 
  schimitTrigger ();
 
}

// Rotina do comparador schimit
void schimitTrigger () {
    boolean valorEntrada = digitalRead(pinoEntrada);
  digitalWrite(pinoSaida, valorEntrada);
 
}

Implemente isto no seu código e evitaràs ruídos de teclas ou na entrada de um encoder por exemplo, aonde o pino 4 será a entrada do sensor e o pino 5 a saída para o pino desejado, por exemplo pino 2 ou 3 do Uno para gerar uma interrupção.

Exemplo de Código com Interrrupção:

/***************Título: Schimit Trigger por Software***************
  Empresa: Escola Técnica Parobé
  Autor: Professor Luis Aransegui
  Versão: 1.1.0
  Data: 03/04/2020
  Modificado: 03/04/2020
  Referências: www.arduino.cc
 
  Este código paralisa o programa quando o botão de pânico(interrupção for apertado

  Neste exemplo o pino 5 deverá estar conectado ao pino 2 da int

  Lembre que boas práticas são importantes e as demais funções do código devem estar em estruturas separadas
 
  */

#define pinoInt 2
#define pinoEntrada 4
#define pinoSaida 5
#define pinoLed 13

void setup() {
  pinMode(pinoEntrada, INPUT_PULLUP);
  pinMode(pinoSaida, OUTPUT);
   pinMode(pinoLed, OUTPUT);
  pinMode(pinoInt, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(pinoInt),paraTudo, CHANGE);
}

void loop() {
 
  schimitTrigger ();
  maquinaFuncionando();
 
}

void schimitTrigger () {
 
  boolean valorEntrada = digitalRead(pinoEntrada);
  digitalWrite(pinoSaida, valorEntrada);
 
}

// Função da Interrupçao Gerando Alarme
void paraTudo(){

  while(true){

    digitalWrite(pinoLed,HIGH);
    delay(500);
    digitalWrite(pinoLed,LOW);
    delay(500);
   
  }
 
}

// Equipamento Funcionando

void maquinaFuncionando() {

    //aqui vai a estrutura de funcionamento até a parada

  }

Teste e Acerte



Comentários

  1. Precisamos de espaço. Em tempos de home office, cada centímetro vale ouro. Na hora de jogar, então, o espaço se torna ainda mais fundamental. Por isso, foi com muita expectativa que testamos o recém-lançado teclado mecânico Logitech K835 TKL.
    teste de teclas

    ResponderExcluir
  2. com a popularidade vêm os desafios, incluindo ataques cibernéticos como o Trava Zap. Este artigo busca explicar o que é o Trava Zap, os problemas que ele causa e como os usuários podem se proteger contra essa ameaça
    Trava Zap

    ResponderExcluir

Postar um comentário

Mais acessadas