Exemple #1
0
int main (){


char c;

do{
		
			printf("(1) Mover\n(2) Pegar\n(3) Solta\n(4) Repouso\n(0) Finalizar programa ");
			c = getchar();		

	
			if( c == '1'){
				
				MOVE();
					
			}  
			else if( c == '2'){
			
				PEGA();	
			} 
			else if( c == '3'){
				
				SOLTA();	
			} 
			else if( c == '4'){
				
				REPOUSO();	
			} 

			else if( c == '0'){
				
				printf("Finalizando o programa!");
									
			}
	

		}while( c != '0' );


		// FIM DO PROGRAMA //
	       
		
		printf("\nAcesso a porta serial /dev/ttyS0 finalizado\n");

    	fechar_porta(serial_fd);

	printf("\nPROGRAMA FINALIZADO\n\n");

	return 0;


}
int main(int argc, char** argv){
	char x0[50], x1[50], x2[50], x3[50], x4[50], y0[50], y1[50], y2[50], y3[50], y4[50];
	int retorno = 0, pos;
	char cmd;

	comando = (char*) malloc(sizeof(char)*BUFSIZE);
	
	serial_fd = abrir_porta();

	if(serial_fd == -1)
	{
		printf("Erro abrindo a porta serial /dev/ttyS0\nAbortando o programa...");
		return -1;
	}
	else
	{
		if(configurar_porta(serial_fd) == -1){
			printf("Erro inicializando a porta\n");
			close(serial_fd);
			return -1;
		}

	Mat image;
		
	image= imread("branco.png",CV_LOAD_IMAGE_GRAYSCALE);
	
	if(!image.data)
		printf("Não foi possível carregar a imagem\n");

	namedWindow("janela",WINDOW_AUTOSIZE);
		
		pos = theta[0]*2000/180 + 500;
		retorno = enviarComando(BAS_SERVO,pos);
		pos = theta[1]*2000/180 + 500;
		retorno = enviarComando(SHL_SERVO,pos);
		pos = theta[2]*2000/180 + 500;
		retorno = enviarComando(ELB_SERVO,pos);
		pos = theta[3]*2000/180 + 500;
		retorno = enviarComando(WRI_SERVO,pos);
		pos = 500;
		retorno = enviarComando(GRI_SERVO,pos);

		while(terminar != -1){
			
			// PRIMEIRO COMANDO - POSICAL INICIAL

			printf("\n\n\nESCOLHA ENTRE AS OPCOES DE MOVIMENTO\n");
			printf("a - INCREMENTAR BASE\n");
			printf("z - DECREMENTAR BASE\n");
			printf("s - IMCREMENTAR OMBRO\n");
			printf("x - DECREMENTAR OMBRO\n");
			printf("d - IMCREMENTAR COTOVELO\n");
			printf("c - DECREMENTAR COTOVELO\n");
			printf("f - INCREMENTAR PUNHO\n");
			printf("v - DECREMENTAR PUNHO\n");
			printf("g - ABRIR GARRA\n");
			printf("b - FECHAR GARRA\n");
			printf("1 - SALVAR VALOR 1\n");
			printf("2 - SALVAR VALOR 2\n");
			printf("3 - SALVAR VALOR 3\n");
			printf("4 - SALVAR VALOR 4\n");
			printf("5 - SALVAR VALOR 5\n");
			printf("p - CRIAR IMAGEM\n");
			printf("l - FINALIZAR APLICACAO\n \n");
			
			retorno = system("/bin/stty raw");
        		cmd = getchar();
        		retorno = system("/bin/stty cooked");
			
			if(retorno == -1)
				break;

			switch(cmd){
				case 'a':
					if(theta[0] < 180)
						theta[0] = theta[0] + 1;
					pos = theta[0]*2000/180 + 500;
					retorno = enviarComando(BAS_SERVO,pos);
					break;
				case 'z':
					if(theta[0] > 0)
						theta[0] = theta[0] - 1;
					pos = theta[0]*2000/180 + 500;
					retorno = enviarComando(BAS_SERVO,pos);
					break;
				case 's':
					if(theta[1] < 180)
						theta[1] = theta[1] + 1;
					pos = theta[1]*2000/180 + 500;
					retorno = enviarComando(SHL_SERVO,pos);
					break;
				case 'x':
					if(theta[1] > 0)
						theta[1] = theta[1] - 1;
					pos = theta[1]*2000/180 + 500;
					retorno = enviarComando(SHL_SERVO,pos);
					break;
				case 'c':
					if(theta[2] < 180)
						theta[2] = theta[2] + 1;
					pos = theta[2]*2000/180 + 500;
					retorno = enviarComando(ELB_SERVO,pos);
					break;
				case 'd':
					if(theta[2] > 0)
						theta[2] = theta[2] - 1;
					pos = theta[2]*2000/180 + 500;
					retorno = enviarComando(ELB_SERVO,pos);
					break;
				case 'f':
					if(theta[3] < 180)
						theta[3] = theta[3] + 1;
					pos = theta[3]*2000/180 + 500;
					retorno = enviarComando(WRI_SERVO,pos);
					break;
				case 'v':
					if(theta[3] > 0)
						theta[3] = theta[3] - 1;
					pos = theta[3]*2000/180 + 500;
					retorno = enviarComando(WRI_SERVO,pos);
					break;
				case 'g':
					theta[4] = 0;
					pos = 1500;
					retorno = enviarComando(GRI_SERVO,pos);
					break;
				case 'b':
					theta[4] = 1;
					pos = 2400;
					retorno = enviarComando(GRI_SERVO,pos);
					break;
				case 'l':
					terminar = -1;
					break;
				case '1':
					definirPosicao(0);
					printf("\nX[0]: %.1f Y[0]: %.1f", x[0], y[0]);
					break;
				case '2':
					definirPosicao(1);
					printf("\nX[1]: %.1f Y[1]: %.1f", x[1], y[1]);
					break;
				case '3':
					definirPosicao(2);
					printf("\nX[2]: %.1f Y[2]: %.1f", x[2], y[2]);
					break;
				case '4':
					definirPosicao(3);
					printf("\nX[3]: %.1f Y[3]: %.1f", x[3], y[3]);
					break;
				case '5':
					definirPosicao(4);
					printf("\nX[4]: %.1f Y[4]: %.1f", x[4], y[4]);
					break;
				case 'p':
					x[0] *= 50;	x[1] *= 50; x[2] *= 50; x[3] *= 50; x[4] *= 50;
					y[0] *= 50;	y[1] *= 50; y[2] *= 50; y[3] *= 50; y[4] *= 50;

					int xInt[5], yInt[5];

					xInt = x[0]; yInt = y[0];
					xInt = x[1]; yInt = y[1];
					xInt = x[2]; yInt = y[2];
					xInt = x[3]; yInt = y[3];
					xInt = x[4]; yInt = y[4];

					linha(xInt[0], yInt[0], xInt[1], yInt[1], image); 	//Ponto 1 -> Ponto 2
					linha(xInt[0], yInt[0], xInt[2], yInt[2], image);	//Ponto 1 -> Ponto 3
					linha(xInt[1], yInt[1], xInt[2], yInt[2], image);	//Ponto 2 -> Ponto 3
					linha(xInt[1], yInt[1], xInt[3], yInt[3], image);	//Ponto 2 -> Ponto 4
					linha(xInt[2], yInt[2], xInt[4], yInt[4], image);	//Ponto 3 -> Ponto 5
					linha(xInt[3], yInt[3], xInt[4], yInt[4], image);	//Ponto 4 -> Ponto 5
					imshow("janela", image);  
				  	waitKey();
					break;
				default:
					printf("\nOPÇÃO INVALIDA\n");
					break;
				
			}

			if(retorno == -1)
				break;

		}

		fechar_porta(serial_fd);
		printf("\nPROGRAMA FINALIZADO\n");

    	}

	return 0;
}
Exemple #3
0
int main()
{
    ufrn_header();
 
     
 
    // INICIO DO PROGRAMA DEMO //
 
    printf("PROGRAMA INTOLERANTS INICIADO\n\n");
 
    serial_fd = abrir_porta();
 
    if (serial_fd == -1)
    {
        printf("Erro abrindo a porta serial /dev/ttyS0\nAbortando o programa...");
        return -1;
    }
    else
    {
        printf("Porta serial /dev/ttyS0 aberta com sucesso\n");
 
        if (configurar_porta(serial_fd) == -1)
        {
            printf("Erro inicializando a porta\n");
            close(serial_fd);
            return -1;
        }
 
        comando = (char*) malloc(sizeof(char) * BUFSIZE);
        last_comando = (char*) malloc(sizeof(char) * BUFSIZE);
 
        //////////////////////
        // PRIMEIRO COMANDO //
        //////////////////////
        printf("\nPRIMEIRO COMANDO - POSICAL INICIAL\n");
 
        sprintf(comando, "%s", STANDBY);
 
        //Escrevendo com teste de escrita
        if (enviar_comando(comando, serial_fd) != -1)
        {
            printf("Enviando de comando com teste de envio: %s\n", STANDBY);
        }
        else
        {
            printf("Problema no envio do comando\nAbortando o programa...");
            return -1;
        }
 
        printf("Pressione enter para continuar...");
        getchar();
        memset(comando, 0, BUFSIZE);
 
        sprintf(comando, "%s", HOME_POS);
 
        //Escrevendo com teste de escrita
        if (enviar_comando(comando, serial_fd) != -1)
        {
            printf("Enviando de comando com teste de envio: %s\n", HOME_POS);
        }
        else
        {
            printf("Problema no envio do comando\nAbortando o programa...");
            return -1;
        }
 
        memset(comando, 0, BUFSIZE);
 
        /////////////////////
        // SEGUNDO COMANDO //
        /////////////////////
 
 
 
        //system("rm input.txt");
        //system("cat /dev/null > input.txt");
        //system("rm pos.txt");
        //system("cat /dev/null > pos.txt");
 
        do {
 
            if(system ("clear"));
 
            t1 = angSenseBas*PI/180;
            t2 = angSenseShl*PI/180;
            t3 = angSenseElb*PI/180;
            t4 = angSenseWri*PI/180;

            X = cos(t1)*(L3*cos(t2 + t3) + L2*cos(t2) + L4*cos(t2 + t3 + t4));
 
            Y = sin(t1)*(L3*cos(t2 + t3) + L2*cos(t2) + L4*cos(t2 + t3 + t4));
 
            Z = L1 + L3*sin(t2 + t3) + L2*sin(t2) + L4*sin(t2 + t3 + t4);
            
            calc_tetas(X, Y, Z, phi);

            printf("A coordenada x do ponto : %.2f \n", X);
            printf("A coordenada y do ponto : %.2f \n", Y);
            printf("A coordenada z do ponto : %.2f \n", Z);
            printf("phi da ferramenta       : %.2f \n", angSenseShl+angSenseElb+angSenseWri);
            //printf("#0P%dS%d#1P%dS%d#2P%dS%d#3P%dS%d#4P%dS%dT%d\n", (int)sense[0], s,  (int)sense[1], s,  (int)sense[2], s,  (int)sense[3], s,  (int)sense[4], s, t);
            printf("%s\n", last_comando);
            printf("BASE     -> (Q)ESQUERDA ; (A)DIREITA  | LARGURA DO PULSO: %.2f \t | ANGULO: %.2f \t | ANGULOC: %.2f \n", sense[0], angSenseBas, teta[0]);
            printf("OMBRO    -> (W)CIMA     ; (S)BAIXO    | LARGURA DO PULSO: %.2f \t | ANGULO: %.2f \t | ANGULOC: %.2f \n", sense[1], angSenseShl, teta[1]);
            printf("COTOVELO -> (E)CIMA     ; (D)BAIXO    | LARGURA DO PULSO: %.2f \t | ANGULO: %.2f \t | ANGULOC: %.2f \n", sense[2], angSenseElb, teta[2]);
            printf("PUNHO    -> (R)CIMA     ; (F)BAIXO    | LARGURA DO PULSO: %.2f \t | ANGULO: %.2f \t | ANGULOC: %.2f \n", sense[3], angSenseWri, teta[3]);
            printf("GARRA    -> (T)FECHAR   ; (G)ABRIR    | LARGURA DO PULSO: %d \t              \n", (int)sense[4]);
            printf("Digite space para sair\n");
            if(system("/bin/stty raw"));
            c = getchar();
            if(system("/bin/stty cooked"));


            if (c == 'q') {
                sense[0] = sense[0] + 2;
                pos = sense[0];
                angSenseBas = (offsetBas - sense[0]) * gainBas;
                sprintf(comando, "#%dP%d", BAS_SERVO, trava(BAS_SERVO, pos));
            } else if (c == 'a') {
                sense[0] = sense[0] - 2;
                pos = sense[0];
                angSenseBas = (offsetBas - sense[0]) * gainBas;
                sprintf(comando, "#%dP%d", BAS_SERVO, trava(BAS_SERVO, pos));
            } else if (c == 'w') {
                sense[1] = sense[1] + 2;
                pos = sense[1];
                // angSenseShl = (sense[1] - offsetShl) * gainShl;
                angSenseShl = 762.684+7.948*sense[1];
                sprintf(comando, "#%dP%d", SHL_SERVO, pos * (pos < 1850) + 1850 * (pos >= 1850));
            } else if (c == 's') {
                sense[1] = sense[1] - 2;
                pos = sense[1];
                // angSenseShl = (sense[1] - offsetShl) * gainShl;
                angSenseShl = 762.684+7.948*sense[1];
                sprintf(comando, "#%dP%d", SHL_SERVO, pos * (pos < 1850) + 1850 * (pos >= 1850));
            } else if (c == 'e') {
                sense[2] = sense[2] - 2;
                pos = sense[2];
                // angSenseElb = (offsetElb - sense[2]) * gainElb - 180;
                angSenseElb = 854.377-9.231*sense[2];
                sprintf(comando, "#%dP%d", ELB_SERVO, pos);
            } else if (c == 'd') {
                sense[2] = sense[2] + 2;
                pos = sense[2];
                // angSenseElb = (offsetElb - sense[2]) * gainElb - 180;
                angSenseElb = 854.377-9.231*sense[2];
                sprintf(comando, "#%dP%d", ELB_SERVO, pos);
            } else if (c == 'r') {
                sense[3] = sense[3] + 2;
                pos = sense[3];
                // angSenseWri = (sense[3] - offsetWri) * gainWri - 90;
                angSenseWri = 1465.639+10.114*sense[3];
                sprintf(comando, "#%dP%d", WRI_SERVO, trava(WRI_SERVO, pos));
            } else if (c == 'f') {
                sense[3] = sense[3] - 2;
                pos = sense[3];
                // angSenseWri = (sense[3] - offsetWri) * gainWri - 90;
                angSenseWri = 1465.639+10.114*sense[3];
                sprintf(comando, "#%dP%d", WRI_SERVO, trava(WRI_SERVO, pos));
            } else if (c == 't') {
                sense[4] = sense[4] + 10;
                pos = sense[4];
                sprintf(comando, "#%dP%d", GRI_SERVO, trava(GRI_SERVO, pos));
            } else if (c == 'g') {
                sense[4] = sense[4] - 10;
                pos = sense[4];
                sprintf(comando, "#%dP%d", GRI_SERVO, trava(GRI_SERVO, pos));
            } else if (c == 'p') {
                if(system("gnome-terminal -x /home/aluno/intolerants/meta3/meta3"));
            } else if (c == '=') {
                FILE *f = fopen("input.txt", "a");
                if (f == NULL)
                {
                    printf("Error opening file!\n");
                    exit(1);
                }
 
                /* print some text */
                fprintf(f, "%d %d\n", (int)X+OFFSETX, (int)Y+OFFSETY);
                fclose(f);
                FILE *f2 = fopen("pos.txt", "a");
                if (f2 == NULL)
                {
                    printf("Error opening file!\n");
                    exit(1);
                }
 
                /* print some text */
                fprintf(f2, "#0P%uT1000#1P%uT1000#2P%uT1000#3P%uT1000#4P%uT1000\n", (unsigned int)sense[0], (unsigned int)sense[1], (unsigned int)sense[2], (unsigned int)sense[3], (unsigned int)sense[4]);
                 
                fclose(f2);
            } else if (c == 'b') {
            	int *bolas, i, n;
            	printf("\nDigite quantas bolinhas:\n");
            	scanf("%d", &n);
            	bolas = malloc(n*sizeof(int));
            	printf("\nDigite a ordem das bolinhas:\n");
            	for (i = 0; i < n; i++)
            		scanf("%d", &bolas[i]);
            		//bolas[i] = i+1;
            	desenha(bolas, n);
            } else if (c == '0') {
                // sense[0] = 1528;
                // sense[1] = 1796;
                // sense[2] = 2072;
                // sense[3] = 844;
                // sense[4] = 1870;
                // // send_command(1528,1796,2072,844,1870);
                // int delay = 2000;
                // sprintf(comando,"#0P%dT%d#1P%dT%d#2P%dT%d#3P%dT%d#4P%dT%d", sense[0], s,  sense[1], s,  sense[2], s,  sense[3], s,  sense[4], s, t);
                repouso();
            } else if (c == '1') {
            	move(2.97,-22.55,9,-5);
            	sleep(3);
            	move(6.02,-27.16,9.63,-10.38);
            	sleep(3);
            } else if (c == 'h') {
                printf("Insira s e t: ");
                if(scanf("%d", &s));
                if(scanf("%d", &t));
 
                sprintf(comando, "#0P1528S%d#1P1468S%d#2P1672S%d#3P1504S%d#4P1870S%dT%d", s, s, s, s, s, t);
            } else if (c == 'z') {
 				pega();
 				// getchar();
 			} else if (c == 'x') {
 				solta();
 				// printf("solta\n");
 				// getchar();
            } else if (c == 'm'){
                printf("\n\n");
                printf("x: ");
                if(scanf("%f", &x));
                printf("y: ");
                if(scanf("%f", &y));
                printf("z: ");
                if(scanf("%f", &z));
                printf("phi: ");
                if(scanf("%f", &phi));
                move(x,y,z,phi);
                printf("%s\n", comando);
            }
 
            if (enviar_comando(comando, serial_fd) != -1)
            {
                printf("\nEnviando de comando com teste\n");
            }
            else
            {
                printf("Problema no envio do comando\nAbortando o programa...");
                return -1;
            }
 
            // while ( (c = getchar()) != '\n');
            memset(comando, 0, BUFSIZE);
 
        } while ( c != ' ');
        
        sprintf(comando, "%s", STANDBY);
        enviar_comando(comando, serial_fd);
        memset(comando, 0, BUFSIZE);
        printf("Pressione enter para relaxar...");
        getchar();
        sprintf(comando, "%s", RELAX);
        enviar_comando(comando, serial_fd);

        // FIM DO PROGRAMA DEMO //
        fechar_porta(serial_fd);
        printf("\nAcesso a porta serial /dev/ttyS0 finalizado\n");
 
    }
 
    printf("\nPROGRAMA FINALIZADO\n\n");
 
    return 0;
}