anda bastante

Dependencies:   mbed sMotor TextLCD Keypad

main.cpp

Committer:
chacolla
Date:
2018-12-11
Revision:
0:b2e776fa7da9

File content as of revision 0:b2e776fa7da9:

#include "mbed.h"
#include "TextLCD.h"
#include "Keypad.h"
#include "sMotor.h"


enum{BIENVENIDA,hoola,hooola, SELECCIONAR,SELEC,PRESENTAR};
enum LCDtype{LCD16x2};

Serial blue(PTE0, PTE1); 
Serial pc(USBTX,  USBRX); 
TextLCD lcd (PTC12,PTC13,PTC5,PTC6,PTC10,PTC11);
Keypad teclado (PTB11, PTB10, PTB9, PTB8,PTE5,PTE4,PTE3,PTE2);
sMotor motor(PTB0,PTB1,PTB2,PTB3); // crea un nuevo motor paso a paso: IN1, IN2, IN3, IN4

Timeout temp;
Timeout tiempo;
DigitalOut myled(LED1);
DigitalIn sensor(PTD7);
DigitalOut BOMBA1 (PTC7);
DigitalOut BOMBA2 (PTC0);
DigitalOut BOMBA3 (PTC3);
DigitalOut BOMBA4 (PTC4);

int step_speed = 1200 ;      // establecer la velocidad del motor por defecto
int numstep = 512 ;         // define el giro completo de 360 ??grados
int count = 0;
char KEY;
int estado= 0;
int libre;
int est =0;
int seg = 0;
int valor = 1; 
int posicion_actual= 3 ;
int posicion_deseada; 
char serialA;
char KEYS;
int libres;
int X=1;

void teclado3();
void bebida1();
void bebida2();
void bebida3();
void bebida4();
void CHAU();
void menu();
void teclado2();
void porcentaje();
void opcion1();
void opcion2();
void opcion3();
void opcion4();
void precisar();

char rx[30];
int irx = 0;
int cant1, cant2, cant3, cant4, posi;

int bebidas;
int combinaciones;

int centenas;
int decenas;
int unidades;


int final = 0;
char auxi;
int main() {
    BOMBA1 = 0;
    BOMBA2 = 0;
    BOMBA3 = 0;
    BOMBA4 = 0;
    blue.baud(9600);
    
    blue.printf("bluetooth\n");
    pc.printf("pc\n");
   
//    while(1) {

    //} 
        menu();
        
while(1){
        valor = sensor.read();
       
            
       if(valor == 1){
         blue.printf("Vaso detectado\r\n");
         
         }
       if(valor == 0){
         blue.printf("Vaso no detectado\r\n");
         
          
          }
          
       while(1){
           
        if (blue.readable()){
           while(1){   
                rx[irx] = blue.getc();
                                
                if (rx[irx] == '+'){
                    if (irx > 3) {
                        posi = (rx[1]);
                        cant1 = (rx[2] - 0x30) * 10 + rx[3] - 0x30;
                        cant2 = (rx[4] - 0x30) * 10 + rx[5] - 0x30;                        
                    } else {
                        posi = (rx[1]);
                        cant1 = (rx[2] - 0x30) * 10 + rx[3] - 0x30;
                        cant2 = 0;
                    }
                                                         
                    for(int i = 0; i < 10;i++){
                        pc.printf("%02x ", rx[i]);
                    }
                    pc.printf("\n");
                    
                    irx = 0;        
                    
                    auxi = blue.getc();          
                    
                    break;
                    
                } else {
                    irx++;  
                }
        }   }    
               
         teclado2();
         
         pc.printf("---> %c %d %d \n", posi, cant1, cant2);  
         
         switch(KEY ){
              case '6':
                bebida1();
                porcentaje();
                X=1;
                bebida2();
                porcentaje();
                precisar();
                X=1;
                  break;
              case '7':
                bebida2();
                porcentaje();
                X=1;
                bebida3();
                porcentaje();
                precisar();
                X=1;
                  break;
              case '8':
                bebida4();
                porcentaje();
                X=1;
                bebida3();
                porcentaje();
                precisar();
                X=1;
                  break;
              case '9':
                bebida4();
                porcentaje();
                X=1;
                bebida1();
                porcentaje();
                precisar();
                X=1;
                  break;
              case '5':
                CHAU ();
                
                  break;
              case '1':
                 bebida1();
                 porcentaje();
                 precisar();
                 X=1;
                 break;
              
              case '2':
                 bebida2();
                 porcentaje();
                 precisar();
                 X=1;
                 break;
              
              case '3':
                 bebida3();
                 porcentaje();
                 precisar();
                 X=1;
                 break;
              
              case '4': 
                 bebida4();
                 porcentaje();
                 precisar();
                 X=1;
                 break;
              
                
             }
            
           switch(posi){
               case '6':
                bebida1();
                porcentaje();
                bebida2();
                porcentaje();
                precisar();
                  break;
              case '7':
                bebida2();
                porcentaje();
                bebida3();
                porcentaje();
                precisar();
                  break;
              case '8':
                bebida4();
                porcentaje();
                bebida3();
                porcentaje();
                precisar();
                  break;
              case '9':
                bebida4();
                porcentaje();
                bebida1();
                porcentaje();
                precisar();
                  break;
              case '5':
                CHAU ();
                
                  break;
              case '1':
               pc.printf("kllkkjkguyjh\n");
                 bebida1();
                 porcentaje();
                 precisar();
                 break;
              
              case '2':
                 bebida2();
                 porcentaje();
                 precisar();
                 break;
              
              case '3':
                 bebida3();
                 porcentaje();
                 precisar();
                 break;
              
              case '4': 
                 bebida4();
                 porcentaje();
                 precisar();
                 break;
                      
             }  
             posi = 0;     
    }        
   }}
