testes

Dependencies:   EthernetInterface mbed-rtos mbed

Fork of testembed by Ana Silva

main.cpp

Committer:
AnaSilva
Date:
2017-01-03
Revision:
2:ff4325a1fa73
Parent:
0:de7cf425a39f

File content as of revision 2:ff4325a1fa73:

/* 
        GRAEST - GRUPO DE ROBÓTICA E AUTOMAÇÃO DA ESCOLA SUPERIOR DE TECNOLOGIA
    
    Produto: Software de controle para esteira
    Contratante: Denso
    Lincença: Paga
    Responsáveis: Fabrício Guimarães
                                Kedson Pinheiro
                                Marcel Cunha
                                Rafael Facccione

*/

#include "mbed.h"
#include "EthernetInterface.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


// Protocolo I2C 
I2C i2c(p28, p27);
// Endereço do Servidor
const char* ECHO_SERVER_ADDRESS = "192.168.0.101";
const int ECHO_SERVER_PORT = 25;

// Sensor de presença // Botõe de Inicio e Emergência
DigitalIn BotaoInicio(p8);
DigitalIn BotaoEmergencia(p22);
DigitalIn sensorParada1(p16);
DigitalIn sensorParada2(p17);
DigitalIn sensorParada3(p18);


DigitalIn teste1(p5);
DigitalIn teste2(p6);

// Movimento Esteira 
DigitalOut movimentoEsteira1(p21);
DigitalOut movimentoEsteira2(p22);

// Movimento Pneumático

DigitalOut movimentoPneumatico(p7);

//Leds
//DigitalOut l1(p9);
//DigitalOut l2(p10);

DigitalOut myled1(LED1);
DigitalOut myled2(LED2);

// /*
//      FUNCTION *dec_bin:: converter inteiro em binário 
//      EX:  *dec_bin ( int dec ){ 
//      Variaveis: dec (int)
//                          
// */
char *dec_bin ( int dec ){

     char *bin = (char *) malloc ( 9 * sizeof(char)); // binario 8-bits
     register int i;

     for ( i = 0; i < 8; i++ )
         bin[i] = ( dec & (128 >> i)) ? '1' : '0';

     bin[8] = 0x0;

     return bin;
}

