dsbnajdnas

Dependencies:   Adafruit_GFX SSD1306_128x64_I2C mbed

main.cpp

Committer:
juankafil1
Date:
2017-11-29
Revision:
1:748bf113818b
Parent:
0:07389ebe002b

File content as of revision 1:748bf113818b:

 #include "mbed.h"
 #include "SSD1306.h"
 

Serial rs232(USBTX,USBRX);

 #define D_SDA                  PTE0//25//
 #define D_SCL                  PTE1//24//
 I2C i2c(D_SDA, D_SCL);
 
 SSD1306 oled = SSD1306(i2c, SSD1308_SA0);


 Timer Timer1;
 InterruptIn int1(PTD0);
 BusOut step_secuence( PTD6,  PTA17,  PTA16 ,PTC17);
unsigned int  contador=0,frec=0,conn=0,conm=0,cona=0,conN=0,aux=0;
uint16_t color=0,A=0,V=0,N=0,D=0,k=0;
int g=0,grados=0;
void ISR_PTD0(){//cuenta los  pulsos
    ++contador;}
    
void frecuencia(){
    
    contador=0;
    Timer1.start();//arranca  temporizador 
    while(Timer1.read_ms()<=10);//cuando lleve  a  10 ms pare
    Timer1.stop();//lo detengo 
    frec=100*contador;//lo multiplicamos  por 100
    Timer1.reset();}//reinicia  el timer 
    
 
  void forward() // Avance motor
{

    k=0;
    for (int i = 0; i<=4; i++) {//avance asi delante
        if (k>=4) {
            k=0;
        }
        switch (k) {
            case 0:
                step_secuence=0x0A;
                break;
            case 1:
                step_secuence=0x09;
                 g=g+2;
                 grados=(g/2)*15;
                break;
            case 2:
                step_secuence=0x05;
                break;
            case 3:
                step_secuence=0x06;
                break;
        }
        ++k;
        wait(0.2);
   
    }
   }
  void retro()   // Retroceso motor
{
    k=3;
    for (int i = 0; i<=3; i++) {
        if (k<=0) {
            k=3;
        }
        switch (k) {
             case 0:
                step_secuence=0x0A;
                break;
            case 1:
                step_secuence=0x09;
                 g=g+2;
                 grados=(g/2)*15;
                break;
            case 2:
                step_secuence=0x05;
                break;
            case 3:
                step_secuence=0x06;
                break;
        }
        wait(0.2);
        --k;
    }
}

void motor() {
   if(color==1){
      if(N==1){
         while(aux<=2){
          forward();
          N=0;//ponemos la posicion anterior en 0
          aux=aux+1;//variable para el  while   
             }
              aux=0; }
        else if(V==1){
          while(aux<=4){
          forward();
          V=0;//ponemos la posicion anterior en 0
          aux=aux+1;//variable para el  while   
             }
              aux=0; }
     else if(A==1){
         while(aux<=2){
          retro();
          A=0;//ponemos la posicion anterior en 0
           aux=aux+1;//variable para el  while   
           }  aux=0; 
        
                
       } else {
        rs232.printf("lea");  
             }       
             
  }
  /*/case 2:]]
     if(D==1){
         while(aux<=2){
          retro();
          D=0;//ponemos la posicion anterior en 0
          aux=aux+1;//variable para el  while   
             }
              aux=0; }
        else if(V==1){
          while(aux<=2){
          forward();
          V=0;//ponemos la posicion anterior en 0
          aux=aux+1;//variable para el  while   
             }
              aux=0; }
     else if(A==1){
         while(aux<=2){
          forward();
          A=0;//ponemos la posicion anterior en 0
          aux=aux+1;//variable para el  while   
          }  aux=0; 
        
                
      } if (N==1){
        rs232.printf("lea");  
             }       
    }} //case 3:
     //case 4:*/}
 void  contadores(){
    if((frec>=3000)&&(frec<=6000)){
           //lcd.locate(0,0);
           
            oled.writeString(1, 0,"          ");
            oled.writeString(1, 0,"negro");
            conn=conn+1;//aumento  el  contador 
            color=2;
            N=1;
            motor();
            rs232.printf("N");//lcd.locate(0,1);//preparado para  pubicar
            //oled.writeString(0, 1,"I=%d",conn);//public
            wait(3);//retraso mientras  pasa  la caja 
            
           //   oled.writeString(1, 0,"          ");//borrar oled
            
            }
    else if((frec>=8300)&&(frec<=14000)){
              // lcd.locate(0,0);
           
            oled.writeString(1, 0,"          ");//bo//borrar oledrrar oled
            oled.writeString(1, 0,"VIOLETA");//publico  el color de la  frecuencia
            conm=conm+1;//aumento  el  contador 
            rs232.printf("V");
            //lcd.locate(0,1);//preparado para  pubicar
            
          //  color=3;
            //V=1;
           //oled.writeString(0, 1,"I=%d");//publico
            wait(3);//retraso mientras  pasa  la caja   
                 
             //oled.writeString(1, 0,"          ");//borrar oled
    
    }else if((frec>=17000)&&(frec<=25000)){
           //lcd.locate(0,0);
            oled.writeString(1, 0,"          ");
            oled.writeString(1, 0,"Azul");
            cona=cona+1;//aumento  el  contador 
            color=4;
            A=1;
            
            wait(3);
              
            rs232.printf("A");}
            
    else { 
    
        oled.writeString(2, 1, "Caja no reconocida");
        conN=conN+1;
        
        color=1;  
        rs232.printf("D"); 
        color=1;
        D=1;
         motor(); 
         wait(3);
          }     
        }    

        
int main(){//clase  principal 
      
        rs232.baud(9600);
        int1.mode(PullUp);//habilitamos resistencia de PullUp
        int1.rise(&ISR_PTD0);//si hay  flanco  de  subida se va a el programa, habilita la interrupcion  
        D=1;
        oled.writeString(1, 0," maquna On"); //mensaje inicial al encender la Oled
        wait(1);
        
     while(true){
        frecuencia();//inicia  el sub programa  frecuenia
        contadores();
       //inicia el programa de los contadores y publicacion de la frecuencia
    ///rs232.printf("F=%d\n\r",frec);
     //lcd.locate(0,1);
    ///rs232.printf("F=%d hz\r",frec);
    //lcd.printf("juan");// publica  el  valor frec donde  quiera 
    //wait(0.5);///retraso de para  publicar  
         }
         }      
        


/*int main() {
 oled.writeString(0, 0, "Universidad Distrital");
   //  oled.printf("Hello World !");
  wait(1); 
  
 oled.writeString(0, 0, "2017 Digitales II");

 

n  }*/