Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- bbbobbbieo
- Date:
- 2015-02-25
- Revision:
- 16:11ba5d6f42ba
- Parent:
- 15:830209e846d5
- Child:
- 17:c643b6b4a96f
- Child:
- 18:3988310cd03b
File content as of revision 16:11ba5d6f42ba:
//#include "mbed.h" #include "TFC.h" DigitalOut myled(LED1); int main() { //run this before anything TFC_Init(); //variables float current_servo_position = 0; float current_left_motor_speed = 0; float current_right_motor_speed = 0; bool rear_motor_enable_flag = true; bool linescan_ping_pong = false; bool linescan_enable = true; int black_values_list[128]; int black_value_count = 0; int black_center_value = 0; int sum_black = 0; int violence_level = 0; //uint16_t MyImage0Buffer[2][128]; //uint16_t MyImage1Buffer[2][128]; // major loop while(1) { // manual servo control, unused if (TFC_ReadPushButton(0) != 0 ) { current_servo_position = current_servo_position-.005; if(current_servo_position <= -0.4) current_servo_position = -0.4; TFC_SetServo(0, current_servo_position); }// end check button0 else {} // manual servo control, unused if (TFC_ReadPushButton(1) != 0 ) { current_servo_position = current_servo_position+.005; if(current_servo_position >= 0.4) current_servo_position = 0.4; TFC_SetServo(0, current_servo_position); }// end check button1 else {} // initial motor stuff if(rear_motor_enable_flag) { TFC_HBRIDGE_ENABLE; //current_left_motor_speed = (TFC_ReadPot(0)); //current_right_motor_speed = (TFC_ReadPot(1)); // checking behavior level violence_level = int(TFC_GetDIP_Switch()); if (violence_level==2) { current_left_motor_speed = -.48; current_right_motor_speed = .48; } else if (violence_level==1) { current_left_motor_speed = -.35; current_right_motor_speed = .35; } else if (violence_level==0) { current_left_motor_speed = 0; current_right_motor_speed = 0; } else { current_left_motor_speed = 0; current_right_motor_speed = 0; } // protection block if(current_left_motor_speed >= 0.5) current_left_motor_speed= 0.5; if(current_right_motor_speed >= 0.5) current_right_motor_speed= 0.5; if(current_left_motor_speed <= -0.5) current_left_motor_speed= -0.5; if(current_right_motor_speed <= -0.5) current_right_motor_speed= -0.5; TFC_SetMotorPWM(current_left_motor_speed, current_right_motor_speed); }// end motor enabled else { TFC_HBRIDGE_DISABLE; }// end motor disabled // camera stuff if (linescan_enable) { if (TFC_LineScanImageReady !=0) { if (linescan_ping_pong) { //checking channel 0 //checking center pixel, displays aprox value on leds uint8_t shitnum = 1; if (*(TFC_LineScanImage0+64) > 800) shitnum = 15; else if((*(TFC_LineScanImage0+64) > 450)) shitnum = 7; else if((*(TFC_LineScanImage0+64) > 400)) shitnum = 3; else shitnum = 1; TFC_SetBatteryLED(shitnum); // checking for center line (single line) for (uint16_t i=0; i<128; i++) { if ((*(TFC_LineScanImage0+i) < 300)) { black_values_list[black_value_count] = i; black_value_count++; } } for(int i=0; i<black_value_count; i++) { sum_black += black_values_list[i]; } // value of center of black (single line) black_center_value= sum_black / black_value_count; // need to turn left if (black_center_value < 64) { current_servo_position= float(.01875*black_center_value-(1.2)); if(current_servo_position <= -0.4) current_servo_position = -0.4; TFC_SetServo(0, current_servo_position); //current_left_motor_speed = current_left_motor_speed + float(64-black_center_value)*.0025; //current_right_motor_speed = current_right_motor_speed + float(64-black_center_value)*.0025; if (violence_level !=0){ current_left_motor_speed = current_left_motor_speed + float(float(64-black_center_value)*.045);// kinda reverse this... current_right_motor_speed = current_right_motor_speed + float(float(64-black_center_value)*.045);// push more forwards } // protection block if(current_left_motor_speed >= 0.5) current_left_motor_speed= 0.5; if(current_right_motor_speed >= 0.5) current_right_motor_speed= 0.5; if(current_left_motor_speed <= -0.5) current_left_motor_speed= -0.5; if(current_right_motor_speed <= -0.5) current_right_motor_speed= -0.5; TFC_SetMotorPWM(current_left_motor_speed, current_right_motor_speed); } // need to turn right if (black_center_value > 64) { current_servo_position= float(.01875*black_center_value-(1.2)); if( current_servo_position >= +0.4) current_servo_position = +0.4; TFC_SetServo(0, current_servo_position); //current_left_motor_speed = current_left_motor_speed - float(black_center_value-64)*.0025; //current_right_motor_speed = current_right_motor_speed - float(black_center_value-64)*.0025; if (violence_level !=0){ current_left_motor_speed = current_left_motor_speed - float(float(black_center_value-64)*.045);// push more forwards current_right_motor_speed = current_right_motor_speed - float(float(black_center_value-64)*.045);// kinda reverse this... } // protection block if(current_left_motor_speed >= 0.5) current_left_motor_speed= 0.5; if(current_right_motor_speed >= 0.5) current_right_motor_speed= 0.5; if(current_left_motor_speed <= -0.5) current_left_motor_speed= -0.5; if(current_right_motor_speed <= -0.5) current_right_motor_speed= -0.5; TFC_SetMotorPWM(current_left_motor_speed, current_right_motor_speed); } // clearing values for next image processing round black_value_count = 0; black_center_value = 0; sum_black = 0; // end image processing linescan_ping_pong = false; } // end checking channel 0 else { //checking channel 1 linescan_ping_pong = true; } TFC_LineScanImageReady ==0; // since we used it, we reset the flag }// end imageready }// end linescan stuff } } // shit code down here