Robot camarero - Arduino basado (10 / 12 paso)

Paso 10: código

Estaba corto de tiempo y lo mucho de mi código se encuentra mal escrito y construido. Voy a publicar un código más adelante que más fácilmente se modifica, pero no será capaz de probar con el cantinero, como ha sido desmontado para piezas.

En general, el código tiene entrado desde el teclado, evalúa la selección utilizando instrucciones switch/case y luego suministra una bebida. Cada bebida está escrito como una función. Una copa es vertida por el relé de cierre y encender las bombas por una cantidad específica de tiempo. Controlado el tiempo de que los relés se cerraron mediante la función delay() en lugar de utilizar temporizadores. Esto hace extraño a escribir cuando los ingredientes estén en diferentes cantidades de tiempo y difícil de modificar y ampliar el código. El nuevo código reemplaza delay() con temporizadores.

La biblioteca de I2C y la información se pueden encontrar aquí: http://arduino-info.wikispaces.com/LCD-Blue-I2C

 #include // Comes with Arduino IDE#include LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C addressint keys[] ={ //Stores total keypad input 1, 2, 3, 10, 4, 5, 6, 11, 7, 8, 9, 12, -3,0, -2, 14}; //"123A456B789C*0#D"; int key; //Stores most recent key pressed boolean key_lockout=false; int order[4]; int value=0; //Initialize const int vodka=3; //Based on 6v clear pump, 13.3 sec/oz (20 sec/1.5 oz) const int gin=4; //Based on 12v black pumps, 25.3 sec/oz (38 sec/1.5 oz) const int whiskey=5; const int tripleSec=6; const int tequila=7; const int rum=8; const int water=9; const int simpleSyrup=10;void setup(){ Serial.begin(9600); lcd.begin(16,2); pinMode(vodka, OUTPUT); pinMode(gin, OUTPUT); pinMode(whiskey, OUTPUT); pinMode(tripleSec, OUTPUT); pinMode(tequila, OUTPUT); pinMode(rum, OUTPUT); pinMode(simpleSyrup, OUTPUT); pinMode(water, OUTPUT); digitalWrite(vodka, HIGH); digitalWrite(gin, HIGH); digitalWrite(whiskey, HIGH); digitalWrite(tripleSec, HIGH); digitalWrite(tequila, HIGH); digitalWrite(rum, HIGH); digitalWrite(simpleSyrup, HIGH); digitalWrite(water, HIGH); // ------- 3 blinks of backlight ------------- for(int i = 0; i< 3; i++) { lcd.backlight(); delay(250); lcd.noBacklight(); delay(250); } lcd.backlight(); // finish with backlight on }void loop(){ Beginning: { //-------- Write characters on the display ------------------ // NOTE: Cursor Position: (CHAR, LINE) start at 0 lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Enter your order"); delay(500); lcd.setCursor(0,1); lcd.print(" *-Clr, #-Enter"); delay(1000); //----------------------------------------------------------- value=0; for (int x=0; x<4; x++){ key=getKeypad(); //Get key pressed if(key==-1){ //If valid key not pressed restart iteration x=x-1; } else{ if(key!=14 && key!=12){ //If not CLEAR or ENTER value = (10*(value)) + (keys[key]); delay(10); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Item #"); delay(10); lcd.setCursor(6,0); lcd.print(value); delay(500); } else if(key==14){ //If ENTER, exit x=4; } else if (key==12){ //If CLEAR, restart x=-1; } } } lcd.clear(); lcd.setCursor(0,0); lcd.print(" Press # to"); delay(10); lcd.setCursor(0,1); lcd.print("Confirm drink"); delay(10); lcd.setCursor(14,1); lcd.print(value); do{ key=getKeypad(); } while(key!=12 && key!=14); if(key==12){ //Restart ordering process goto Beginning; //Return to the beginning of loop() } else if(key==14){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print(" Confirmed"); delay(1000); switch (value) { case 1: longIslandIcedTea(); break; case 2: jackAndCoke(); break; case 3: rumAndCoke(); break; case 4: capeCod(); break; case 5: cosmopolitan(); break; case 6: kamikazee(); break; case 7: screwdriver; break; case 8: highball(); break; case 9: gt(); break; case 10: vodkaTonic(); break; case 11: margarita(); break; case 12: seaBreeze(); break; } delay(5); // delay in between reads for stability } } }//--------Functions----------- int getKeypad(){ //Returns which key is pressed int ret=-1; boolean reset_lockout=false; if(analogRead(A0)<120) key_lockout=false; else if(!key_lockout){ delay(100); ret=15.5-(log((analogRead(A0)-183.9)/58.24)/0.1623);//+0.5; key_lockout=true; } return ret; }// Menu //Long Island Iced Tea int longIslandIcedTea(){ digitalWrite(vodka, LOW); delay(80); digitalWrite(gin, LOW); delay(80); digitalWrite(tripleSec, LOW); delay(80); //Serial.println("In the matrix"); digitalWrite(tequila, LOW); delay(80); digitalWrite(rum, LOW); delay(80); digitalWrite(water, LOW); delay(6600); digitalWrite(vodka, HIGH); delay(6400); digitalWrite(water, HIGH); digitalWrite(gin, HIGH); digitalWrite(tripleSec, HIGH); digitalWrite(tequila, HIGH); digitalWrite(rum, HIGH); for (int x=0; x<3; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add 1oz Sour Mix"); delay(10); lcd.setCursor(0,1); lcd.print(" then MIX"); delay(5000); lcd.clear(); lcd.print("Add ice and "); delay(10); lcd.setCursor(0,1); lcd.print("top with coke"); delay(3000); } }//Jack and Coke int jackAndCoke(){ //2 oz of whiskey Serial.println("Jack and Coke"); digitalWrite(whiskey, LOW); delay(10); digitalWrite(water, LOW); delay(4500); digitalWrite(water, HIGH); delay(33500); digitalWrite(whiskey, HIGH); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add ice and 2-5"); delay(10); lcd.setCursor(0,1); lcd.print("ounces of Coke"); delay(8000); }//Rum and Coke int rumAndCoke(){ //2 oz of rum Serial.println("Rum and Coke"); digitalWrite(rum, LOW); delay(10); digitalWrite(water, LOW); delay(4500); digitalWrite(water, HIGH); delay(33500); digitalWrite(rum, HIGH); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add ice and 2-5"); delay(10); lcd.setCursor(0,1); lcd.print("ounces of Coke"); delay(8000); }//Cape Cod int capeCod(){ //2 oz of vodka, 3 oz cranberry juice, lime wedge Serial.println("Cape Cod"); digitalWrite(vodka, LOW); delay(10); digitalWrite(water, LOW); delay(4500); digitalWrite(water, HIGH); delay(15500); digitalWrite(vodka, HIGH); for (int x=0; x<3; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add ice & 2-3 oz"); delay(10); lcd.setCursor(0,1); lcd.print("Cranberry Juice-"); delay(3000); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("and a lime wedge"); delay(3000); } }//Bay Breeze int bayBreeze(){ //2 oz of vodka, 5 oz cranberry juice, 2 oz pineapple juice (or equal parts ~2.5 oz each), lime wedge Serial.println("Bay Breeze"); digitalWrite(vodka, LOW); delay(10); digitalWrite(water, LOW); delay(4500); digitalWrite(water, HIGH); delay(15500); digitalWrite(vodka, HIGH); for (int x=0; x<3; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add ice & 4-5 oz"); delay(10); lcd.setCursor(0,1); lcd.print("Cranberry Juice"); delay(4000); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("and 2oz of"); lcd.setCursor(0,1); lcd.print("Pineapple Juice"); delay(3000); } }//Cosmopolitan int cosmopolitan(){ //1 1/2 ounces vodka or citrus vodka, 1 ounce Cointreau orange liqueur, 1/2 ounce fresh lime juice, 1/4 ounce cranberry juice Serial.println("Cosmopolitan"); digitalWrite(tripleSec, LOW); delay(10); digitalWrite(vodka, LOW); delay(10); digitalWrite(water, LOW); delay(13000); digitalWrite(water, HIGH); delay(7000); digitalWrite(vodka, HIGH); delay(5323); digitalWrite(tripleSec, HIGH); for (int x=0; x<3; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add 1/2 oz lime"); delay(10); lcd.setCursor(0,1); lcd.print(" Juice and MIX"); delay(4000); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print(" Top with"); lcd.setCursor(0,1); lcd.print("Cranberry Juice"); delay(3000); } }//Kamikazee int kamikazee(){ //1 1/2 -1 ounces vodka, 1 ounce lime juice, 1 ounce triple sec, Lime wedge for garnish //shake Serial.println("Kamikazee"); digitalWrite(tripleSec, LOW); delay(10); digitalWrite(vodka, LOW); delay(10); digitalWrite(water, LOW); delay(13000); digitalWrite(water, HIGH); delay(7000); digitalWrite(vodka, HIGH); delay(5323); digitalWrite(tripleSec, HIGH); for (int x=0; x<3; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add 1 oz Lime"); delay(10); lcd.setCursor(0,1); lcd.print(" Juice and MIX"); delay(4000); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print(" Add Ice"); lcd.setCursor(0,1); lcd.print("and lime wedge"); delay(3000); } }//Screwdriver int screwdriver(){ //1 1/2 -1 ounces vodka, 5 oz orange juice Serial.println("Screwdriver"); digitalWrite(vodka, LOW); delay(20000); digitalWrite(vodka, HIGH); for (int x=0; x<2; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add Ice and ~5"); delay(10); lcd.setCursor(0,1); lcd.print("oz Orange Juice"); delay(3000); } }//Highball int highball(){ //1.5 ounces whiskey, ginger ale Serial.println("Highball"); digitalWrite(whiskey, LOW); delay(38000); digitalWrite(whiskey, HIGH); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print(" Add Ice and"); delay(10); lcd.setCursor(0,1); lcd.print(" Ginger Ale"); delay(8000); }//Gin and Tonic int gt(){ //1.5 ounces gin, 2.25 tonic or 2:3, 1/4 oz lime juice Serial.println("Gin and Tonic"); digitalWrite(gin, LOW); delay(38000); digitalWrite(gin, HIGH); for (int x=0; x<3; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add Ice, 2-5 oz"); delay(10); lcd.setCursor(0,1); lcd.print("of Tonic and..."); delay(3000); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print(" 1/4 oz"); lcd.setCursor(0,1); lcd.print(" Lime Juice"); delay(3000); } }//Vodka Tonic int vodkaTonic(){ //1.5 ounces vodka, 3-4.5 tonic, 1/4 oz lime juice Serial.println("Vodka Tonic"); digitalWrite(vodka, LOW); delay(20000); digitalWrite(vodka, HIGH); for (int x=0; x<3; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add Ice, 2-5 oz"); delay(10); lcd.setCursor(0,1); lcd.print("of Tonic and..."); delay(3000); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print(" 1/4 oz"); lcd.setCursor(0,1); lcd.print(" Lime Juice"); delay(3000); } }//Margarita int margarita(){ digitalWrite(tripleSec, LOW); delay(10); digitalWrite(tequila, LOW); delay(10); digitalWrite(water, LOW); delay(13000); digitalWrite(water, HIGH); delay(12700); digitalWrite(tripleSec, HIGH); delay(12870); digitalWrite(tequila, HIGH); for (int x=0; x<3; x++){ lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print("Add 1/2 oz of"); delay(10); lcd.setCursor(0,1); lcd.print("Lime Juice &..."); delay(3000); lcd.clear(); lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print(" MIX"); lcd.setCursor(0,1); lcd.print(" then add ice "); delay(4000); } }//Sea Breeze int seaBreeze(){ //1.35 Vodka, 4 Cranberry juice, 1 Grapefruit juice Serial.println("Sea Breeze"); digitalWrite(vodka, LOW); delay(18000); digitalWrite(vodka, HIGH); } 

