Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
lesson5 [2019/05/14 11:15] golikov [Получение сырых данных для калибровки магнитометра] |
lesson5 [2020/03/25 16:28] (текущий) |
||
---|---|---|---|
Строка 113: | Строка 113: | ||
print "Enable magnetometer", mag_num | print "Enable magnetometer", mag_num | ||
magnetometer_turn_on(mag_num) | magnetometer_turn_on(mag_num) | ||
- | sleep(1) | + | sleep(10) |
mag_state = 0 # Инициализируем статус магнитометра | mag_state = 0 # Инициализируем статус магнитометра | ||
alpha_goal = 0 # Целевой угол | alpha_goal = 0 # Целевой угол | ||
omega_goal = 0 # Целевая угловая скорость | omega_goal = 0 # Целевая угловая скорость | ||
- | for i in range(60): | + | for i in range(12): |
mag_state, magx_raw, magy_raw, magz_raw = magnetometer_request_raw(mag_num) # опрос магнитометра | mag_state, magx_raw, magy_raw, magz_raw = magnetometer_request_raw(mag_num) # опрос магнитометра | ||
if not mag_state: # если код ошибки 0, то ошибки нет | if not mag_state: # если код ошибки 0, то ошибки нет | ||
Строка 144: | Строка 144: | ||
#include <math.h> | #include <math.h> | ||
void control(void){ | void control(void){ | ||
- | int time_step = 1; | + | int time_step = 10; |
uint16_t mag_num = 1; | uint16_t mag_num = 1; | ||
printf("Enable magnetometer %d\n", mag_num); | printf("Enable magnetometer %d\n", mag_num); | ||
Строка 158: | Строка 158: | ||
int16_t *pRAW_dataZ = &p_dataZ; | int16_t *pRAW_dataZ = &p_dataZ; | ||
int i; | int i; | ||
- | for (i = 0; i < 60; i++){ | + | for (i = 0; i < 12; i++){ |
mag_state = magnetometer_request_raw(mag_num, pRAW_dataX, pRAW_dataY, pRAW_dataZ); | mag_state = magnetometer_request_raw(mag_num, pRAW_dataX, pRAW_dataY, pRAW_dataZ); | ||
float mag_alpha; | float mag_alpha; | ||
Строка 232: | Строка 232: | ||
Теперь очень хорошо видно, что значения далеки от идеального 12 угольника радиусом 30. | Теперь очень хорошо видно, что значения далеки от идеального 12 угольника радиусом 30. | ||
+ | |||
+ | |||
+ | {{:2_1.gif?direct|}} | ||
==== Анализ данных с помощью функций ==== | ==== Анализ данных с помощью функций ==== | ||
Строка 298: | Строка 301: | ||
Sleep(1); | Sleep(1); | ||
int i; | int i; | ||
- | for (i = 0; i < 1000; i++) //Выполним 500 измерений | + | for (i = 0; i < 500; i++) //Выполним 500 измерений |
{ | { | ||
mgn_result[0] = magnetometer_request_raw(num, &mgn_result[1],&mgn_result[2],&mgn_result[3]); | mgn_result[0] = magnetometer_request_raw(num, &mgn_result[1],&mgn_result[2],&mgn_result[3]); | ||
Строка 321: | Строка 324: | ||
Поэтому считанные данные мы помещаем в список mgn_result, состоящий из 4 значений. | Поэтому считанные данные мы помещаем в список mgn_result, состоящий из 4 значений. | ||
mgn_result = [0,0,0,0] | mgn_result = [0,0,0,0] | ||
- | <code python> mgn_result = magnetometer_request_raw(num) </code> | + | <code c>mgn_result = magnetometer_request_raw(num) </code> |
Первое значение списка возвращает информацию об ошибке. Если возвращено значение 0,то ошибки нет, если 1, то датчик не соединен, если 2, то ошибка в программе. | Первое значение списка возвращает информацию об ошибке. Если возвращено значение 0,то ошибки нет, если 1, то датчик не соединен, если 2, то ошибка в программе. | ||
- | В программе использован оператор цикла for i in range(1000) который будет выполнен 1000 раз, соответственно будет выведено 1000 значений. | + | В программе использован оператор цикла <code c>for (i = 0; i < 500; i++)</code> который будет выполнен 500 раз, соответственно будет выведено 500 значений. |
Эти значения понадобятся на следующем уроке при калибровке магнитометра. | Эти значения понадобятся на следующем уроке при калибровке магнитометра. | ||