// Pinos dos Leds
const int ledMotor1 = 6;
const int ledMotor2 = 3;
const int ledMotor3 = 9;
const int ledMotor4 = 5;
// Pinos dos botões
const int botaodecolar = 2; // Botão decolar, liga os motores
const int botaopousar = 4; // Botão pousar, desliga motores
const int botaofrente = 7; // Botão para frente
const int botaotras = 8; // Botão para trás
const int botaoesquerda = 10;// Botão para esquerda
const int botaodireita = 11; // Botão para direita
// A bool contém um de dois valores, true ou false. - Arduino Reference
bool estavoando = false;
int motorvel1 = 0; // velocidade(vel)
int motorvel2 = 0;
int motorvel3 = 0;
int motorvel4 = 0;
const int incrementobrilho = 5;
const int brilhomaximo = 255;
const int brilhominimo = 0;
const int brilhomovimento = 50; // Brilho de movimento
void setup() {
// Inicializa os pinos dos Leds como saídas
pinMode(ledMotor1, OUTPUT);
pinMode(ledMotor2, OUTPUT);
pinMode(ledMotor3, OUTPUT);
pinMode(ledMotor4, OUTPUT);
// Inicializa os pinos dos botões como entradas
pinMode(botaodecolar, INPUT_PULLUP);
pinMode(botaopousar, INPUT_PULLUP);
pinMode(botaofrente, INPUT_PULLUP);
pinMode(botaotras, INPUT_PULLUP);
pinMode(botaoesquerda, INPUT_PULLUP);
pinMode(botaodireita, INPUT_PULLUP);
// Inicializa o monitor serial
Serial.begin(9600);
}
// == Compara a variável à esquerda com o valor ou variável à direita do operador. - Arduino Reference
// && O E lógico resulta em verdadeiro, apenas se ambos os operandos são verdadeiros, operadores boleanos. - Arduino Reference
// ! O NÃO lógico resulta em verdadeiro se o operando é falso, e vice-versa. - Arduino Reference
// || - O OU lógico resulta em verdadeiro se pelo menos um dos operandos é verdadeiro.- Arduino Reference
void loop() {
if (digitalRead(botaodecolar) == LOW && !estavoando) {
decolar();
}
if (digitalRead(botaopousar) == LOW && estavoando) {
pousando();
}
if (estavoando) {
controlemotores();
}
if (digitalRead(botaofrente) == LOW || digitalRead(botaotras) == LOW ||
digitalRead(botaoesquerda) == LOW || digitalRead(botaodireita) == LOW) {
mostrarBrilho();
}
mostrarBrilho();
}
void decolar() {
while (motorvel1 < brilhomaximo || motorvel2 < brilhomaximo ||
motorvel3 < brilhomaximo || motorvel4 < brilhomaximo) {
motorvel1 = min(motorvel1 + incrementobrilho, brilhomaximo);
motorvel2 = min(motorvel2 + incrementobrilho, brilhomaximo);
motorvel3 = min(motorvel3 + incrementobrilho, brilhomaximo);
motorvel4 = min(motorvel4 + incrementobrilho, brilhomaximo);
analogWrite(ledMotor1, motorvel1);
analogWrite(ledMotor2, motorvel2);
analogWrite(ledMotor3, motorvel3);
analogWrite(ledMotor4, motorvel4);
delay(50); // Ajuste para controlar a velocidade de decolagem
mostrarBrilho();
}
estavoando = true;
Serial.println("Motores ligados - Drone decolando");
}
void pousando() {
while (motorvel1 > brilhominimo || motorvel2 > brilhominimo ||
motorvel3 > brilhominimo || motorvel4 > brilhominimo) {
motorvel1 = max(motorvel1 - incrementobrilho, brilhominimo);
motorvel2 = max(motorvel2 - incrementobrilho, brilhominimo);
motorvel3 = max(motorvel3 - incrementobrilho, brilhominimo);
motorvel4 = max(motorvel4 - incrementobrilho, brilhominimo);
analogWrite(ledMotor1, motorvel1);
analogWrite(ledMotor2, motorvel2);
analogWrite(ledMotor3, motorvel3);
analogWrite(ledMotor4, motorvel4);
delay(50); // Ajuste para controlar a velocidade de pouso
mostrarBrilho();
}
estavoando = false;
Serial.println("Motores desligados - Drone pousando");
}
void controlemotores() {
if (digitalRead(botaofrente) == LOW) {
Serial.println("Drone indo para frente");
ajustavelocidademotores(ledMotor4, ledMotor3, ledMotor1, ledMotor2);
} else if (digitalRead(botaotras) == LOW) {
Serial.println("Drone indo para trás");
ajustavelocidademotores(ledMotor1, ledMotor2, ledMotor4, ledMotor3);
} else if (digitalRead(botaoesquerda) == LOW) {
Serial.println("Drone indo para a esquerda");
ajustavelocidademotores(ledMotor1, ledMotor4, ledMotor2, ledMotor3);
} else if (digitalRead(botaodireita) == LOW) {
Serial.println("Drone indo para a direita");
ajustavelocidademotores(ledMotor3, ledMotor2, ledMotor4, ledMotor1);
} else {
resetavelocidademotores();
}
analogWrite(ledMotor1, motorvel1);
analogWrite(ledMotor2, motorvel2);
analogWrite(ledMotor3, motorvel3);
analogWrite(ledMotor4, motorvel4);
}
void ajustavelocidademotores(int ledMax1, int ledMax2, int ledMin1, int ledMin2) {
int movimento1 = (ledMax1 == ledMotor1 || ledMax2 == ledMotor1) ? brilhomaximo : brilhomovimento;
int movimento2 = (ledMax1 == ledMotor2 || ledMax2 == ledMotor2) ? brilhomaximo : brilhomovimento;
int movimento3 = (ledMax1 == ledMotor3 || ledMax2 == ledMotor3) ? brilhomaximo : brilhomovimento;
int movimento4 = (ledMax1 == ledMotor4 || ledMax2 == ledMotor4) ? brilhomaximo : brilhomovimento;
while (motorvel1 != movimento1 || motorvel2 != movimento2 || motorvel3 != movimento3 || motorvel4 != movimento4) {
if (motorvel1 > movimento1) motorvel1 = max(motorvel1 - incrementobrilho, movimento1);
if (motorvel2 > movimento2) motorvel2 = max(motorvel2 - incrementobrilho, movimento2);
if (motorvel3 > movimento3) motorvel3 = max(motorvel3 - incrementobrilho, movimento3);
if (motorvel4 > movimento4) motorvel4 = max(motorvel4 - incrementobrilho, movimento4);
analogWrite(ledMotor1, motorvel1);
analogWrite(ledMotor2, motorvel2);
analogWrite(ledMotor3, motorvel3);
analogWrite(ledMotor4, motorvel4);
delay(50); // Ajuste para controlar a velocidade de transição
mostrarBrilho();
}
}
void resetavelocidademotores() {
motorvel1 = brilhomaximo;
motorvel2 = brilhomaximo;
motorvel3 = brilhomaximo;
motorvel4 = brilhomaximo;
}
void mostrarBrilho() {
Serial.print(" Motor 1: ");
Serial.print(motorvel1);
Serial.print(" Motor 2: ");
Serial.print(motorvel2);
Serial.print(" Motor 3: ");
Serial.print(motorvel3);
Serial.print(" Motor 4: ");
Serial.println(motorvel4);
delay(100);
}