Getting motion sensor datas during drive_ramp function
Hello everybody,
I am trying to get motion sensor datas during my activity bot is moving forward.
To move forward , i am using drive_ramp function but when this function is called , it seem's that it's a loop and the program stays in the loop , i can't get my datas during this loop (fprintf for accelerometer is never working)
My program :
Someone could help me ?
Thanks in advance
I am trying to get motion sensor datas during my activity bot is moving forward.
To move forward , i am using drive_ramp function but when this function is called , it seem's that it's a loop and the program stays in the loop , i can't get my datas during this loop (fprintf for accelerometer is never working)
My program :
int main() { while(1) { imu_init(10, 9, 6, 5); sd_mount(DO, CLK, DI, CS); FILE* fp = fopen("test1.txt", "a+"); if(i==5) i=0; drive_getTicks(&distLeft[i], &distRight[i]); //print("distLeft[%d] = %d, distRight[%d] = %d\n", i, distLeft[i], i, distRight[i]); // START drive_setRampStep(10); // 10 ticks/sec / 20 ms drive_ramp(128, 128); // Forward 2 RPS imu_readAccelCalculated(&__imuX, &__imuY, &__imuZ); ax = (int)(100.0 * __imuX); ay = (int)(100.0 * __imuY); az = (int)(100.0 * __imuZ); fprintf(fp,"Accelerometer : Ax=%d Ay=%d Az=%d\n", ax, ay, az); while(ping_cm(8) >= 20) pause(5); // Wait until object in range drive_getTicks(&distLeft[i+1], &distRight[i+1]); fprintf(fp,"\n distLeft[%d] = %d, distRight[%d] = %d\n", j+1, distLeft[i+1], j+1, distRight[i+1]); // Distance traveled drive_ramp(0, 0); // Then stop drive_speed(-32, 32); // rotate left left++; // Keep turning while object is in view while(ping_cm(8) < 20); i++; j++; fclose(fp); } }
Someone could help me ?
Thanks in advance
Comments
However the writing cycle is too large , i timed and in 1 minutes of moving forward , the program has written only 3 times into the SDcard (I have only 3 fprintf for the acceleration in the text file).
Do you have an idea of how i can change that ? I need a fprintf each seconds more or less.
Thank you very much for your help
The way the code is written drive_ramp is executed (and the program essentially waits until the ramp has reached 128 ticks.) Then acceleration is measured and written.
The distance traveled per second will be approx 41 cm.
Then the program waits until the bot has closed to less than 20cm with an object.
Then it writes the number of ticks, ramps to zero, and starts turning left. It continues turning left while the distance to an object is less than 20 cm.
Then it begins the primary 'while' loop again (ramp to 128, get & record acceleration, wait until d<20, etc.)
So the number of times acc or d or ticks is written depends on how long it takes to get close to an object and then turn away from the object. Is that what you want?
Tom
I changed the ramp value for drive_ramp(32, 32) , we know that we need 64 ticks for 1 rotation of the wheel.
The lower the ramp value is , and the more i should got acceleration samples during a straight line and a defined time , right ?
So if tried to go only straight without any osbtacles during 5 minutes ( I timed) , I should get a lot of acceleration samples.
My text file should looks like this :
Accelerometer : Ax=12 Ay=43 Az=5
Accelerometer : Ax=13 Ay=42 Az=5
Accelerometer : Ax=12 Ay=42 Az=6
Accelerometer : Ax=13 Ay=45 Az=6
Accelerometer : Ax=12 Ay=42 Az=3
Accelerometer : Ax=13 Ay=44 Az=5
Accelerometer : Ax=12 Ay=43 Az=5
Accelerometer : Ax=13 Ay=42 Az=5
Accelerometer : Ax=12 Ay=42 Az=6
Accelerometer : Ax=13 Ay=45 Az=6
Accelerometer : Ax=12 Ay=42 Az=3
Accelerometer : Ax=13 Ay=44 Az=5
..............
.............
.............
But for the moment i get only 6 samples in 5 minutes
With a lower value for the ramp , the program should have time to write several times into the SD card during a straight line I think
Do you see what I mean ? I don't know if i am clear
For testing without any obstacles comment out that line, and the program should drop through to the end of the while(1) loop and repeat. There shouldn't be any change in speed. You should get an acceleration measurement written each loop. (You should also move the line out of the while(1) loop.)
Please also post your current code so I can make sure I'm properly interpreting it. Once you get this working you might want to capture acceleration readings during the ramp up & down. You can do that using another cog, but try getting the basics working first
Tom
Thanks again