int main(){
 








/**********************************************************************/
/**********************************************************************/
/* Begin. */
	mraa_uart_context uart;
	uart = mraa_uart_init(0);
	mraa_uart_set_baudrate(uart, 115200);
	char buffer[] = "hhh";
	char flush[]="xxxxxxxxxxxx";
	char str[] = "HELLO";
	if (uart == NULL) {
        	fprintf(stderr, "UART failed to setup\n");
        	printf("UART failed");
		return 1;
    	}
	printf("firstavail:%d\n",mraa_uart_data_available(uart,0));
	while (mraa_uart_data_available(uart,0))
	{
		mraa_uart_read(uart, flush, sizeof(uart));
		printf("Flush: %c %c %c %c %c %c %c %c",flush[0], flush[1], flush[2],flush[3],flush[4],flush[5],flush[6],flush[7]);
		usleep(150);
	}
	printf("available: %d",mraa_uart_data_available(uart,0));
        char speed_user_input[MAXBUFSIZ];
        char turn_user_input[MAXBUFSIZ];
        mraa_pwm_context speed_pwm_in1, speed_pwm_in2, turn_pwm;
        speed_pwm_in1 = mraa_pwm_init(3);
        speed_pwm_in2 = mraa_pwm_init(5);
        turn_pwm = mraa_pwm_init(6);
        if (speed_pwm_in1 == NULL || speed_pwm_in2 == NULL || turn_pwm == NULL) {
                fprintf(stderr, "Failed to initialized.\n");
                return 1;
        }

        mraa_pwm_period_us(speed_pwm_in1,870); //1150Hz
        mraa_pwm_enable(speed_pwm_in1, 1);
        mraa_pwm_period_us(speed_pwm_in2,870);
        mraa_pwm_enable(speed_pwm_in2, 1);

        mraa_pwm_period_ms(turn_pwm,20);
        mraa_pwm_enable(turn_pwm, 1);

        mraa_pwm_write(turn_pwm, CENTER);
        mraa_pwm_write(speed_pwm_in1, 1.0f);
        mraa_pwm_write(speed_pwm_in2, 1.0f);

        int n = 5;
        int spd = 0;
        char direction = 'C';
	char cross_clr = 'B';
        float angle = 0.0f;
	while (1)
        {
	//sleep(2);
        //readCharAry(uart,flush);
	spd = 50;
	mraa_uart_read(uart, buffer, 1);
	if(buffer[0]=='\n')
	{
		printf("new line ");	
		mraa_uart_read(uart, buffer, 1);
		if(buffer[0]=='\n')
		{
			printf("new line ");
                	mraa_uart_read(uart, buffer, 1);
		}
	}
	mraa_uart_read(uart, buffer+1, 1);
	if(buffer[1]=='\n')
        {
		buffer[0] = 'h';
		buffer[1] = 'h';
        }
	int sign = 0;
	if(cross_clr == 'M')	
	{
		speed_control(speed_pwm_in1, speed_pwm_in2, 0.0f);
		sleep(1);
		char* nearestBeaconID = (char*)malloc(5);
		getStrongestBeacon(nearestBeaconID);
		printf("the nearestBeaconID is: %s\n", nearestBeaconID);
		sign = 1;
		angle = CENTER - 0.0149f;
        mraa_pwm_write(turn_pwm, angle);
        usleep(15000);
        speed_control(speed_pwm_in1, speed_pwm_in2, 54);
        printf("speed: %d",spd);
        usleep(5500000);
                speed_control(speed_pwm_in1, speed_pwm_in2, 0.0f);
		sleep(1);
		mraa_uart_write(uart, str, 1);
		//while(!mraa_uart_data_available(uart, 10)){};
        mraa_uart_read(uart, buffer, 1);
        while(buffer[0] == '\n')
		{
			mraa_uart_read(uart, buffer, 1);
		}
		if(buffer[0] == '\0') direction = 'C';
                mraa_uart_read(uart, buffer + 1, 1);
                cross_clr = buffer[1];
	}
	printf("buff:%c %c %c \n",buffer[0], buffer[1],buffer[2]);
	if(!sign){
        if (direction == 'L')   angle = CENTER - 0.005f;
        if (direction == 'R')   angle = CENTER + 0.005f;
        if (direction == 'C')   angle = CENTER;}
	else
	{
		if (direction == 'C')	angle = CENTER -0.013f; 
		if (direction == 'L')   angle = CENTER -0.005f;
        if (direction == 'R')   angle = CENTER - 0.019f;
	}
	mraa_pwm_write(turn_pwm, angle);
        speed_control(speed_pwm_in1, speed_pwm_in2, spd);
	printf("speed: %d",spd);
	usleep(250000);

	direction = buffer[0];
	cross_clr = buffer[1];
        }
        return 0;
}
コード例 #2
0
int main(int argc, char *argv[]) {
	
	printf("\n---------------------ir_transmit.c---------------------\n");
	//const struct sched_param priority={1};
	//sched_setscheduler(0,SCHED_FIFO,&priority);
	
	int transmit_counter = 0;
	int i = 0;
	int temp = -1;
	// GPIO Initialization - Edison has 4 PWM pins
	
	pwm1 = mraa_pwm_init(3);
	mraa_pwm_period_us(pwm1, 26);
	mraa_pwm_enable(pwm1, 1);
	
	pwm2 = mraa_pwm_init(5);
	mraa_pwm_period_us(pwm2, 26);
	mraa_pwm_enable(pwm2, 1);
	
	pwm3 = mraa_pwm_init(6);
	mraa_pwm_period_us(pwm3, 26);
	mraa_pwm_enable(pwm3, 1);
	
	pwm4 = mraa_pwm_init(9);
	mraa_pwm_period_us(pwm4, 26);
	mraa_pwm_enable(pwm4, 1);

	printf("\n---------------------Part 0: Apply Settings from Config Files---------------------\n");
	temp = check_preamble_length();
	if (temp != -1) {
		printf("\nGot Preamble Length from /etc/IR/preamble_length.txt\n");
		printf("ID I got was %d\n", temp);
		printf("But we are still going to use 5\n", temp);
		//preamble_length = temp;
	}
	temp = -1;
	
	// check file for edisonID
	temp = check_edison_id();
	if (temp != -1) {
		printf("Got Edison ID from /etc/IR/edisonID.txt\n");
		printf("ID I got was %d\n", temp);
		edisonID = temp;
	}
	temp = -1;
	
	printf("\n---------------------Part 0: Apply Settings from Passed in Arguments---------------------\n");
	// if we pass in an argument, use it for the preamble_length, takes
	// priority over what's in the file. please pass in an integer
	if (argc == 2) {
		preamble_length = atoi(argv[1]);
		printf("Argument(1) Passed In! Preamble Length set to: %d\n", preamble_length);
	}
	else {
		printf("No Argument(1), preamble Length set to default value: %d\n", preamble_length);
	}
	// if we pass in an argument, use it for the edisonID, takes
	// priority over what's in the file. please pass in an integer
	if (argc == 3) {
		preamble_length = atoi(argv[1]);
		printf("Argument(1) Passed In! Preamble Length set to: %d\n", preamble_length);
		
		edisonID = atoi(argv[2]);
		printf("Argument(2) Passed In! edisonID set to: %d\n", edisonID);		
	}
	else {
		printf("No Argument(2), edisonID set to default value: %d\n", edisonID);		
	}	
	// This will transmit IR data on all 4 pins at once
	// on a single Edison board

	
	// Continuously Transmit IR Signal when the program is running
	while(1) {
		printf("\n---------------------Transmission---------------------\n");
	
		// Updates the preamble_length variable based on info from server
		temp = check_preamble_length();
		if (temp != -1) {
			printf("ID from /etc/IR_conf/preamble_length.txt was %d\n", temp);
			preamble_length = temp;
		}
		
		// Preamble - Signals the Receiver Message Incoming
		printf("Sending preamble_length = %d, ", preamble_length);
		send_preamble_sequence(preamble_length);
		
		// Sending Edison Board ID # - 2 bits, MSB then LSB
		printf("EdisonID: %d - ", edisonID);
		switch (edisonID) {
			case 0:
				send_low_bit();		// Send lsb bit 0 = LOW
				send_low_bit();		// Send msb bit 1 = LOW
				break;
			case 1:
				send_low_bit();		// Send msb bit 1 = LOW
				send_high_bit();	// Send lsb bit 0 = HIGH
				break;
			case 2:
				send_high_bit();	// Send msb bit 1 = HIGH
				send_low_bit();		// Send lsb bit 0 = LOW
				break;
			case 3:
				send_high_bit();	// Send lsb bit 0 = HIGH
				send_high_bit();	// Send msb bit 1 = HIGH
				break;
			default:
				send_low_bit();		// Send lsb bit 0 = LOW
				send_low_bit();		// Send msb bit 1 = LOW				
		}
		
		// Sending Edison IR Emitter ID # - 2 bits, MSB then LSB
		
		// pwm1,DUTY = 00 = short-long/short-long = 5-20/5-20
		// pwm2,DUTY = 01 = short-long/long-short = 5-20/20-5
		// pwm3,DUTY = 10 = long-short/short-long = 20-5/5-20
		// pwm4,DUTY = 11 = long-short/long-short = 20-5/20-5
		
		printf(", EmitterIDs 0-3\n");
		// First Bit
		mraa_pwm_write(pwm1,DUTY);
		mraa_pwm_write(pwm2,DUTY);
		mraa_pwm_write(pwm3,DUTY);
		mraa_pwm_write(pwm4,DUTY);
		for(i = SHORT_DELAY; i > 0; i--); // 5 ms
		
		mraa_pwm_write(pwm1,0);
		mraa_pwm_write(pwm2,0);
		//mraa_pwm_write(pwm3,DUTY, DUTY);
		//mraa_pwm_write(pwm4,DUTY, DUTY);
		for(i = MID_DELAY; i > 0; i--); // 15 ms

		//mraa_pwm_write(pwm1, 0);
		//mraa_pwm_write(pwm2, 0);
		mraa_pwm_write(pwm3,0);
		mraa_pwm_write(pwm4,0);
		for(i = SHORT_DELAY; i > 0; i--); // 5 ms
		
		// Second Bit	
		mraa_pwm_write(pwm1,DUTY);
		mraa_pwm_write(pwm2,DUTY);
		mraa_pwm_write(pwm3,DUTY);
		mraa_pwm_write(pwm4,DUTY);
		for(i = SHORT_DELAY; i > 0; i--); // 20 ms

		mraa_pwm_write(pwm1,0);
		//mraa_pwm_write(pwm2,DUTY, DUTY);	
		mraa_pwm_write(pwm3,0);
		//mraa_pwm_write(pwm4,DUTY, DUTY);	
		for(i = MID_DELAY; i > 0; i--); // 15 ms

		//mraa_pwm_write(pwm1, 0);
		mraa_pwm_write(pwm2,0);
		//mraa_pwm_write(pwm3, 0);
		mraa_pwm_write(pwm4,0);
		for(i = SHORT_DELAY; i > 0; i--); // 5 ms
		
		/*
		send_message_bit(edisonID, 0, DUTY, pwm1,DUTY);
		send_message_bit(edisonID, 0, DUTY, pwm1,DUTY);
		send_message_bit(edisonID, 0, DUTY, pwm1,DUTY);
		send_message_bit(edisonID, 0, DUTY, pwm1,DUTY);
		
		
		for (transmit_counter = TRANSMIT_DURATION; transmit_counter >= 0; transmit_counter--) {
			send_message_bit(edisonID, 0, DUTY, pwm1,DUTY);
		}
		for (transmit_counter = TRANSMIT_DURATION; transmit_counter >= 0; transmit_counter--) {
			send_message_bit(edisonID, 1, DUTY, pwm2,DUTY);			
		}
		for (transmit_counter = TRANSMIT_DURATION; transmit_counter >= 0; transmit_counter--) {
			send_message_bit(edisonID, 2, DUTY, pwm3,DUTY);
		}
		for (transmit_counter = TRANSMIT_DURATION; transmit_counter >= 0 ;transmit_counter--) {
			send_message_bit(edisonID, 3, DUTY, pwm4,DUTY);
		}
		*/
		
	}// end while loop

	mraa_pwm_write (pwm1, 0);
	mraa_pwm_enable(pwm1, 0);
	mraa_pwm_write (pwm2, 0);
	mraa_pwm_enable(pwm2, 0);
	mraa_pwm_write (pwm3, 0);
	mraa_pwm_enable(pwm3, 0);
	mraa_pwm_write (pwm4, 0);
	mraa_pwm_enable(pwm4, 0);

	return 0;
}//end main
コード例 #3
0
ファイル: es9257.c プロジェクト: chihchun/upm
void es9257_halt(es9257_context dev){
    mraa_pwm_enable(dev->pwm, 0);
    free(dev);
}
コード例 #4
0
ファイル: servo.c プロジェクト: Liwsh/Robot
mraa_result_t haltPwm() {
	return mraa_pwm_enable(m_pwmServoContext, 0);
}
コード例 #5
0
int main() {
    float speed, turn;
    char speed_user_input[MAXBUFSIZ];
    char turn_user_input[MAXBUFSIZ];
    char time_user_input[MAXBUFSIZ];
    mraa_pwm_context speed_pwm_in1, speed_pwm_in2, turn_pwm;
    speed_pwm_in1 = mraa_pwm_init(3);
    speed_pwm_in2 = mraa_pwm_init(5);
    turn_pwm = mraa_pwm_init(6);

    if (speed_pwm_in1 == NULL || speed_pwm_in2 == NULL || turn_pwm == NULL) {
        fprintf(stderr, "Failed to initialized.\n");
        return 1;
    }

    mraa_pwm_period_us(speed_pwm_in1,870); //1150Hz
    mraa_pwm_enable(speed_pwm_in1, 1);
    mraa_pwm_period_us(speed_pwm_in2,870);
    mraa_pwm_enable(speed_pwm_in2, 1);

    mraa_pwm_period_ms(turn_pwm,20);
    mraa_pwm_enable(turn_pwm, 1);

    mraa_pwm_write(turn_pwm, CENTER);
    mraa_pwm_write(speed_pwm_in1, 1.0f);
    mraa_pwm_write(speed_pwm_in2, 1.0f);

    RearWheel *rw = new RearWheel();

    //go for the curve
    thread t1;

    while(1) {
        t1 = rw->threading();
        printf("Turn (L, C, R): ");
        scanf("%s", turn_user_input);

        if (!strcmp(turn_user_input, "L") || !strcmp(turn_user_input, "l"))
            turn = CENTER - 0.015f;
        else if (!strcmp(turn_user_input, "C") || !strcmp(turn_user_input, "c"))
            turn = CENTER;
        else if (!strcmp(turn_user_input, "R") || !strcmp(turn_user_input, "r"))
            turn = CENTER + 0.018f;
        else {
            printf("Wrong turn type!\n");
            return 1;
        }

        printf("Speed value (-100-100): ");
        scanf("%s", speed_user_input);
        speed = atof(speed_user_input);

        printf("time: ");
        scanf("%s", time_user_input);
        int time = atoi(time_user_input);

        if (speed > 100 || speed < -100)
            printf("Error: Choose between -100 and 100\n");
        else {
            mraa_pwm_write(turn_pwm, turn);
            usleep(100000);
            speed_control(speed_pwm_in1, speed_pwm_in2, speed);
        }
        sleep(time);
        speed_control(speed_pwm_in1, speed_pwm_in2, 0.0f);
        float count = rw->getCount();
        printf("%.2f \n", count);
        rw->clear();
        t1.join();
    }
    return 0;
}
コード例 #6
0
ファイル: papercontrol.c プロジェクト: EE209AS/CarSketcher
int main(int argc, char *argv[])

