Go to the documentation of this file.00001 #include <cstdio>
00002 #include <cstdlib>
00003
00004 #include "kurt.h"
00005 #include "stdoutcomm.h"
00006 #include "mytime.h"
00007
00008 void usage(char *pgrname)
00009 {
00010 printf("%s: <pwml> <pwmr> <nr_turns> <nr_ticks> (radumdrehungen zaehlen)\n",pgrname);
00011 printf("e.g. %s 400 400 10 2050\n",pgrname);
00012 }
00013
00014 int main(int argc, char **argv)
00015 {
00016 FILE *fpr = NULL;
00017 long double Time_Diff1 = 101.0;
00018 long double Time_Diffa = 0.0;
00019 long double Time_Diffb = 0.0;
00020 int i,j, k;
00021 int startpwml = 400, startpwmr = 400, nr_turns = 10, nr_ticks = 2050;
00022
00023 if (argc < 5) {
00024 usage(argv[0]);
00025 return 0;
00026 }
00027 else {
00028 startpwml = atoi(argv[1]);
00029 startpwmr = atoi(argv[2]);
00030 nr_turns = atoi(argv[3]);
00031 nr_ticks = atoi(argv[4]);
00032 }
00033
00034 fpr = fopen("distance-test.dat","w");
00035
00036 mydelay(200);
00037
00038
00039 double wheel_perimeter = 0.379;
00040 double axis_length = 0.28;
00041
00042 double turning_adaptation = 0.69;
00043 int ticks_per_turn_of_wheel = 21950;
00044
00045 STDoutComm stdoutcomm;
00046 Kurt kurt(stdoutcomm, wheel_perimeter, axis_length, turning_adaptation, ticks_per_turn_of_wheel);
00047
00048 Get_mtime_diff(2);
00049 Get_mtime_diff(3);
00050 Get_mtime_diff(4);
00051
00052 i = startpwml;
00053 j = startpwmr;
00054
00055 int pwm_left, pwm_right;
00056 do {
00057
00058
00059 pwm_left = 1024-i;
00060 pwm_right = 1024-j;
00061 Time_Diff1 += Get_mtime_diff(3);
00062 if (Time_Diff1 > 100.0) {
00063 kurt.can_motor(pwm_left, 0, 0, pwm_right, 0, 0);
00064 Time_Diff1 = 0.0;
00065 }
00066
00067
00068 while (kurt.can_read_fifo() != CAN_ENCODER) ;
00069
00070 fprintf(fpr,"%Lf %lf %lf %lf %lld %lld\n",
00071 Get_mtime_diff(9),
00072 stdoutcomm.v1(),stdoutcomm.v1_left(),stdoutcomm.v1_right(),
00073 stdoutcomm.K_get_sum_ticks_a(),
00074 stdoutcomm.K_get_sum_ticks_b());
00075
00076
00077 if (abs(stdoutcomm.K_get_sum_ticks_a()) > nr_ticks*nr_turns-200) {
00078 Time_Diffa += Get_mtime_diff(2);
00079 if ( i > 0) {
00080 i = 0;
00081 pwm_left = 1024-i;
00082 kurt.can_motor(pwm_left, 0, 0, pwm_right, 0, 0);
00083 }
00084
00085 }
00086 else {
00087 Get_mtime_diff(2);
00088 Time_Diffa = 0.0;
00089 }
00090
00091
00092
00093 if (abs(stdoutcomm.K_get_sum_ticks_b()) > nr_ticks*nr_turns-200) {
00094 Time_Diffb += Get_mtime_diff(4);
00095 if (j > 0) {
00096 j = 0;
00097 pwm_right = 1024-j;
00098 kurt.can_motor(pwm_left, 0, 0, pwm_right, 0, 0);
00099 }
00100
00101 }
00102 else {
00103 Get_mtime_diff(4);
00104 Time_Diffb = 0.0;
00105 }
00106
00107 } while ((Time_Diffa < 3000.0) || (Time_Diffb < 3000.0));
00108 fclose(fpr);
00109
00110
00111 for (k = 0; k < i; k+=2 ) {
00112 pwm_left = 1024-i+k;
00113 pwm_right = 1024-j+k;
00114 kurt.can_motor(pwm_left, 0, 0, pwm_right, 0, 0);
00115 mydelay(10);
00116 }
00117
00118 printf("Closing the can connection\n");
00119 printf("Bye Bye Spoki\n");
00120 return (0);
00121 }