Artículos Relacionados

Línea básica siguiente Robot con Arduino

Línea básica siguiente Robot con Arduino

07/09/2015Han pasado unos años desde que publicamos inicialmente básica línea siguiente Robot con Arduino tutorial, y parece que mucha gente encuentra útil que debemos publicar una actualización que funciona actual de las bibliotecas de Arduino, incl
Cómo hacer un teléfono móvil y un ordenador controlado 3D impreso Robot con Arduino - IoBot.

Cómo hacer un teléfono móvil y un ordenador controlado 3D impreso Robot con Arduino - IoBot.

Si está buscando una manera de controlar un Arduino basado en dispositivos, esta instrucción le mostrará cómo hacerlo mediante la construcción de robots sencillos.La IoBot puede controlarse mediante la aplicación móvil y ordenador vía LAN o Cable USB
2WD voz controla Robot con Arduino y el servidor de BitVoicer

2WD voz controla Robot con Arduino y el servidor de BitVoicer

En este Instructable voy a mostrar cómo construir un robot controlado por voz 2WD . Aunque estoy controlando sólo los motores de la C.C. para mover el robot, el mismo enfoque puede utilizarse para control de voz motores paso a paso y servomotores, as
Siete segmentos Display termómetro - Arduino basado

Siete segmentos Display termómetro - Arduino basado

