overvolt

Bar Domotico V1

Feb 20th, 2024
1,921
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.64 KB | None | 0 0
  1. // AccelStepper - Version: 1.64.0
  2. #include <AccelStepper.h>
  3. #include <MultiStepper.h>
  4.  
  5. #include "thingProperties.h"
  6.  
  7. #include <Servo.h>
  8.  
  9. #define unml 34  // moltiplicatore per associare ml a ms di funzionamento di una pompa
  10.  
  11. //   ORDINE DRINK
  12. #define quantiDrink 5
  13.  
  14.  
  15. //   CONFIGURAZIONE DRINK
  16. int richiesto[quantiDrink][8] = {
  17.   /*                       acqua   vodka   rum   gin   aperol tonica prosecco aaaa
  18.   /*  negroni       */  {    0  ,    0 ,    0 ,   0   ,   0  ,    0  ,   0  ,   0  },
  19.   /*  mojito        */  {    0  ,    0 ,    0 ,   0   ,   0  ,    0  ,   0  ,   0  },
  20.   /*  spritz        */  {    0  ,    0 ,    0 ,   0   ,  100 ,   25  ,  50  ,   0  },
  21.   /*  oldfashioned  */  {    20 ,    0 ,   50 ,   0   ,   0  ,    0  ,   0  ,   0  },
  22.   /*  gintonic      */  {    0  ,    0 ,    0 ,  50   ,   0  ,   50  ,   0  ,   0  },
  23. };
  24.  
  25. #define RELE_BLOCCO 17
  26. #define EN_PIN 2
  27.  
  28. #define su 1
  29. #define giu 46000
  30.  
  31. int livello[8] = { 0, 0, 0, 0, 0, 0, 0, 0};  // da sostituire con la eeprom/flash
  32.  
  33.  
  34. AccelStepper ascensore(1, 4, 3); // driver di tipo 1 (a 2 pin) , pin 4 per gli step, pin 3 per la direzione
  35. Servo rubinetto;
  36.  
  37.  
  38. void setup() {
  39.   Serial.begin(9600); // Initialize serial and wait for port to open:
  40.   delay(1500); // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  41.  
  42.   initProperties(); // Defined in thingProperties.h
  43.   ArduinoCloud.begin(ArduinoIoTPreferredConnection); // Connect to Arduino IoT Cloud
  44.  
  45.   setDebugMessageLevel(2);
  46.   ArduinoCloud.printDebugInfo();
  47.  
  48.   pinMode(RELE_BLOCCO, OUTPUT);
  49.   pinMode(EN_PIN, OUTPUT);
  50.  
  51.   bloccaAscensore(0);
  52.   ascensore.setMaxSpeed(3000);
  53.   ascensore.setAcceleration(1100);
  54.   ascensore.setCurrentPosition(0);
  55.   delay(500);
  56.   bloccaAscensore(1);
  57.  
  58.   rubinetto.attach(A7);
  59.   rubinetto.write(100); //posizione iniziale föra di ball
  60.  
  61.   for(int i=6;i<=13;i++) pinMode(i,OUTPUT);  //cicla tutti i pin delle pompe mettendoli a output
  62.  
  63.   spritz = false;
  64.   gintonic = false;
  65.   negroni = false;
  66.   mojito = false;
  67.   oldfashioned = false;
  68. }
  69.  
  70.  
  71.  
  72. void loop() {
  73.   ArduinoCloud.update();
  74. }
  75.  
  76.  
  77. void onSpritzChange()  {
  78.   if(spritz == true) {
  79.       spritz = false;
  80.       gintonic = false;
  81.       negroni = false;
  82.       mojito = false;
  83.       oldfashioned = false;
  84.       nuovoDrink(2);
  85.   }
  86. }
  87.  
  88. void onGintonicChange()  {
  89.   if(spritz == true) {
  90.       spritz = false;
  91.       gintonic = false;
  92.       negroni = false;
  93.       mojito = false;
  94.       oldfashioned = false;
  95.       nuovoDrink(4);
  96.   }
  97. }
  98.  
  99. void onNegroniChange()  {
  100.   if(negroni == true) {
  101.       spritz = false;
  102.       gintonic = false;
  103.       negroni = false;
  104.       mojito = false;
  105.       oldfashioned = false;
  106.       nuovoDrink(0);
  107.   }
  108. }
  109.  
  110. void onMojitoChange()  {
  111.   if(mojito == true) {
  112.       spritz = false;
  113.       gintonic = false;
  114.       negroni = false;
  115.       mojito = false;
  116.       oldfashioned = false;
  117.       nuovoDrink(1);
  118.   }
  119. }
  120.  
  121. void onOldfashionedChange()  {
  122.   if(oldfashioned == true) {
  123.       spritz = false;
  124.       gintonic = false;
  125.       negroni = false;
  126.       mojito = false;
  127.       oldfashioned = false;
  128.       nuovoDrink(3);
  129.   }
  130. }
  131.  
  132.  
  133.  
  134. void nuovoDrink(int drink)
  135. {
  136.   if(!controllaFattibile(drink))
  137.     return;
  138.   spostaAscensore(giu);
  139.   rubinetto.write(36);
  140.   eroga(drink);
  141.   sgrulla();
  142.   rubinetto.write(100);
  143.   spostaAscensore(su);
  144. }
  145.  
  146.  
  147. void spostaAscensore(int dove)
  148. {
  149.   bloccaAscensore(0);
  150.   ascensore.moveTo(dove);
  151.   ascensore.runToPosition();
  152.   bloccaAscensore(1);
  153. }
  154.  
  155.  
  156. void bloccaAscensore(bool stato)
  157. {
  158.   if(stato)  // solo perché serve farli in ordine diverso a seconda se sto bloccando o sbloccando
  159.   {
  160.     digitalWrite(EN_PIN, HIGH);
  161.     digitalWrite(RELE_BLOCCO, LOW);
  162.   }  else  {
  163.     digitalWrite(RELE_BLOCCO, HIGH);
  164.     digitalWrite(EN_PIN, LOW);
  165.   }
  166. }
  167.  
  168.  
  169. bool controllaFattibile(int drink)
  170. {
  171.   return true;
  172.   for(int bottiglia=0; bottiglia<8; bottiglia++)
  173.   {
  174.     if(richiesto[bottiglia][drink] == 0)
  175.       continue;
  176.     if(livello[bottiglia] < (richiesto[bottiglia][drink] + 50))  // giusto da avere almeno 50ml in più di quello che mi serve
  177.       return false;
  178.   }
  179.   return true;
  180. }
  181.  
  182.  
  183. void eroga(int drink)
  184. {
  185.   for(int bottiglia=0; bottiglia<8; bottiglia++)
  186.   {
  187.     if(richiesto[bottiglia][drink] == 0)
  188.       continue;
  189.     versa(richiesto[bottiglia][drink], bottiglia);
  190.     livello[bottiglia] -= richiesto[bottiglia][drink];
  191.   }
  192. }
  193.  
  194.  
  195. void versa(int quanto,int cosa)
  196. {
  197.   digitalWrite(cosa+6, HIGH);
  198.   delay(quanto * unml);
  199.   digitalWrite(cosa+6,LOW);
  200. }
  201.  
  202.  
  203. void sgrulla()
  204. {
  205.   rubinetto.write(30);
  206.   delay(200);
  207.   rubinetto.write(44);
  208.   delay(200);
  209.   rubinetto.write(28);
  210.   delay(200);
  211. }
  212.  
  213.  
Advertisement
Add Comment
Please, Sign In to add comment