void menu(){
    switch(estado){
       case BIENVENIDA :    
          lcd.printf("bienvenido a la mezcladora");
          tiempo.attach(&menu, 4);
          estado= PRESENTAR;
          break;
       case PRESENTAR:
          lcd.cls();
          lcd.locate(0,0);
          lcd.printf("Aca te presento mi menu");
          tiempo.attach(&menu, 3);
          estado = SELECCIONAR;    
          break;
       case SELECCIONAR:
          lcd.cls();
          lcd.printf("COMB1      COMB2COMB3      COMB4");
          tiempo.attach(&menu, 3);
          estado = SELEC;
          break;
          
       case SELEC:
          lcd.cls();
          lcd.printf("NARANJA    PERA MANGO   MANZANA");
          break;
    }
    }
        
void porcentaje(){
       if (cant1 == 0) {
           lcd.cls();
          
            lcd.printf("selecciona su        porcentaje");
            wait(2);
            lcd.cls();
          
            lcd.printf("10a24     25a45 46a65     66a80 ");
            
            while(X==1){
                teclado3();
                switch(KEYS){
                    case 'A':
                       opcion1();
                       break;
                    case 'B':
                       opcion2();
                       break;
                    case 'C':
                       opcion3();
                       break;
                    case 'D':
                       opcion4();
                       break;
                      
                    }
                  
                }
        } else {
                 pc.printf("bt \n");  
                if (cant1 < 24) {
                    opcion1();
                } else if (cant1 < 46){
                    opcion2();                  
                } else if (cant1 < 66){
                    opcion3();                  
                } else {
                    opcion4();                  
                    }
        }
 }    

void precisar(){
   lcd.cls();
   lcd.printf("precisas otra   comb   o  bebida");
   wait(2);
   lcd.cls();
   lcd.printf("COMB1      COMB2COMB3      COMB4");
   wait(2);
   lcd.printf("NARANJA    PERA MANGO   MANZANA");
   }
   