Hoy voy a mostrar cómo hacer su propio termómetro de 7 segmentos - 2 dígitos - con Arduino uno y sensor de temperatura DS18B20.Prefiero construir mi propio circuito de arduino basado usando el poseedor de uno de ATmega328p, pero esto es opcional para
2 ruedas Self Balancing Robot con Arduino y MPU6050

2 ruedas Self Balancing Robot con Arduino y MPU6050

2 ruedas Self Balancing Robot con Arduino y MPU6050.Usar Arduino como el controlador y sensor de MPU6050 para controlar el equilibrio. Sólo añadir un modulo Serial Bluetooth simple y utilizar una aplicación de controlador Serial de Bluetooth para el
Obstáculo evita el Robot usando Arduino Uno y Sensor de proximidad de infrarrojos

Obstáculo evita el Robot usando Arduino Uno y Sensor de proximidad de infrarrojos

Siga los pasos para crear un obstáculo evitar Robot usando Arduino Uno y IR Sensor de proximidadPaso 1: Piezas necesarias1) Arduino Uno R3 (clon hará)2) sensores de proximidad de IR (2 recomendado)3) chasis con motores4) tablero de5) Junta de control
Sensor de presión sonora para Arduino basado en tablero de ZX-sonido

Sensor de presión sonora para Arduino basado en tablero de ZX-sonido