{
in1=mraa_gpio_init(7); 
in2=mraa_gpio_init(8); 
in3=mraa_gpio_init(9); 
in4=mraa_gpio_init(10);


en1=mraa_pwm_init(6);                                                
en2=mraa_pwm_init(5);                                                
mraa_gpio_dir(in1,MRAA_GPIO_OUT);                                    
mraa_gpio_dir(in2,MRAA_GPIO_OUT);                                    
mraa_pwm_period_ms(en1,20);                                          
mraa_pwm_enable(en1,1);                                              
mraa_gpio_dir(in3,MRAA_GPIO_OUT);                                    
mraa_gpio_dir(in4,MRAA_GPIO_OUT);           
mraa_pwm_period_ms(en2,20);                 
mraa_pwm_enable(en2,1); 

char* ptr1 = argv[1];
char* ptr2 = argv[2]; 
char* ptr3 = argv[3]; 

float param,result;
int i= atoi(ptr1);
int j=atoi(ptr2);
int k= atoi(ptr3);

if (i == -2)
{
rotate_right(2);//because 20 degrees
}
else if( i == -1)
{
rotate_right90(); //calcualte for 90 degrees
move_front(29);   // 20 cms
rotate_left90();  //calculate for 90 degrees
}

else {


param=i/j;
//convert to our metrix, in terms of distance moved by robot//

result = atan((param) * 180 / PI);

if(result < 0)

{
rotate_left((int)(result/10));
}

else
{
rotate_right((int)(result/10));
}

float dist=sqrt(((i*i)+(j*j)));
if(k == 0)
{
dist = dist/3;
}

int num = (int) dist/(0.7) ;

move_front(num);
}                               
return 0;                        
}