Alex Block
/
test
ergwrthsgfhrtxhs
Diff: main.cpp
- Revision:
- 20:babcf777607b
- Parent:
- 19:29d3c7caea66
- Child:
- 21:b0e9b4d19d4d
diff -r 29d3c7caea66 -r babcf777607b main.cpp --- a/main.cpp Tue Nov 19 03:14:08 2019 +0000 +++ b/main.cpp Fri Nov 22 23:54:51 2019 +0000 @@ -42,6 +42,12 @@ #include <iostream> #include <cmath> +const float MAX_SPEED = .002; +const float MIN_SPEED = .003; +const float MAX_DEGREES = 3.0; +const float MIN_DEGREES = .5; +const float MAX_TILT = (MIN_SPEED - MAX_SPEED) / MAX_DEGREES; + struct Vec3 { @@ -65,14 +71,7 @@ DigitalOut M2_step(D5); DigitalOut M2_dir(D4); -DigitalIn button1(D6); -DigitalIn button2(D7); -void delay(float time) //delay function debounce buttons -{ - volatile int i; - for(i=0; i<1000000*time; i++); -} Vec3 get_accel() @@ -93,7 +92,10 @@ std::cout << str << vec3.x << " " << vec3.y << " " << vec3.z << "\r\n"; } - +float rad_to_deg(float radians) +{ + return radians * 57.2957795131f; +} @@ -106,240 +108,53 @@ acc_gyro->enable_x(); acc_gyro->enable_g(); - //Timer t; - //float dt = 0.02f; - - //std::cout << "\r\n--- Starting new run ---\r\n"; - - //Vec3 orientation = {}; - - //float sens = 0.488f; - - Vec3 vec3, tilt; - - // 180/pi -> converts radians to degrees. - float rad_to_deg = 57.2957795131f; + Vec3 vec3; + int numOfSteps; M1_dir = 1; M2_dir = 0; + float given; + for(;;) { vec3 = get_accel(); - - // We only need x or y; I left the others here for documentation. - //tilt.x = atan(vec3.x / sqrtf(vec3.y*vec3.y + vec3.z*vec3.z)) * rad_to_deg; - tilt.y = atan(vec3.y / sqrtf(vec3.x*vec3.x + vec3.z*vec3.z)) * rad_to_deg; - //tilt.z = atan(sqrtf(vec3.y*vec3.y + vec3.x*vec3.x) / vec3.z) * rad_to_deg; - -//control stepper motor 1 - - float degree = std::abs(tilt.y); - - //print_vec3("acceleration: ", tilt); - //std::cout << "\r\n" << std::flush; - - - int numOfSteps = degree / 0.45; - - if(tilt.y > 0) { - M1_dir = 0; - M2_dir = 1; - } else { - M1_dir = 1; - M2_dir = 0; - } + given = rad_to_deg(atan(vec3.y / sqrtf(vec3.x*vec3.x + vec3.z*vec3.z))); - for(int i = 0; i < numOfSteps; i++) { - M2_step = 1; - M1_step = 1; - delay(0.005); - M1_step = 0; - M2_step = 0; - delay(0.005); - } - } - -} - - - - - - - - - - - - - - - - + numOfSteps = given / 0.055f; - - - - - - - - - - - - - - - - - - - - - - - - - - + if (std::abs(given) > MIN_DEGREES) { +//Change direction. + if(given > 0) { + M1_dir = 0; + M2_dir = 1; + } else { + M1_dir = 1; + M2_dir = 0; + } - - - - - - - - - - - - - - - - - - - - - - - - - - + float stepTime; + given = std::abs(given); + + if (given > MAX_DEGREES){ + stepTime = MAX_SPEED; + } + else{ + stepTime = (MAX_TILT * given) + MIN_SPEED; + } + //Control stepper motor. + for(int i = 0; i < numOfSteps; ++i) { + M2_step = 1; + M1_step = 1; + wait(0.0014); + M1_step = 0; + M2_step = 0; + wait(0.0014); + } + } - - - - - - - - - -//static const Vec3 gyro_calibrate = {-0.42f, -1.61f, 1.05f}; - -//Vec3 get_gyro() -//{ -// Vec3 vec3; - -// int32_t axes[3]; -// acc_gyro->get_g_axes(axes); - -// vec3.x = axes[0]/1000.0f - gyro_calibrate.x; -// vec3.y = axes[1]/1000.0f - gyro_calibrate.y; -// vec3.z = axes[2]/1000.0f - gyro_calibrate.z; - -// return vec3; -//} - - - - - - - - -/* Simple main function */ -//int main() -//{ - - - - -//for(;;) { -//t.start(); - - -//Vec3 gyro_reading = get_gyro(); - -//orientation.x += (gyro_reading.x * dt * sens); -//orientation.y += (gyro_reading.y * dt * sens); -//orientation.z += (gyro_reading.z * dt * sens); - -//print_vec3("orientation: ", orientation); - - - - - - - - - - - -//tilt.x - - - - -//std::cout << "\r\n" << std::flush; - -//t.stop(); -//if (dt - t.read() > 0) wait(dt - t.read()); -//dt = t.read(); -//} - - - - - - - - - -//for(;;) { -//-0.42 -1.61 1.05 -//magnetometer->get_m_axes(axes); -//std::cout << "LSM303AGR [mag/gauss]: " << axes[0]/1000.0f << " " << axes[1]/1000.0f << " " << axes[2]/1000.0f << "\r\n"; - -//accelerometer->get_x_axes(axes); -//std::cout << "LSM303AGR [acc/g]: " << axes[0]/1000.0f << " " << axes[1]/1000.0f << " " << axes[2]/1000.0f << "\r\n"; - - -//acc_gyro->get_x_axes(axes); -//std::cout << "LSM6DSL [acc/g]: " << axes[0]/1000.0f << " " << axes[1]/1000.0f << " " << axes[2]/1000.0f << "\r\n"; - - -//acc_gyro->get_g_axes(axes); -//std::cout << "LSM6DSL [gyro/dps]: " << axes[0]/1000.0f + 0.42f << " " << axes[1]/1000.0f + 1.61f << " " << axes[2]/1000.0f-1.05f << "\r\n"; - - - - - -//print_vec3("gyro/dps: ", get_gyro()); -// - - -//wait(1.5); -//} -//} + } +} \ No newline at end of file