Existen una serie de sensores de sonido para el Arduino, algunos de ellos bastante baratos cuando necesitaba uno, pensé que un mismo edificio era locura y me lancé a comprar uno.Primer pensamiento fue supuesto comprobar hacia fuera Dealextreme.com si
Cómo hacer un Arduino basados en luz con control remoto infrarrojo de la noche!

Cómo hacer un Arduino basados en luz con control remoto infrarrojo de la noche!

Aquí está un Instructable que le mostrará cómo construir una noche de la Arduino basado en luz conpequeño control remoto infrarrojo que permite recorrer 10 pre set colores y un desvanecimiento al azarrutina de color que lazos para siempre.Este instru
Un robot camarero--Doggie4

Un robot camarero--Doggie4

El robot que hemos creado es un robot barman que diseñamos para servir alimentos y bebidas en un bar. Hemos llamado Doggie4. El robot se divide en cuatro capas. La parte inferior (la cuarta capa) es un chasis de coche, equipado con dos ruedas y dos d
Sin hilos controlar un Robot con Arduino y módulos RF!

Sin hilos controlar un Robot con Arduino y módulos RF!

/*Edición 05/05/2016Hola chicos, he estado ocupado con la Universidad y no podía responder a comenta. La mayoría de ustedes quería el código y esquemas, hechas un poco mejor por lo que he hecho los esquemas en Eagle 7.2.0 y subido todo en Github.Aquí
3D robot impreso Arduino: Humbot Sargantana

3D robot impreso Arduino: Humbot Sargantana

¡ Hola!Este es mi primer instructivo, espero les guste!Había diseñado y programado un robot basado en Arduino. Es totalmente opensource bajo CC-BY-SA. Si te gustan los robots, tienes que probar este. Ofrezco tres programas diferentes, pero el diseño
Obstáculo, evitando Robot con Arduino

Obstáculo, evitando Robot con Arduino

Hola chicos en este instructable veremos cómo hacer un obstáculo autónomo evitando Robot.This robot ha sido diseñado y programado de tal manera que evita la colisión. Básicamente, el robot se mueve hacia delante y siempre que detecte un objeto/obstác
Hacer un Robot con Arduino UNO de uno mismo-equilibrio

Hacer un Robot con Arduino UNO de uno mismo-equilibrio

Uno mismo-equilibrio Robot es muy interesante. Muchos amigos que nos rodean estaban tratando de hacer uno, pero encounted muchos desafíos, incluyendo la falta de las estructuras de fácil montaje, los circuitos electrónicos adecuados y los programas.
GESTO controlado por Arduino basado en el Rover (Wireless + línea siguiente)

GESTO controlado por Arduino basado en el Rover (Wireless + línea siguiente)

¿Lo que es capaz de?1. se puede controlar mediante gestos.2. puede enviar valores etc., nivel de batería, temperatura, distancia objeto del guante (LCD).3. puede ejecutar en ángulo de 45 grados.4. par de Tx Rx en rover y guante (para la transferencia