Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CURRENT_CONTROL IIR LSM9DS0 MEDIAN_FILTER PID QEI RF24 SENSOR_FUSION mbed
main.cpp@1:ddc39900f9b8, 2016-04-21 (annotated)
- Committer:
- adam_z
- Date:
- Thu Apr 21 08:50:02 2016 +0000
- Revision:
- 1:ddc39900f9b8
- Parent:
- 0:150bb4605023
- Child:
- 2:53a942d1b1e5
Pwm output ok;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
adam_z | 0:150bb4605023 | 1 | #include "mbed.h" |
adam_z | 0:150bb4605023 | 2 | #include "PID.h" |
adam_z | 0:150bb4605023 | 3 | #include "LSM9DS0.h" |
adam_z | 0:150bb4605023 | 4 | #include "QEI.h" |
adam_z | 0:150bb4605023 | 5 | |
adam_z | 0:150bb4605023 | 6 | #define Ts 0.001 |
adam_z | 0:150bb4605023 | 7 | |
adam_z | 0:150bb4605023 | 8 | LSM9DS0 sensor(SPI_MODE, D9, D6); |
adam_z | 0:150bb4605023 | 9 | Serial pc(SERIAL_TX, SERIAL_RX); |
adam_z | 0:150bb4605023 | 10 | |
adam_z | 0:150bb4605023 | 11 | Ticker WIPVTimer; |
adam_z | 0:150bb4605023 | 12 | void WIPVTimerInterrupt(); |
adam_z | 0:150bb4605023 | 13 | |
adam_z | 1:ddc39900f9b8 | 14 | PwmOut M1C1(D7); |
adam_z | 1:ddc39900f9b8 | 15 | PwmOut M1C2(D11); |
adam_z | 1:ddc39900f9b8 | 16 | PwmOut M2C1(D8); |
adam_z | 1:ddc39900f9b8 | 17 | PwmOut M2C2(A3); |
adam_z | 1:ddc39900f9b8 | 18 | |
adam_z | 0:150bb4605023 | 19 | DigitalOut led1(LED1); |
adam_z | 0:150bb4605023 | 20 | |
adam_z | 0:150bb4605023 | 21 | int main() |
adam_z | 0:150bb4605023 | 22 | { |
adam_z | 0:150bb4605023 | 23 | //float abias[3], gbias[3]; |
adam_z | 0:150bb4605023 | 24 | |
adam_z | 0:150bb4605023 | 25 | pc.baud(115200); |
adam_z | 0:150bb4605023 | 26 | if( sensor.begin() != 0 ) { |
adam_z | 0:150bb4605023 | 27 | pc.printf("Problem starting the sensor with CS @ Pin D6.\r\n"); |
adam_z | 0:150bb4605023 | 28 | } else { |
adam_z | 0:150bb4605023 | 29 | pc.printf("Sensor with CS @ Pin D9&D6 started.\r\n"); |
adam_z | 0:150bb4605023 | 30 | } |
adam_z | 0:150bb4605023 | 31 | //sensor.calLSM9DS0(gbias, abias); |
adam_z | 0:150bb4605023 | 32 | sensor.setGyroOffset(38,-24,-106); |
adam_z | 0:150bb4605023 | 33 | sensor.setAccelOffset(-793,-511,300); |
adam_z | 0:150bb4605023 | 34 | |
adam_z | 1:ddc39900f9b8 | 35 | M1C1.period_us(50); |
adam_z | 1:ddc39900f9b8 | 36 | M1C1.write(0.7); |
adam_z | 1:ddc39900f9b8 | 37 | M2C1.period_us(50); |
adam_z | 1:ddc39900f9b8 | 38 | M2C1.write(0.7); |
adam_z | 1:ddc39900f9b8 | 39 | TIM1->CCER |= 4; //enable ch1 complimentary output |
adam_z | 1:ddc39900f9b8 | 40 | TIM1->CCER |= 64;//enable ch1 complimentary output |
adam_z | 1:ddc39900f9b8 | 41 | |
adam_z | 1:ddc39900f9b8 | 42 | |
adam_z | 0:150bb4605023 | 43 | WIPVTimer.attach_us(WIPVTimerInterrupt, 1000.0); |
adam_z | 0:150bb4605023 | 44 | while(true) {} |
adam_z | 0:150bb4605023 | 45 | } |
adam_z | 0:150bb4605023 | 46 | |
adam_z | 0:150bb4605023 | 47 | |
adam_z | 0:150bb4605023 | 48 | void WIPVTimerInterrupt() |
adam_z | 0:150bb4605023 | 49 | { |
adam_z | 0:150bb4605023 | 50 | |
adam_z | 0:150bb4605023 | 51 | /* |
adam_z | 0:150bb4605023 | 52 | int16_t data_array[6]; |
adam_z | 0:150bb4605023 | 53 | |
adam_z | 0:150bb4605023 | 54 | data_array[0] = sensor.readRawAccelX(); |
adam_z | 0:150bb4605023 | 55 | data_array[1] = sensor.readRawAccelY(); |
adam_z | 0:150bb4605023 | 56 | data_array[2] = sensor.readRawAccelZ(); |
adam_z | 0:150bb4605023 | 57 | data_array[3] = sensor.readRawGyroX(); |
adam_z | 0:150bb4605023 | 58 | data_array[4] = sensor.readRawGyroY(); |
adam_z | 0:150bb4605023 | 59 | data_array[5] = sensor.readRawGyroZ(); |
adam_z | 0:150bb4605023 | 60 | |
adam_z | 0:150bb4605023 | 61 | pc.printf("%d, ", data_array[0]); |
adam_z | 0:150bb4605023 | 62 | pc.printf("%d, ", data_array[1]); |
adam_z | 0:150bb4605023 | 63 | pc.printf("%d, ", data_array[2]); |
adam_z | 0:150bb4605023 | 64 | pc.printf("%d, ", data_array[3]); |
adam_z | 0:150bb4605023 | 65 | pc.printf("%d, ", data_array[4]); |
adam_z | 0:150bb4605023 | 66 | pc.printf("%d;\r\n ", data_array[5]); |
adam_z | 0:150bb4605023 | 67 | */ |
adam_z | 0:150bb4605023 | 68 | |
adam_z | 0:150bb4605023 | 69 | |
adam_z | 0:150bb4605023 | 70 | float data_array[6]; |
adam_z | 0:150bb4605023 | 71 | data_array[0] = sensor.readFloatAccelX(); |
adam_z | 0:150bb4605023 | 72 | data_array[1] = sensor.readFloatAccelY(); |
adam_z | 0:150bb4605023 | 73 | data_array[2] = sensor.readFloatAccelZ(); |
adam_z | 0:150bb4605023 | 74 | data_array[3] = sensor.readFloatGyroX(); |
adam_z | 0:150bb4605023 | 75 | data_array[4] = sensor.readFloatGyroY(); |
adam_z | 0:150bb4605023 | 76 | data_array[5] = sensor.readFloatGyroZ(); |
adam_z | 0:150bb4605023 | 77 | sensor.complementaryFilter(data_array, Ts); |
adam_z | 0:150bb4605023 | 78 | |
adam_z | 0:150bb4605023 | 79 | pc.printf("%5.4f, ", sensor.pitch); |
adam_z | 0:150bb4605023 | 80 | pc.printf("%5.4f ", sensor.roll); |
adam_z | 0:150bb4605023 | 81 | pc.printf("%5.4f, ", data_array[0]); |
adam_z | 0:150bb4605023 | 82 | pc.printf("%5.4f, ", data_array[1]); |
adam_z | 0:150bb4605023 | 83 | pc.printf("%5.4f ", data_array[2]); |
adam_z | 0:150bb4605023 | 84 | pc.printf("%5.4f, ", data_array[3]); |
adam_z | 0:150bb4605023 | 85 | pc.printf("%5.4f, ", data_array[4]); |
adam_z | 0:150bb4605023 | 86 | pc.printf("%5.4f;\r\n", data_array[5]); |
adam_z | 0:150bb4605023 | 87 | |
adam_z | 0:150bb4605023 | 88 | |
adam_z | 0:150bb4605023 | 89 | |
adam_z | 0:150bb4605023 | 90 | led1 = !led1; |
adam_z | 0:150bb4605023 | 91 | |
adam_z | 0:150bb4605023 | 92 | } |