Codigo Arduino Para Controle de Motores com Ponte h e um lcd i2c
Por: Jonatham Junior • 29/4/2023 • Trabalho acadêmico • 841 Palavras (4 Páginas) • 109 Visualizações
#include <LiquidCrystal_I2C.h>
#include "DFRobot_RGBLCD1602.h"
#include <Wire.h>
#define IN1 2 // Conecta com pino IN2 pelo motor
#define IN2 3 // Conecta com pino IN1 pelo motor
#define IN3 6 // Conecta com pino IN4 pelo motor
#define IN4 7 // Conecta com pino IN3 pelo motor
#define B1 4 // Botão que inverte a rotação do motor 1
#define B2 8 // Botão que inverte a rotação do motor 2
#define ENA 9 // Controla velocidade do motor 1
#define ENB 10 // Controla velocidade do motor 2
float pot1; // Variável que contém o valor do potenciômetro 1
float pot2; // Variável que contém o valor do potenciômetro 2
int x1 = 0; // Variável que controla a direção de rotação do M1
int x2 = 0; // Variável que controla a direção de rotação do M2
LiquidCrystal_I2C lcd(0x20, 16, 2);
DFRobot_RGBLCD1602 lcd2(/*lcdCols*/16,/*lcdRows*/2); //16 characters and 2 lines of show
void setup() {
// Inicia o display LCD
lcd.init();
lcd.backlight();
lcd.clear();
// // Inicia o display LCD2
lcd2.init();
lcd.backlight();
lcd2.clear();
// Inicia os pinos de saída (OUTPUT) e entrada (INPUT)
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(B1, INPUT);
pinMode(B2, INPUT);
// Inicia a rotação dos motores
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
// Configura o display para a identificação inicial dos motores
lcd.setCursor(0,0);
lcd.print("M1(V):");
lcd.setCursor(0,1);
lcd.print("M2(V):");
lcd.setCursor(8,0);
lcd.print("+");
lcd.setCursor(8,1);
lcd.print("+");
// Configura o display2 para a identificação inicial dos motores
lcd2.setCursor(0,0);
lcd2.print("M1(V):");
lcd2.setCursor(0,1);
lcd2.print("M2(V):");
lcd2.setCursor(8,0);
lcd2.print("+");
lcd2.setCursor(8,1);
lcd2.print("+");
}
void loop() {
// Coleta dados dos potenciômetros e divide por 1023
pot1 = analogRead(A0);
pot2 = analogRead(A1);
// Escreve dados lidos pelo potenciômetro nos PWMs de cada motor
analogWrite(ENA, (pot1/1023) * 255);
analogWrite(ENB, (pot2/1023) * 255);
// Verifica se um dos botões está ligado
if((digitalRead(B1) == 0) || (digitalRead(B2) == 0))
{
// Definição da direção de rotação do M1 a partir de x1
if(digitalRead(B1) == 0)
{
delay(50); // Atraso do botão
if(x1 == 0)
{
digitalWrite(IN1, HIGH);
...