Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // AccelStepper - Version: 1.64.0
- #include <AccelStepper.h>
- #include <MultiStepper.h>
- #include "thingProperties.h"
- #include <Servo.h>
- #define unml 34 // moltiplicatore per associare ml a ms di funzionamento di una pompa
- // ORDINE DRINK
- #define quantiDrink 5
- // CONFIGURAZIONE DRINK
- int richiesto[quantiDrink][8] = {
- /* acqua vodka rum gin aperol tonica prosecco aaaa
- /* negroni */ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
- /* mojito */ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
- /* spritz */ { 0 , 0 , 0 , 0 , 100 , 25 , 50 , 0 },
- /* oldfashioned */ { 20 , 0 , 50 , 0 , 0 , 0 , 0 , 0 },
- /* gintonic */ { 0 , 0 , 0 , 50 , 0 , 50 , 0 , 0 },
- };
- #define RELE_BLOCCO 17
- #define EN_PIN 2
- #define su 1
- #define giu 46000
- int livello[8] = { 0, 0, 0, 0, 0, 0, 0, 0}; // da sostituire con la eeprom/flash
- AccelStepper ascensore(1, 4, 3); // driver di tipo 1 (a 2 pin) , pin 4 per gli step, pin 3 per la direzione
- Servo rubinetto;
- void setup() {
- Serial.begin(9600); // Initialize serial and wait for port to open:
- delay(1500); // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
- initProperties(); // Defined in thingProperties.h
- ArduinoCloud.begin(ArduinoIoTPreferredConnection); // Connect to Arduino IoT Cloud
- setDebugMessageLevel(2);
- ArduinoCloud.printDebugInfo();
- pinMode(RELE_BLOCCO, OUTPUT);
- pinMode(EN_PIN, OUTPUT);
- bloccaAscensore(0);
- ascensore.setMaxSpeed(3000);
- ascensore.setAcceleration(1100);
- ascensore.setCurrentPosition(0);
- delay(500);
- bloccaAscensore(1);
- rubinetto.attach(A7);
- rubinetto.write(100); //posizione iniziale föra di ball
- for(int i=6;i<=13;i++) pinMode(i,OUTPUT); //cicla tutti i pin delle pompe mettendoli a output
- spritz = false;
- gintonic = false;
- negroni = false;
- mojito = false;
- oldfashioned = false;
- }
- void loop() {
- ArduinoCloud.update();
- }
- void onSpritzChange() {
- if(spritz == true) {
- spritz = false;
- gintonic = false;
- negroni = false;
- mojito = false;
- oldfashioned = false;
- nuovoDrink(2);
- }
- }
- void onGintonicChange() {
- if(spritz == true) {
- spritz = false;
- gintonic = false;
- negroni = false;
- mojito = false;
- oldfashioned = false;
- nuovoDrink(4);
- }
- }
- void onNegroniChange() {
- if(negroni == true) {
- spritz = false;
- gintonic = false;
- negroni = false;
- mojito = false;
- oldfashioned = false;
- nuovoDrink(0);
- }
- }
- void onMojitoChange() {
- if(mojito == true) {
- spritz = false;
- gintonic = false;
- negroni = false;
- mojito = false;
- oldfashioned = false;
- nuovoDrink(1);
- }
- }
- void onOldfashionedChange() {
- if(oldfashioned == true) {
- spritz = false;
- gintonic = false;
- negroni = false;
- mojito = false;
- oldfashioned = false;
- nuovoDrink(3);
- }
- }
- void nuovoDrink(int drink)
- {
- if(!controllaFattibile(drink))
- return;
- spostaAscensore(giu);
- rubinetto.write(36);
- eroga(drink);
- sgrulla();
- rubinetto.write(100);
- spostaAscensore(su);
- }
- void spostaAscensore(int dove)
- {
- bloccaAscensore(0);
- ascensore.moveTo(dove);
- ascensore.runToPosition();
- bloccaAscensore(1);
- }
- void bloccaAscensore(bool stato)
- {
- if(stato) // solo perché serve farli in ordine diverso a seconda se sto bloccando o sbloccando
- {
- digitalWrite(EN_PIN, HIGH);
- digitalWrite(RELE_BLOCCO, LOW);
- } else {
- digitalWrite(RELE_BLOCCO, HIGH);
- digitalWrite(EN_PIN, LOW);
- }
- }
- bool controllaFattibile(int drink)
- {
- return true;
- for(int bottiglia=0; bottiglia<8; bottiglia++)
- {
- if(richiesto[bottiglia][drink] == 0)
- continue;
- if(livello[bottiglia] < (richiesto[bottiglia][drink] + 50)) // giusto da avere almeno 50ml in più di quello che mi serve
- return false;
- }
- return true;
- }
- void eroga(int drink)
- {
- for(int bottiglia=0; bottiglia<8; bottiglia++)
- {
- if(richiesto[bottiglia][drink] == 0)
- continue;
- versa(richiesto[bottiglia][drink], bottiglia);
- livello[bottiglia] -= richiesto[bottiglia][drink];
- }
- }
- void versa(int quanto,int cosa)
- {
- digitalWrite(cosa+6, HIGH);
- delay(quanto * unml);
- digitalWrite(cosa+6,LOW);
- }
- void sgrulla()
- {
- rubinetto.write(30);
- delay(200);
- rubinetto.write(44);
- delay(200);
- rubinetto.write(28);
- delay(200);
- }
Advertisement
Add Comment
Please, Sign In to add comment