void opcion1(){
    if(posicion_actual ==1){
        lcd.cls();
        lcd.printf("sirviendo         naranja ");
        BOMBA2 = 1;
         wait(1);
         BOMBA2 =0;
         wait(2);
         
        }
     if(posicion_actual ==2){
          lcd.cls();
        lcd.printf("sirviendo         pera");
        BOMBA1= 1;
         wait(1);
         BOMBA1=0;
         wait(2);
         
         }
      if(posicion_actual ==3){
          lcd.cls();
        lcd.printf("sirviendo         mango ");
        BOMBA3= 1;
         wait(1);
         BOMBA3 =0;
         wait(2);
         
          }
      if(posicion_actual ==4){
         lcd.cls();
        lcd.printf("sirviendo         manzana ");
        BOMBA4 = 1;
         wait(1);
         BOMBA4 =0;
         wait(2);
        }
    X = 0;
    }
void opcion2(){
    if(posicion_actual ==1){
        lcd.cls();
        lcd.printf("sirviendo         naranja ");
        BOMBA2 = 1;
         wait(1.5);
         BOMBA2 =0;
         wait(2);
         
        }
     if(posicion_actual ==2){
          lcd.cls();
        lcd.printf("sirviendo         pera");
        BOMBA1= 1;
         wait(1.5);
         BOMBA1=0;
         wait(2);
         
         }
      if(posicion_actual ==3){
          lcd.cls();
        lcd.printf("sirviendo         mango ");
        BOMBA3= 1;
         wait(1.5);
         BOMBA3 =0;
         wait(2);
         
          }
      if(posicion_actual ==4){
         lcd.cls();
        lcd.printf("sirviendo         manzana ");
        BOMBA4 = 1;
         wait(1.5);
         BOMBA4 =0;
         wait(2);
          }
          X=0;
    }
void opcion3(){
    if(posicion_actual ==1){
        lcd.cls();
        lcd.printf("sirviendo         naranja ");
        BOMBA2 = 1;
         wait(2);
         BOMBA2 =0;
         wait(2);
         
        }
     if(posicion_actual ==2){
          lcd.cls();
        lcd.printf("sirviendo         pera");
        BOMBA1= 1;
         wait(2);
         BOMBA1=0;
         wait(2);
         
         }
      if(posicion_actual ==3){
          lcd.cls();
        lcd.printf("sirviendo         mango ");
        BOMBA3= 1;
         wait(2);
         BOMBA3 =0;
         wait(2);
         
          }
      if(posicion_actual ==4){
         lcd.cls();
        lcd.printf("sirviendo         manzana ");
        BOMBA4 = 1;
         wait(2);
         BOMBA4 =0;
         wait(2);
          }
          X=0;
    }    
