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; }
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
void es9257_halt(es9257_context dev){ mraa_pwm_enable(dev->pwm, 0); free(dev); }
mraa_result_t haltPwm() { return mraa_pwm_enable(m_pwmServoContext, 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; }
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; }