// #define L298
const int B1motor = 5; // Pino 5 no B1 do L293
const int B2motor = 3; // Pino 3 no B2 do L293
// Pinos dos Sensores
const int reedSwitches[] = {8, 7, 6, 4}; // Pinos dos Reed Switches
const int botoes[] = {12, 11, 10, 9}; // Pinos dos Botões
//Estado Lógico
int estadosBotoes[] = {0, 0, 0, 0};
int vSpeed = 255; // VelMotor
byte botaoAndar = 4; // AndarBase
unsigned long delayTempo;
void setup() {
// Define os pinos do Drive como saída de sinal
pinMode(B1motor, OUTPUT);
pinMode(B2motor, OUTPUT);
// Define os pinos dos Reed Switches como entrada de sinal
for (int i = 0; i < 4; i++) {
pinMode(reedSwitches[i], INPUT);
}
// Define os pinos dos Botões como entrada de sinal em pull-up
for (int i = 0; i < 4; i++) {
pinMode(botoes[i], INPUT_PULLUP);
Serial.begin(9600);
void loop() {
if (botaoAndar == 4) {
// Verifica os botões e atualiza andar
for (int i = 0; i < 4; i++) {
estadosBotoes[i] = digitalRead(botoes[i]);
if (estadosBotoes[i] == HIGH) {
botaoAndar = i;
delayTempo = millis();
break;
if (obterAndar() != 4) {
parar();
if (obterAndar() == 4) {
descer();
}
} else {
if (obterAndar() != 4) {
if (botaoAndar > obterAndar()) {
while (botaoAndar != obterAndar()) {
subir();
} else if (botaoAndar < obterAndar()) {
while (botaoAndar != obterAndar()) {
descer();
} else {
parar();
botaoAndar = 4;
delay(100);
// Verifica os sensores Reed Switch e indica em que andar está o elevador
byte obterAndar() {
for (int i = 0; i < 4; i++) {
if (digitalRead(reedSwitches[i]) == LOW) {
return i;
return 4; // Retorna 4 se não estiver em nenhum andar
}
// Comandos de inicio do motor
void descer() {
analogWrite(B1motor, vSpeed);
analogWrite(B2motor, 0);
void subir() {
analogWrite(B1motor, 0);
analogWrite(B2motor, vSpeed);
void parar() {
analogWrite(B1motor, 0);
analogWrite(B2motor, 0);