diff options
Diffstat (limited to 'src/gyronardo.cpp')
| -rw-r--r-- | src/gyronardo.cpp | 87 | 
1 files changed, 70 insertions, 17 deletions
| diff --git a/src/gyronardo.cpp b/src/gyronardo.cpp index 025bb7d..f1e968e 100644 --- a/src/gyronardo.cpp +++ b/src/gyronardo.cpp @@ -1,8 +1,15 @@  #include "Arduino.h"  #include "Wire.h" +#include "calibration.hpp"  #include "sensor.hpp" -Sensor sensor(0x68, &Wire); +#define LINE_CLEAR_LENGTH 30 + +#define SENSOR_THROTTLE_TIME 50 // milliseconds + +Sensor sensor(0x68, &Wire, SENSOR_THROTTLE_TIME); + +char line_clear[LINE_CLEAR_LENGTH + 1];  /**   * Stops code execution. @@ -21,47 +28,93 @@ void setup()  	while (!sensor.begin())  	{ -		Serial.print(millis()); -		Serial.println("Error: Could not connect to the sensor. Retrying after 2000 milliseconds..."); +		Serial.println("Error: Could not connect to the sensor. Retrying after 2000 " +					   "milliseconds...");  		delay(2000);  	} -	sensor.setAccelSensitivity(2); // 8g -	sensor.setGyroSensitivity(1);  // 500 degrees/s -	sensor.setThrottleEnabled(true); +	if (!sensor.setAccelSensitivity(2)) // 8g +	{ +		Serial.print( +			"Error: Failed to set the sensor's accelerometer sensitivity. Status: "); +		Serial.println(static_cast<int>(sensor.getStatus())); +		stop(); +	} -	Serial.println("Automatically calibrating sensor..."); -	bool cal_status = sensor.autoCalibrate(); +	if (!sensor.setGyroSensitivity(1)) // 500 degrees/s +	{ +		Serial.print("Error: Failed to set the sensor's gyro sensitivity. Status: "); +		Serial.println(static_cast<int>(sensor.getStatus())); +		stop(); +	} -	if (!cal_status) +	Serial.println("Calibrating sensor..."); +	SensorCalibrator sensor_calibrator(&sensor); + +	if (!sensor_calibrator.calibrate(SENSOR_THROTTLE_TIME))  	{ -		Serial.print("Error: Automatic calibration timed out after "); +		Serial.print("Error: Sensor calibration timed out after ");  		Serial.print(CALIBRATION_TIMEOUT);  		Serial.println(" milliseconds");  		stop();  	} +	Serial.println("Finished calibrating sensor"); + +	Serial.println("Calibration values:"); -	Serial.println("Finished calibrating"); +	Serial.print("Accelerometer X: "); +	Serial.println(sensor.accel_cal_x); -	Serial.println("Starting..."); +	Serial.print("Accelerometer Y: "); +	Serial.println(sensor.accel_cal_y); + +	Serial.print("Accelerometer Z: "); +	Serial.println(sensor.accel_cal_z); + +	Serial.print("Gyro X: "); +	Serial.println(sensor.gyro_cal_x); + +	Serial.print("Gyro Y: "); +	Serial.println(sensor.gyro_cal_y); + +	Serial.print("Gyro Z: "); +	Serial.println(sensor.gyro_cal_z); + +	Serial.println("\nStarting..."); + +	size_t prev_len = strlen(line_clear); +	memset(line_clear + prev_len, ' ', LINE_CLEAR_LENGTH - prev_len);  }  void loop()  { -	if (!sensor.is_calibrated) +	delay(SENSOR_THROTTLE_TIME); + +	if (!sensor.read())  	{ -		return; -	} +		SensorStatus status = sensor.getStatus(); + +		if (status == SensorStatus::THROTTLED) +		{ +			Serial.println("Warning: The sensor was read too frequently and throttled"); +			return; +		} -	sensor.read(); +		Serial.print("Error: Failed to read sensor. Status: "); +		Serial.println(static_cast<int>(status)); +		stop(); +	}  	float pitch = sensor.getPitch();  	float roll = sensor.getRoll(); +	Serial.print(line_clear); +	Serial.print("\r");  	Serial.print("Pitch: ");  	Serial.print(pitch, 3);  	Serial.print(" Roll: ");  	Serial.print(roll, 3); -	Serial.println(); +	Serial.print("\r"); +	Serial.flush();  } | 