int main() {
    // Endereço PCF's
     int address1=112;
     int address2=114;
     int address3=116;
     int address4=118;
     char pcf[1]={0};
     char *c;

   // Mbed Ip 
     EthernetInterface eth;
     static const char* mbedIp = "192.168.0.102";
     static const char* mbedMask = "255.255.255.0";
     static const char* mbedGatway = "192.168.0.1";
    
     eth.init(mbedIp,mbedMask,mbedGatway); //Use DHCP
     eth.connect();
     printf("\nClient IP Address is %s\n", eth.getIPAddress());

    // Connect to Server
     TCPSocketConnection socket;
     while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) {
        printf("Unable to connect to (%s) on port (%d)\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
        
     }
     printf("Connected to Server at %s\r\n",ECHO_SERVER_ADDRESS);
    
     char A[] = "esteiraLivre\n";
     char B[] = "esteiraPronta\n";
     char C[] = "esteiraOcupada\n";
     char D[] = "esteiraSegundaOpcao\n";
     char E[] = "terceiraPosicao\n";
     char F[] = "botaoAcionado\n";
     char T[] = "11111111000000111111111100000011#\n";
     char G[] = "voltandoPosicao1\n";
     char H[]="EmergenciaAcionada\n";
        
     int flagErro;
     int flagSucesso;
     int etapa;
     int flagA;
     int flagB;
     int flagC;
     int flagF;

     while(true) {
            flagErro=0;
            etapa=0;
            int a1 = sensorParada1.read();
            int a2 = sensorParada2.read();
            int a3 = sensorParada3.read();
            int flagEmergencia = BotaoEmergencia.read();

           /////////////////////////////////////////////////////////////////////////
          // etapa 1 : Etapa de aguardo do clique do botao de inicio de atividade//
         //           Envio de mensagem para o Java se paradas obstruidas       //
        /////////////////////////////////////////////////////////////////////////
            
            while(a1==1&a2==0&&a3==0&&flagEmergencia==0){
                  a1 = sensorParada1.read();
                  a2 = sensorParada2.read();
                  a3 = sensorParada3.read();
                  flagEmergencia = BotaoEmergencia.read();

                  int flagEstadoBotao=BotaoInicio.read();
               //Enviando Mensagem ao servidor
                
//                if(flagB==0){
//                    socket.send_all(B, sizeof(B));
//                    printf("Esteira etapa 1\r\n");
//              
//                }
                  if(flagEstadoBotao==1){
                     
                     if(flagF==0){
                        socket.send_all(F, sizeof(F));
                        //mandar a esteira ir pra frente

                     }
                     movimentoEsteira1=1;
                     movimentoEsteira2=0;
                     etapa=3;    
                  }
           }
            
                
             if(sensorParada1.read()==0&&sensorParada2==0&&sensorParada3==0){
                
                socket.send_all(A, sizeof(A));
                printf("Sending  message to Server : %s size:%d\r\n",A,sizeof(A));
                printf("Esteira Livre\r\n");
                //Esteira Parada
                movimentoEsteira1=0;
                movimentoEsteira2=0;
                
             }
            
             else {
                socket.send_all(C, sizeof(C));
                printf("Sending  message to Server : %s size:%d\r\n",C,sizeof(C));
                printf("Esteira ocupada\r\n");
                //Esteira Parada
                movimentoEsteira1=0;
                movimentoEsteira2=0;
    
             }
                
            ///////////////////////////////////////////////////////////////////////////////////
            //etapa 2 : Etapa onde  sensor do meio aguarda a caixa, se obstruido esteira para//
            ///////////////////////////////////////////////////////////////////////////////////
            
            while(etapa==2){
                
                
                printf("Iniciando movimento r\n");
        
                if(sensorParada2.read()==1){
                    int b1=teste1.read();
                    int b2=teste2.read();
                    printf("Esteira parada, caixa em posicao \r\n");
                    socket.send_all(D, sizeof(D));
                    
                    //mandar parar esteira 
                    movimentoEsteira1=0;
                    movimentoEsteira2=0;
                    //lendo os sensores pneumaticos de Inicio e fim de curso 
                    i2c.read(address4, pcf, 1);
                    i2c.stop();
                    c=dec_bin(pcf[0]);
                    //OBS : ANALISAR A POSIÇÃO DA CAIXA NA ESTEIRA
                    //if(c[4]==1 &&c[3]==0){
                    if(b1==1&&b2==0){
                        movimentoPneumatico =1;
                        printf("pistao acionado");

                    }
                    
                    // A validação dos sensores só ocorrera se o sensor de fim de curso estiver ativado
                    //if(c[4]==0 &&c[3]==1){
                    if(b1==0&&b2==1){
                        printf("pistao na posicao fim ");
                        etapa=3;    
                    }
                }
            }
        
        //////////////////////////////////////////////////////////////////////////////
        //etapa 3 : Avaliando os Sensores de magntezição e de presença//
        //////////////////////////////////////////////////////////////////////////////
//      

        
     while(etapa== 3){
                
        printf("iniciando Teste");
                
       //TODO comunicação com o CI; envio para o java e validação
        int i=0;
        int resultado;
        char pcf1[1]={0};
        char pcf2[1]={0};
        char pcf3[1]={0};
        char pcf4[1]={0};
        char buf[256];
        char *c1;
        char *c2;
        char *c3;
        char *c4;
        char f1[16];
        char f2[24];
        char f3[34];

        while(i<4){
            // Iniciando Leitura dos PCF1
            i2c.read(address1, pcf1, 1);
            i2c.stop();
            c1=dec_bin(pcf1[0]);
        
            // Iniciando Leitura dos PCF2
            i2c.read(address2, pcf2, 1);
            i2c.stop();
            c2=dec_bin(pcf2[0]);
        
            // Iniciando Leitura dos PCF3
            i2c.read(address3, pcf3, 1);
            i2c.stop();
            c3=dec_bin(pcf3[0]);
        
            // Iniciando Leitura dos PCF4
            i2c.read(address4, pcf4, 1);
            i2c.stop();
            c4=dec_bin(pcf4[0]);
 
            // Ralizando a concatenação do vetor
            strcpy(f1,strcat(c3,c4));
            strcpy(f2,strcat(c2,f1));
            strcpy(f3,strcat(c1,f2));
    
            //Adicionando /n ao final do vetor
            f3[32]='#';
            f3[33]='\n';

            printf("Valor=%s=====\r\n",f3);
         
            //Enviando amostras ao Servidor
            //socket.send_all(f3,34);
            socket.send_all(T, sizeof(T));
            //wait(1);
            i++;
            etapa=4;
        }
 
//  while(i<500){
//   
//   if(i>1000){
//       socket.send_all(f3,34);
//       
//   }
//   i++;
//  }
     
     //Recebendo a resposta do Servidor
//       int a=socket.receive(buf,256);
//   buf[a]='\0';
//   printf("A palavra recebida e %s\r\n",buf); 
//       resultado =strncmp(buf,"1",1);
    //O Pistão volta a posição inicial
//   movimentoPneumatico=0;
//   //Avaliando a reposta do servidor
//   if (resultado==0){
//           printf("Sucesso");
//        etapa=4;
//       flagSucesso=1;
//   }else{
//        printf("Error");
//    etapa=4;
//        flagErro=1;
//    }
//  }
//           ///////////////////////////////////////////////////
//          //etapa Erro: A Esteira indo para a primeira posição//
//          //  
//          ///////////////////////////////////////////////////////
//  
//              while(flagErro==1){
//          int b1=teste1.read();
//                  
//          char *e;
//          a1 = sensorParada1.read();
//              printf("error");
//          
//          socket.send_all(G, sizeof(G));
//              
//      //lendo os sensores pneumaticos
//       i2c.read(address4, pcf, 1);
//      i2c.stop();
//       e=dec_bin(pcf[0]);
//              
//      //Só irá andar caso o pistão esteja na posição inicial e não estiver caixa na posiçãoo 1
//              //if(e[4]==1&&a1==0){
//                  if(b1==1&&a1==0){
//          //mandar esteira para trás
//        movimentoEsteira1=1;
//          movimentoEsteira2=1;
//          }
//          
//              if(a1==1){  
//                  flagErro=0;
//                  //Esteira Parada
//          movimentoEsteira1=0;
//                  movimentoEsteira2=0;
//                  
//              }
//              
//          }
//          
//          ///////////////////////////////////////////////////////
//          //etapa Sucesso: A Esteira indo para a terceira posição//
//          //  
//          ///////////////////////////////////////////////////////
//          
//  while(flagSucesso == 1){
//  printf("sucesso");
//  char *f;
//  a3 = sensorParada3.read();
//  
//  //lendo os sensores pneumaticos
//  i2c.read(address4, pcf, 1);
//   i2c.stop();
//  f=dec_bin(pcf[0]);
//      
//  //So irá andar quando o pistao estiver na posição inicial 
//  // Movimentando a esteira para frente
//        if(f[4]==1&&a3==0){
//      movimentoEsteira1=1;
//      movimentoEsteira2=0;
//          }
//      
//      while(a3==1){
//      // Parando a esteira
//      movimentoEsteira1=0;
//      movimentoEsteira2=0;
//  //OBS: ANALISAR TEMPO DE PARADA
//  socket.send_all(E, sizeof(E));
//      printf("Retirar a caixa");
//      flagSucesso=0;
//      }
// //     // Clean up
// //    // socket.close();
// //     //eth.disconnect();

//  }
//    

// //Se botao emergencia ativado esteira permanece parada
//  if(flagEmergencia==1){
//      movimentoEsteira1=0;
//      movimentoEsteira2=0;
//      //enviando mensagem ao servidor
//      socket.send_all(H, sizeof(H));
//  
//  }
// }
}
}
}