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.
Diff: main.cpp
- Revision:
- 15:830209e846d5
- Parent:
- 14:f43b386b8b5d
- Child:
- 16:11ba5d6f42ba
--- a/main.cpp Wed Feb 25 15:32:56 2015 +0000
+++ b/main.cpp Wed Feb 25 16:05:21 2015 +0000
@@ -21,75 +21,70 @@
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 ) {
- /*(TFC_BAT_LED0_ON;
- wait(0.004);
- TFC_BAT_LED0_OFF;
- wait(0.004);*/
-
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 {
- //TFC_BAT_LED0_ON;
- }
+ else {}
+ // manual servo control, unused
if (TFC_ReadPushButton(1) != 0 ) {
- /*TFC_BAT_LED1_ON;
- wait(0.004);
- TFC_BAT_LED1_OFF;
- wait(0.004);*/
-
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 {
- //TFC_BAT_LED1_ON;
- }
+ else {}
-
+ // initial motor stuff
if(rear_motor_enable_flag) {
TFC_HBRIDGE_ENABLE;
- //current_left_motor_speed = current_left_motor_speed + .3*(TFC_ReadPot(0));
- //current_right_motor_speed = current_right_motor_speed + .3*(TFC_ReadPot(1));
- //current_left_motor_speed = .3*(TFC_ReadPot(0));
- //current_right_motor_speed = .3*(TFC_ReadPot(1));
+ //current_left_motor_speed = (TFC_ReadPot(0));
+ //current_right_motor_speed = (TFC_ReadPot(1));
- 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==1)
- {
+ if (violence_level==2) {
+ current_left_motor_speed = .28;
+ current_right_motor_speed = .28;
+ }
+ else if (violence_level==1) {
current_left_motor_speed = .2;
current_right_motor_speed = .2;
}
+ 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;
+ }
+
- if(current_left_motor_speed >= 0.4)
- current_left_motor_speed= 0.4;
- if(current_right_motor_speed >= 0.4)
- current_right_motor_speed= 0.4;
- if(current_left_motor_speed <= -0.4)
- current_left_motor_speed= -0.4;
- if(current_right_motor_speed <= -0.4)
- current_right_motor_speed= -0.4;
+ // 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
@@ -97,12 +92,14 @@
TFC_HBRIDGE_DISABLE;
}// end motor disabled
+ // camera stuff
if (linescan_enable) {
if (TFC_LineScanImageReady !=0) {
- if (linescan_ping_pong) { //checking channel 0
- //...
- //uint8_t shitnum = uint8_t(*TFC_LineScanImage0>>3);
+ 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;
@@ -112,10 +109,10 @@
shitnum = 3;
else
shitnum = 1;
-
TFC_SetBatteryLED(shitnum);
- // checking for center line?
+
+ // 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;
@@ -127,71 +124,55 @@
sum_black += black_values_list[i];
}
+ // value of center of black (single line)
black_center_value= sum_black / black_value_count;
-
- if (black_center_value < 64) {
-
+
- //current_servo_position= float(-0.2);
- /*if(black_center_value < 40)
- current_servo_position = current_servo_position-.0004;
- else
- current_servo_position = current_servo_position-.0001;*/
-
- //current_servo_position= float(.009375*black_center_value-(.6));
- //current_servo_position= float(.00625*black_center_value-(.4));
+ // need to turn left
+ if (black_center_value < 64) {
+
current_servo_position= float(.015625*black_center_value-(1));
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;
-
+
TFC_SetMotorPWM(current_left_motor_speed, current_right_motor_speed);
}
+ // need to turn right
if (black_center_value > 64) {
- //current_servo_position = current_servo_position+.0001;
- //current_servo_position= float();
- //current_servo_position= float(0.2);
- /*if(black_center_value > 88)
- current_servo_position = current_servo_position+.0004;
- else
- current_servo_position = current_servo_position+.0001;*/
- //current_servo_position= float(.009375*black_center_value-(.6));
- //current_servo_position= float(.00625*black_center_value-(.4));
current_servo_position= float(.015625*black_center_value-(1));
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;
-
+
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 checking for center line
-
+ // end image processing
linescan_ping_pong = false;
} // end checking channel 0
- else { //checking channel 1
- //...
- //TFC_SetBatteryLED(*TFC_LineScanImage1+4);
+
+ else { //checking channel 1
linescan_ping_pong = true;
}
-
TFC_LineScanImageReady ==0; // since we used it, we reset the flag
}// end imageready
}// end linescan stuff
@@ -199,37 +180,4 @@
}
-
-// shit code
-
-//this block is the worst image processing algorithm ever
-/*
-black_values_list[];
-black_value_count = 0;
-black_center_value = 0;
-sum_black = 0;
-
-for (int i=0; i<128; i++)
-{
- if (camera_data[i]< 100)
- {
- 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];
-}
-
-black_center_value= sum_black / black_value_count;
-
-if (black_center_value > 64)
- servo_left();
-
-if (black_center_value < 64)
- servo_right();
-*/
-
-
+// shit code down here