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.
main.cpp@0:b44e107ade58, 2020-11-15 (annotated)
- Committer:
- kintoki231
- Date:
- Sun Nov 15 14:00:03 2020 +0000
- Revision:
- 0:b44e107ade58
- Child:
- 1:4a358f08c963
first commit;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kintoki231 | 0:b44e107ade58 | 1 | |
| kintoki231 | 0:b44e107ade58 | 2 | #include "mbed.h" |
| kintoki231 | 0:b44e107ade58 | 3 | |
| kintoki231 | 0:b44e107ade58 | 4 | //#define USB_DEBUG |
| kintoki231 | 0:b44e107ade58 | 5 | #define SIMPLE_USE |
| kintoki231 | 0:b44e107ade58 | 6 | const int kModuleID = 1; |
| kintoki231 | 0:b44e107ade58 | 7 | |
| kintoki231 | 0:b44e107ade58 | 8 | int sluster_up = 0; |
| kintoki231 | 0:b44e107ade58 | 9 | |
| kintoki231 | 0:b44e107ade58 | 10 | float battery_voltage; |
| kintoki231 | 0:b44e107ade58 | 11 | float motor_current; |
| kintoki231 | 0:b44e107ade58 | 12 | int sluster_power; |
| kintoki231 | 0:b44e107ade58 | 13 | int pump_power; |
| kintoki231 | 0:b44e107ade58 | 14 | |
| kintoki231 | 0:b44e107ade58 | 15 | const float k_vbat_offset[] = { |
| kintoki231 | 0:b44e107ade58 | 16 | 1.4f, |
| kintoki231 | 0:b44e107ade58 | 17 | 0.6f |
| kintoki231 | 0:b44e107ade58 | 18 | }; |
| kintoki231 | 0:b44e107ade58 | 19 | const float k_Im_offset[] = { |
| kintoki231 | 0:b44e107ade58 | 20 | 0.0f, |
| kintoki231 | 0:b44e107ade58 | 21 | 0.0f |
| kintoki231 | 0:b44e107ade58 | 22 | }; |
| kintoki231 | 0:b44e107ade58 | 23 | |
| kintoki231 | 0:b44e107ade58 | 24 | DigitalOut led[] = { |
| kintoki231 | 0:b44e107ade58 | 25 | DigitalOut(PA_4), |
| kintoki231 | 0:b44e107ade58 | 26 | DigitalOut(PA_5), |
| kintoki231 | 0:b44e107ade58 | 27 | DigitalOut(PA_6), |
| kintoki231 | 0:b44e107ade58 | 28 | }; |
| kintoki231 | 0:b44e107ade58 | 29 | DigitalOut user[] = { |
| kintoki231 | 0:b44e107ade58 | 30 | DigitalOut(PB_1), |
| kintoki231 | 0:b44e107ade58 | 31 | DigitalOut(PF_0), |
| kintoki231 | 0:b44e107ade58 | 32 | DigitalOut(PF_1), |
| kintoki231 | 0:b44e107ade58 | 33 | }; |
| kintoki231 | 0:b44e107ade58 | 34 | DigitalOut xbee_nreset(PB_5); |
| kintoki231 | 0:b44e107ade58 | 35 | AnalogIn raw_battery_voltage(PA_1); |
| kintoki231 | 0:b44e107ade58 | 36 | AnalogIn raw_motor_shunt_voltage(PA_0); |
| kintoki231 | 0:b44e107ade58 | 37 | //DigitalOut sluster(PA_8); |
| kintoki231 | 0:b44e107ade58 | 38 | //DigitalOut pump(PA_11); |
| kintoki231 | 0:b44e107ade58 | 39 | DigitalOut pump(PA_8); |
| kintoki231 | 0:b44e107ade58 | 40 | DigitalOut sluster(PA_11); //修正 |
| kintoki231 | 0:b44e107ade58 | 41 | #ifndef USE_DEBUG |
| kintoki231 | 0:b44e107ade58 | 42 | Serial xbee(PA_9, PA_10); |
| kintoki231 | 0:b44e107ade58 | 43 | #else |
| kintoki231 | 0:b44e107ade58 | 44 | Serial xbee(USBTX, USBRX); |
| kintoki231 | 0:b44e107ade58 | 45 | #endif |
| kintoki231 | 0:b44e107ade58 | 46 | |
| kintoki231 | 0:b44e107ade58 | 47 | Ticker pwm; |
| kintoki231 | 0:b44e107ade58 | 48 | |
| kintoki231 | 0:b44e107ade58 | 49 | void myPWM(void) |
| kintoki231 | 0:b44e107ade58 | 50 | { |
| kintoki231 | 0:b44e107ade58 | 51 | static int t = 0; |
| kintoki231 | 0:b44e107ade58 | 52 | if(t == 100){ |
| kintoki231 | 0:b44e107ade58 | 53 | sluster = 0; |
| kintoki231 | 0:b44e107ade58 | 54 | pump = 0; |
| kintoki231 | 0:b44e107ade58 | 55 | t = 0; |
| kintoki231 | 0:b44e107ade58 | 56 | return; |
| kintoki231 | 0:b44e107ade58 | 57 | } |
| kintoki231 | 0:b44e107ade58 | 58 | if(t == 100-sluster_power) |
| kintoki231 | 0:b44e107ade58 | 59 | sluster = 1; |
| kintoki231 | 0:b44e107ade58 | 60 | if(t == 100-pump_power) |
| kintoki231 | 0:b44e107ade58 | 61 | pump = 1; |
| kintoki231 | 0:b44e107ade58 | 62 | t++; |
| kintoki231 | 0:b44e107ade58 | 63 | } |
| kintoki231 | 0:b44e107ade58 | 64 | |
| kintoki231 | 0:b44e107ade58 | 65 | void SerialReceive(void) |
| kintoki231 | 0:b44e107ade58 | 66 | { |
| kintoki231 | 0:b44e107ade58 | 67 | char message = xbee.getc(); |
| kintoki231 | 0:b44e107ade58 | 68 | while(xbee.readable()) // bufferを綺麗に |
| kintoki231 | 0:b44e107ade58 | 69 | xbee.getc(); |
| kintoki231 | 0:b44e107ade58 | 70 | |
| kintoki231 | 0:b44e107ade58 | 71 | switch (message) { |
| kintoki231 | 0:b44e107ade58 | 72 | case 'a': |
| kintoki231 | 0:b44e107ade58 | 73 | sluster_up = 35; |
| kintoki231 | 0:b44e107ade58 | 74 | break; |
| kintoki231 | 0:b44e107ade58 | 75 | case 'u': |
| kintoki231 | 0:b44e107ade58 | 76 | sluster_power += 5; |
| kintoki231 | 0:b44e107ade58 | 77 | break; |
| kintoki231 | 0:b44e107ade58 | 78 | case 'd': |
| kintoki231 | 0:b44e107ade58 | 79 | sluster_power -= 5; |
| kintoki231 | 0:b44e107ade58 | 80 | break; |
| kintoki231 | 0:b44e107ade58 | 81 | case '+': |
| kintoki231 | 0:b44e107ade58 | 82 | pump_power += 5; |
| kintoki231 | 0:b44e107ade58 | 83 | break; |
| kintoki231 | 0:b44e107ade58 | 84 | case '-': |
| kintoki231 | 0:b44e107ade58 | 85 | pump_power -= 5; |
| kintoki231 | 0:b44e107ade58 | 86 | break; |
| kintoki231 | 0:b44e107ade58 | 87 | default : |
| kintoki231 | 0:b44e107ade58 | 88 | sluster_power = 0; |
| kintoki231 | 0:b44e107ade58 | 89 | pump_power = 0; |
| kintoki231 | 0:b44e107ade58 | 90 | sluster_up = 0; |
| kintoki231 | 0:b44e107ade58 | 91 | break; |
| kintoki231 | 0:b44e107ade58 | 92 | } |
| kintoki231 | 0:b44e107ade58 | 93 | |
| kintoki231 | 0:b44e107ade58 | 94 | if (sluster_power > 95){ |
| kintoki231 | 0:b44e107ade58 | 95 | sluster_power = 95; |
| kintoki231 | 0:b44e107ade58 | 96 | } else if (sluster_power < 0) { |
| kintoki231 | 0:b44e107ade58 | 97 | sluster_power = 0; |
| kintoki231 | 0:b44e107ade58 | 98 | } |
| kintoki231 | 0:b44e107ade58 | 99 | |
| kintoki231 | 0:b44e107ade58 | 100 | if (pump_power > 95){ |
| kintoki231 | 0:b44e107ade58 | 101 | pump_power = 95; |
| kintoki231 | 0:b44e107ade58 | 102 | } else if (pump_power < 0) { |
| kintoki231 | 0:b44e107ade58 | 103 | pump_power = 0; |
| kintoki231 | 0:b44e107ade58 | 104 | } |
| kintoki231 | 0:b44e107ade58 | 105 | led[2] =~ led[2]; |
| kintoki231 | 0:b44e107ade58 | 106 | } |
| kintoki231 | 0:b44e107ade58 | 107 | |
| kintoki231 | 0:b44e107ade58 | 108 | int main() |
| kintoki231 | 0:b44e107ade58 | 109 | { |
| kintoki231 | 0:b44e107ade58 | 110 | // Initialization |
| kintoki231 | 0:b44e107ade58 | 111 | pump_power = 0; |
| kintoki231 | 0:b44e107ade58 | 112 | sluster_power = 0; |
| kintoki231 | 0:b44e107ade58 | 113 | pwm.attach_us(myPWM, 100); // original PWM function |
| kintoki231 | 0:b44e107ade58 | 114 | //sluster.period_ms(1); |
| kintoki231 | 0:b44e107ade58 | 115 | //pump.period_ms(1); |
| kintoki231 | 0:b44e107ade58 | 116 | xbee_nreset = 1; // xBee nreset |
| kintoki231 | 0:b44e107ade58 | 117 | xbee.baud(9600); |
| kintoki231 | 0:b44e107ade58 | 118 | xbee.attach(SerialReceive,Serial::RxIrq); |
| kintoki231 | 0:b44e107ade58 | 119 | |
| kintoki231 | 0:b44e107ade58 | 120 | // start motion |
| kintoki231 | 0:b44e107ade58 | 121 | wait(1); |
| kintoki231 | 0:b44e107ade58 | 122 | #ifdef USB_DEBUG |
| kintoki231 | 0:b44e107ade58 | 123 | xbee.printf("2020 Project Iwatobi, PowerModule ID : %02d\n", kModuleID); |
| kintoki231 | 0:b44e107ade58 | 124 | #else |
| kintoki231 | 0:b44e107ade58 | 125 | xbee.printf("PM : %02d\n", kModuleID); |
| kintoki231 | 0:b44e107ade58 | 126 | #endif |
| kintoki231 | 0:b44e107ade58 | 127 | wait(1); |
| kintoki231 | 0:b44e107ade58 | 128 | led[0] = 1; |
| kintoki231 | 0:b44e107ade58 | 129 | |
| kintoki231 | 0:b44e107ade58 | 130 | |
| kintoki231 | 0:b44e107ade58 | 131 | while(1) { |
| kintoki231 | 0:b44e107ade58 | 132 | //sluster.write(0.01*sluster_power); |
| kintoki231 | 0:b44e107ade58 | 133 | //pump.write(0.01*pump_power); |
| kintoki231 | 0:b44e107ade58 | 134 | if ((sluster_up > 0)&&(sluster_up > sluster_power)){ |
| kintoki231 | 0:b44e107ade58 | 135 | sluster_power+=20; |
| kintoki231 | 0:b44e107ade58 | 136 | } |
| kintoki231 | 0:b44e107ade58 | 137 | battery_voltage = k_vbat_offset[kModuleID] + raw_battery_voltage.read() * 33.0f; // 10.0 * 3.3 |
| kintoki231 | 0:b44e107ade58 | 138 | motor_current = k_Im_offset[kModuleID] + raw_motor_shunt_voltage * 33.0f; // 10.0 * 3.3 |
| kintoki231 | 0:b44e107ade58 | 139 | led[1] =~ led[1]; |
| kintoki231 | 0:b44e107ade58 | 140 | #ifndef SIMPLE_USE |
| kintoki231 | 0:b44e107ade58 | 141 | #ifdef USB_DEBUG |
| kintoki231 | 0:b44e107ade58 | 142 | xbee.printf("p1 : %03d, p2 : %03d\n", sluster_power, pump_power); |
| kintoki231 | 0:b44e107ade58 | 143 | xbee.printf("Vbat : %2.1f [V], Im : %2.1f [A]\n", battery_voltage, motor_current); |
| kintoki231 | 0:b44e107ade58 | 144 | #else |
| kintoki231 | 0:b44e107ade58 | 145 | xbee.printf("%03d, %03d, %2.1f, %2.1f\n", sluster_power, pump_power, battery_voltage, motor_current); |
| kintoki231 | 0:b44e107ade58 | 146 | #endif |
| kintoki231 | 0:b44e107ade58 | 147 | #else |
| kintoki231 | 0:b44e107ade58 | 148 | xbee.printf("PM : %02d\n", kModuleID); |
| kintoki231 | 0:b44e107ade58 | 149 | #endif |
| kintoki231 | 0:b44e107ade58 | 150 | wait(0.5); |
| kintoki231 | 0:b44e107ade58 | 151 | } |
| kintoki231 | 0:b44e107ade58 | 152 | } |