void opcion4(){
    if(posicion_actual ==1){
        lcd.cls();
        lcd.printf("sirviendo         naranja ");
        BOMBA2 = 1;
        wait(2.5);
        BOMBA2 =0;
        wait(2);  
    }
    if(posicion_actual ==2){
        lcd.cls();
        lcd.printf("sirviendo         pera");
        BOMBA1= 1;
        wait(2.5);
        BOMBA1=0;
        wait(2);
    }
    if(posicion_actual ==3){
        lcd.cls();
        lcd.printf("sirviendo         mango ");
        BOMBA3= 1;
        wait(2.5);
        BOMBA3 =0;
        wait(2);
    }
    if(posicion_actual ==4){
        lcd.cls();
        lcd.printf("sirviendo         manzana ");
        BOMBA4 = 1;
        wait(2.5);
        BOMBA4 =0;
        wait(2);
    }
        X=0;
}  
void bebida1(){
    pc.printf("uno\n");
    
    lcd.cls();
    posicion_deseada = 1;
    if(posicion_actual != posicion_deseada){
      if(valor == 1){
         while(posicion_deseada > posicion_actual){
           motor.step(numstep/4,0,step_speed);
           posicion_actual++;
           lcd.printf("    girando      el portavaso    ");
         } 
         while(posicion_deseada < posicion_actual){
           motor.step(numstep/4,1,step_speed);
           posicion_actual--;
           lcd.printf("    girando      el portavaso    ");
         }
         if(posicion_deseada == posicion_actual){ 
           lcd.cls();
           lcd.printf("ya estoy en la  posicion elegido");
           wait(2);
         } 
      }
    }
}
void bebida2(){
    lcd.cls();
    posicion_deseada = 2;
    if(posicion_actual != posicion_deseada) {
      if(valor == 1){
         while(posicion_deseada > posicion_actual){
           motor.step(numstep/4,0,step_speed);
           posicion_actual++;
           lcd.printf("    girando      el portavaso    ");
         } 
         while(posicion_deseada < posicion_actual){
           motor.step(numstep/4,1,step_speed);
           posicion_actual--;
           lcd.printf("    girando      el portavaso    ");
         }
         if(posicion_deseada == posicion_actual){ 
           lcd.cls();
           lcd.printf("ya estoy en la  posicion elegido");
           wait(2);
         } 
      }
    }
}
void bebida3(){
    lcd.cls();
    posicion_deseada = 3;
    if(posicion_actual != posicion_deseada){
      if(valor == 1){
         while(posicion_deseada > posicion_actual){
           motor.step(numstep/4,0,step_speed);
           posicion_actual++;
           lcd.printf("    girando      el portavaso    ");
         } 
         while(posicion_deseada < posicion_actual){
           motor.step(numstep/4,1,step_speed);
           posicion_actual--;
           lcd.printf("    girando      el portavaso    ");
         }
         if(posicion_deseada == posicion_actual){ 
           lcd.cls();
           lcd.printf("ya estoy en la  posicion elegido");
           wait(2);
         } 
      }
    }
}    
void bebida4(){
    lcd.cls();
    posicion_deseada = 4;
    if(posicion_actual != posicion_deseada) {
      if(valor == 1){
         while(posicion_deseada > posicion_actual){
            motor.step(numstep/4,0,step_speed);
            posicion_actual++;
            lcd.printf("    girando      el portavaso    ");
         } 
         while(posicion_deseada < posicion_actual){
            motor.step(numstep/4,1,step_speed);
            posicion_actual--;
            lcd.printf("    girando      el portavaso    ");
         }
         if(posicion_deseada == posicion_actual){ 
            lcd.cls();
            lcd.printf("ya estoy en la  posicion elegido");
            wait(2); 
         } 
      }
    }
}
void CHAU(){
    posicion_deseada= 3;
    if(posicion_actual != posicion_deseada){
      if(valor == 1){
         while(posicion_deseada > posicion_actual){
            motor.step(numstep/4,0,step_speed);
            posicion_actual++;
            lcd.printf("    girando      el portavaso    ");
         } 
         while(posicion_deseada < posicion_actual){
            motor.step(numstep/4,1,step_speed);
            posicion_actual--;
            lcd.printf("    girando      el portavaso    ");
         } 
         if(posicion_deseada == posicion_actual){ 
            lcd.cls();
            lcd.printf("gracias por su        visita :D");
            wait(3);
            menu();
         }
      }
    }
}
void teclado3(){
     KEYS = teclado.ReadKey();   //empieza a leer cuando se presiona una tecla actual del teclado matricial en la cual se guarda en la variante KEY(clave)
     
     if(KEYS == '\0')
        libres = 1;              //se establece el indicador cuando se liberan todas las teclas 
        
     if((KEYS != '\0') && (libres == 1)){    //Si se pulsa una tecla de la matrix y se suelta la tecla anterior, se va cumplir la condicion 
        lcd.printf("%c",KEYS);
        libres = 0;              // es para salir del ciclo para volver al inicio de la funcion del teclado
     }
}     
void teclado2(){
     KEY = teclado.ReadKey();   //empieza a leer cuando se presiona una tecla actual del teclado matricial en la cual se guarda en la variante KEY(clave)
     
     if(KEY == '\0')
        libre = 1;              //se establece el indicador cuando se liberan todas las teclas 
        
     if((KEY != '\0') && (libre == 1)){    //Si se pulsa una tecla de la matrix y se suelta la tecla anterior, se va cumplir la condicion 
        lcd.printf("%c",KEY);
        libre = 0;              // es para salir del ciclo para volver al inicio de la funcion del teclado
     }
}