DrinkMaker

DrinkMaker: seu barman automatizado. Prepare seus drinks com o toque de um botão.

BeginnerWork in progress20 hours49
DrinkMaker

Things used in this project

Story

Read more

Schematics

Esquema Elétrico

Esquema elétrico das ligações entre a placa STM núcleo e os periféricos de entrada e saída

Code

main.cpp

C/C++
Código referente ao projeto de Sistemas Embarcados, DrinkMaker.
#include <Arduino.h>
#include <WiFi.h>
#include <FirebaseESP32.h>
#include <addons/RTDBHelper.h>

// Definir Bombas
const int pin27 = 27;
const int pin26 = 26;
const int pin25 = 25;
const int pin33 = 33;

// Definir Botoes
const int pin5 = 19;
const int pin18 = 21;
const int pin19 = 18;

int buttonState5 = HIGH; // Inicializa como HIGH porque est usando PULLUP
int buttonState18 = HIGH;
int buttonState19 = HIGH;

int lastButtonState5 = HIGH; // Estado anterior dos botes
int lastButtonState18 = HIGH;
int lastButtonState19 = HIGH;

unsigned long lastDebounceTime5 = 0; // ltimo tempo de debounce
unsigned long lastDebounceTime18 = 0;
unsigned long lastDebounceTime19 = 0;

const unsigned long debounceDelay = 50; // Tempo de debounce em milissegundos

int value = 0;

/* 1. Define the WiFi credentials */
#define WIFI_SSID "uaifai-brum"
#define WIFI_PASSWORD "bemvindoaocesar"

/* 2. If work with RTDB, define the RTDB URL and database secret */
#define DATABASE_URL "https://drinkmaker-703cd-default-rtdb.firebaseio.com"
#define DATABASE_SECRET "Za9d8CiWH3mlClC4ALTPKquHvZB89lKAQIoKyKy9"

/* 3. Define the Firebase Data object */
FirebaseData fbdo;

/* 4. Define the FirebaseAuth data for authentication data */
FirebaseAuth auth;

/* Define the FirebaseConfig data for config data */
FirebaseConfig config;

unsigned long dataMillis = 0;

void setup()
{
    Serial.begin(9600);

    pinMode(pin5, INPUT_PULLUP);
    pinMode(pin18, INPUT_PULLUP);
    pinMode(pin19, INPUT_PULLUP);

    pinMode(pin27, OUTPUT);
    pinMode(pin26, OUTPUT);
    pinMode(pin25, OUTPUT);
    pinMode(pin33, OUTPUT);

    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
    Serial.print("Connecting to Wi-Fi");
    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.print(".");
        delay(300);
    }
    Serial.println();
    Serial.print("Connected with IP: ");
    Serial.println(WiFi.localIP());
    Serial.println();

    Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);

    config.database_url = DATABASE_URL;
    config.signer.tokens.legacy_token = DATABASE_SECRET;

    Firebase.reconnectNetwork(true);
    fbdo.setBSSLBufferSize(4096, 1024);
    Firebase.begin(&config, &auth);
}

void loop()
{
    String path = "/test/drinks";

    if (Firebase.getInt(fbdo, path)) {
        if (fbdo.dataType() == "int") {
            value = fbdo.intData();
            Serial.print("Received value from Firebase: ");
            Serial.println(value);
            delay(100);
        }
    } else {
        Serial.print("Error getting value: ");
        Serial.println(fbdo.errorReason());
    }

    int reading5 = digitalRead(pin5);
    int reading18 = digitalRead(pin18);
    int reading19 = digitalRead(pin19);

    if (reading5 != lastButtonState5) {
        lastDebounceTime5 = millis();
    }
    if (reading18 != lastButtonState18) {
        lastDebounceTime18 = millis();
    }
    if (reading19 != lastButtonState19) {
        lastDebounceTime19 = millis();
    }

    if ((millis() - lastDebounceTime5) > debounceDelay) {
        if (reading5 != buttonState5) {
            buttonState5 = reading5;
        }
    }
    if ((millis() - lastDebounceTime18) > debounceDelay) {
        if (reading18 != buttonState18) {
            buttonState18 = reading18;
        }
    }
    if ((millis() - lastDebounceTime19) > debounceDelay) {
        if (reading19 != buttonState19) {
            buttonState19 = reading19;
        }
    }

    lastButtonState5 = reading5;
    lastButtonState18 = reading18;
    lastButtonState19 = reading19;
    
    Serial.print("Press a button or Firebase this shit! \n");

    if (value == 1 || buttonState5 == LOW) { // Caipirinha
        Serial.println("Entrou na condicao 1");
        delay(1000);
        digitalWrite(pin33, HIGH);
        delay(4000);
        digitalWrite(pin33, LOW);
        delay(1000);
        digitalWrite(pin26, HIGH);
        delay(2000);
        digitalWrite(pin26, LOW);
        Firebase.setInt(fbdo, path, 0);
        buttonState5 = 1;
    }
    if (value == 2 || buttonState18 == LOW) {
        Serial.println("Entrou na condicao 2");
        delay(1000);
        digitalWrite(pin33, HIGH);
        delay(4000);
        digitalWrite(pin33, LOW);
        delay(1000);
        digitalWrite(pin25, HIGH);
        delay(2000);
        digitalWrite(pin25, LOW);
        Firebase.setInt(fbdo, path, 0);
        buttonState18 = 1;
    }
    if (value == 3 || buttonState19 == LOW) {
        Serial.println("Entrou na condicao 3");
        delay(1000);
        digitalWrite(pin33, HIGH);
        delay(4000);
        digitalWrite(pin33, LOW);
        delay(1000);
        digitalWrite(pin27, HIGH);
        delay(5000);
        digitalWrite(pin27, LOW);
        Firebase.setInt(fbdo, path, 0);
        buttonState19 = 1;
    }
}

Drinkmaker Interface

Credits

Lucas Silvestre de Barros
2 projects • 2 followers
JOAO RICARDO LEITAO BARROS
0 projects • 1 follower
André Bacelar
0 projects • 2 followers
DAVID IAN PEREIRA PAULA
0 projects • 2 followers

Comments