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.
Fork of Nucleo_CaitSith_Firmware by
main.cpp@3:9ac9fdf1856e, 2014-11-08 (annotated)
- Committer:
- YosukeK
- Date:
- Sat Nov 08 02:45:59 2014 +0000
- Revision:
- 3:9ac9fdf1856e
- Parent:
- 2:91135f19ac12
- Child:
- 4:039a7d1ce3e9
Added DelayServo class.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| YosukeK | 0:a9b204e27472 | 1 | #include <mbed.h> |
| YosukeK | 0:a9b204e27472 | 2 | #include <PwmServo.h> |
| YosukeK | 1:5f6dd444850a | 3 | #include <ExtendedServo.h> |
| YosukeK | 3:9ac9fdf1856e | 4 | #include <DelayServo.h> |
| YosukeK | 3:9ac9fdf1856e | 5 | //#include <RobotArm.h> |
| YosukeK | 0:a9b204e27472 | 6 | #include <def_resources.h> |
| YosukeK | 0:a9b204e27472 | 7 | #include <Serial.h> |
| YosukeK | 0:a9b204e27472 | 8 | |
| YosukeK | 0:a9b204e27472 | 9 | /* |
| YosukeK | 0:a9b204e27472 | 10 | |
| YosukeK | 0:a9b204e27472 | 11 | Controller firmware for CaitSithDanger |
| YosukeK | 0:a9b204e27472 | 12 | |
| YosukeK | 0:a9b204e27472 | 13 | Kyoto-Densou-An 2014 |
| YosukeK | 0:a9b204e27472 | 14 | |
| YosukeK | 0:a9b204e27472 | 15 | Author : yishii |
| YosukeK | 0:a9b204e27472 | 16 | */ |
| YosukeK | 0:a9b204e27472 | 17 | |
| YosukeK | 0:a9b204e27472 | 18 | #define DEBUG |
| YosukeK | 0:a9b204e27472 | 19 | #define BUFFER_SIZE 11 |
| YosukeK | 3:9ac9fdf1856e | 20 | //#define COMMAND_TOTAL 3 |
| YosukeK | 2:91135f19ac12 | 21 | |
| YosukeK | 0:a9b204e27472 | 22 | |
| YosukeK | 0:a9b204e27472 | 23 | char receive[BUFFER_SIZE]; |
| YosukeK | 0:a9b204e27472 | 24 | //char* p_receive; |
| YosukeK | 3:9ac9fdf1856e | 25 | //int recvPnt = 0; |
| YosukeK | 0:a9b204e27472 | 26 | |
| YosukeK | 2:91135f19ac12 | 27 | int oyatsuCnt = 0; |
| YosukeK | 2:91135f19ac12 | 28 | |
| YosukeK | 3:9ac9fdf1856e | 29 | int serial_gets(char *buffer, int size); |
| YosukeK | 0:a9b204e27472 | 30 | |
| YosukeK | 3:9ac9fdf1856e | 31 | int initialize(); |
| YosukeK | 0:a9b204e27472 | 32 | |
| YosukeK | 0:a9b204e27472 | 33 | int main() { |
| YosukeK | 3:9ac9fdf1856e | 34 | |
| YosukeK | 3:9ac9fdf1856e | 35 | initialize(); |
| YosukeK | 1:5f6dd444850a | 36 | |
| YosukeK | 0:a9b204e27472 | 37 | while(1) { |
| YosukeK | 0:a9b204e27472 | 38 | char buffer[BUFFER_SIZE]; |
| YosukeK | 3:9ac9fdf1856e | 39 | // コマンド受信 |
| YosukeK | 0:a9b204e27472 | 40 | int size = serial_gets(buffer, BUFFER_SIZE); |
| YosukeK | 0:a9b204e27472 | 41 | if (size > 0) { |
| YosukeK | 3:9ac9fdf1856e | 42 | //pc.printf("%s", buffer); |
| YosukeK | 3:9ac9fdf1856e | 43 | |
| YosukeK | 3:9ac9fdf1856e | 44 | // コマンド判定 |
| YosukeK | 0:a9b204e27472 | 45 | if (strncmp(buffer, "CT", 2) == 0) { |
| YosukeK | 0:a9b204e27472 | 46 | |
| YosukeK | 0:a9b204e27472 | 47 | myled = !myled; |
| YosukeK | 1:5f6dd444850a | 48 | |
| YosukeK | 1:5f6dd444850a | 49 | bool ret = false; |
| YosukeK | 0:a9b204e27472 | 50 | |
| YosukeK | 0:a9b204e27472 | 51 | if (size == 2) { |
| YosukeK | 1:5f6dd444850a | 52 | ret = true; |
| YosukeK | 0:a9b204e27472 | 53 | } else if (size >= 3) { |
| YosukeK | 3:9ac9fdf1856e | 54 | |
| YosukeK | 3:9ac9fdf1856e | 55 | |
| YosukeK | 3:9ac9fdf1856e | 56 | |
| YosukeK | 0:a9b204e27472 | 57 | switch (buffer[2]) { |
| YosukeK | 3:9ac9fdf1856e | 58 | case 'Z': |
| YosukeK | 3:9ac9fdf1856e | 59 | |
| YosukeK | 3:9ac9fdf1856e | 60 | initialize(); |
| YosukeK | 3:9ac9fdf1856e | 61 | |
| YosukeK | 3:9ac9fdf1856e | 62 | ret = true; |
| YosukeK | 3:9ac9fdf1856e | 63 | break; |
| YosukeK | 3:9ac9fdf1856e | 64 | |
| YosukeK | 2:91135f19ac12 | 65 | case 'N': |
| YosukeK | 3:9ac9fdf1856e | 66 | |
| YosukeK | 2:91135f19ac12 | 67 | ret = true; |
| YosukeK | 2:91135f19ac12 | 68 | if (buffer[3] == '0') { |
| YosukeK | 2:91135f19ac12 | 69 | nyandaLight = 0; |
| YosukeK | 2:91135f19ac12 | 70 | } else if (buffer[3] == '1') { |
| YosukeK | 2:91135f19ac12 | 71 | nyandaLight = 1; |
| YosukeK | 2:91135f19ac12 | 72 | } else { |
| YosukeK | 2:91135f19ac12 | 73 | ret = false; |
| YosukeK | 2:91135f19ac12 | 74 | } |
| YosukeK | 2:91135f19ac12 | 75 | |
| YosukeK | 2:91135f19ac12 | 76 | break; |
| YosukeK | 2:91135f19ac12 | 77 | |
| YosukeK | 0:a9b204e27472 | 78 | case 'O': |
| YosukeK | 2:91135f19ac12 | 79 | |
| YosukeK | 1:5f6dd444850a | 80 | ret = true; |
| YosukeK | 2:91135f19ac12 | 81 | if (buffer[3] == '0') { |
| YosukeK | 2:91135f19ac12 | 82 | oyatsuCnt = 0; |
| YosukeK | 2:91135f19ac12 | 83 | oyatsuFeeder.setAngle(0); |
| YosukeK | 2:91135f19ac12 | 84 | } else if (buffer[3] == '1') { |
| YosukeK | 2:91135f19ac12 | 85 | if (oyatsuCnt <= 3) { |
| YosukeK | 2:91135f19ac12 | 86 | oyatsuCnt++; |
| YosukeK | 2:91135f19ac12 | 87 | } |
| YosukeK | 2:91135f19ac12 | 88 | |
| YosukeK | 2:91135f19ac12 | 89 | switch (oyatsuCnt) { |
| YosukeK | 2:91135f19ac12 | 90 | //case 0: |
| YosukeK | 2:91135f19ac12 | 91 | // oyatusFeeder.setAngle(0); |
| YosukeK | 2:91135f19ac12 | 92 | //break; |
| YosukeK | 2:91135f19ac12 | 93 | case 1: |
| YosukeK | 2:91135f19ac12 | 94 | oyatsuFeeder.setAngle(60); |
| YosukeK | 2:91135f19ac12 | 95 | break; |
| YosukeK | 2:91135f19ac12 | 96 | |
| YosukeK | 2:91135f19ac12 | 97 | case 2: |
| YosukeK | 2:91135f19ac12 | 98 | oyatsuFeeder.setAngle(90); |
| YosukeK | 2:91135f19ac12 | 99 | break; |
| YosukeK | 2:91135f19ac12 | 100 | |
| YosukeK | 2:91135f19ac12 | 101 | case 3: |
| YosukeK | 2:91135f19ac12 | 102 | oyatsuFeeder.setAngle(120); |
| YosukeK | 2:91135f19ac12 | 103 | break; |
| YosukeK | 2:91135f19ac12 | 104 | |
| YosukeK | 2:91135f19ac12 | 105 | default: |
| YosukeK | 2:91135f19ac12 | 106 | break; |
| YosukeK | 2:91135f19ac12 | 107 | } |
| YosukeK | 2:91135f19ac12 | 108 | } else { |
| YosukeK | 2:91135f19ac12 | 109 | ret = false; |
| YosukeK | 2:91135f19ac12 | 110 | } |
| YosukeK | 2:91135f19ac12 | 111 | |
| YosukeK | 0:a9b204e27472 | 112 | break; |
| YosukeK | 0:a9b204e27472 | 113 | case 'H': |
| YosukeK | 0:a9b204e27472 | 114 | |
| YosukeK | 0:a9b204e27472 | 115 | int servoAngle = -1; |
| YosukeK | 0:a9b204e27472 | 116 | servoAngle = atoi((buffer+4)); |
| YosukeK | 1:5f6dd444850a | 117 | |
| YosukeK | 1:5f6dd444850a | 118 | ret = true; |
| YosukeK | 1:5f6dd444850a | 119 | if (buffer[3] == '1') { |
| YosukeK | 1:5f6dd444850a | 120 | shakeHead.setAngle(servoAngle); |
| YosukeK | 1:5f6dd444850a | 121 | } else if (buffer[3] == '2') { |
| YosukeK | 1:5f6dd444850a | 122 | nodHead.setAngle(servoAngle); |
| YosukeK | 1:5f6dd444850a | 123 | } else { |
| YosukeK | 1:5f6dd444850a | 124 | ret = false; |
| YosukeK | 1:5f6dd444850a | 125 | } |
| YosukeK | 1:5f6dd444850a | 126 | break; |
| YosukeK | 0:a9b204e27472 | 127 | |
| YosukeK | 1:5f6dd444850a | 128 | case 'L': |
| YosukeK | 1:5f6dd444850a | 129 | servoAngle = atoi((buffer+4)); |
| YosukeK | 1:5f6dd444850a | 130 | |
| YosukeK | 1:5f6dd444850a | 131 | ret = true; |
| YosukeK | 1:5f6dd444850a | 132 | if (buffer[3] == '1') { |
| YosukeK | 3:9ac9fdf1856e | 133 | leftShoulder.setAngle(servoAngle); |
| YosukeK | 1:5f6dd444850a | 134 | } else if (buffer[3] == '2') { |
| YosukeK | 3:9ac9fdf1856e | 135 | leftArm.setAngle(servoAngle); |
| YosukeK | 1:5f6dd444850a | 136 | } else { |
| YosukeK | 1:5f6dd444850a | 137 | ret = false; |
| YosukeK | 0:a9b204e27472 | 138 | } |
| YosukeK | 1:5f6dd444850a | 139 | break; |
| YosukeK | 1:5f6dd444850a | 140 | |
| YosukeK | 1:5f6dd444850a | 141 | case 'R': |
| YosukeK | 1:5f6dd444850a | 142 | servoAngle = atoi((buffer+4)); |
| YosukeK | 0:a9b204e27472 | 143 | |
| YosukeK | 1:5f6dd444850a | 144 | ret = true; |
| YosukeK | 0:a9b204e27472 | 145 | if (buffer[3] == '1') { |
| YosukeK | 3:9ac9fdf1856e | 146 | rightShoulder.setAngle(servoAngle); |
| YosukeK | 0:a9b204e27472 | 147 | } else if (buffer[3] == '2') { |
| YosukeK | 3:9ac9fdf1856e | 148 | rightArm.setAngle(servoAngle); |
| YosukeK | 0:a9b204e27472 | 149 | } else { |
| YosukeK | 1:5f6dd444850a | 150 | ret = false; |
| YosukeK | 0:a9b204e27472 | 151 | } |
| YosukeK | 1:5f6dd444850a | 152 | break; |
| YosukeK | 1:5f6dd444850a | 153 | |
| YosukeK | 1:5f6dd444850a | 154 | default: |
| YosukeK | 1:5f6dd444850a | 155 | ret = false; |
| YosukeK | 0:a9b204e27472 | 156 | break; |
| YosukeK | 0:a9b204e27472 | 157 | } |
| YosukeK | 0:a9b204e27472 | 158 | } |
| YosukeK | 0:a9b204e27472 | 159 | |
| YosukeK | 1:5f6dd444850a | 160 | if (ret) { |
| YosukeK | 1:5f6dd444850a | 161 | pc.printf("\r\nOK\r\n"); |
| YosukeK | 1:5f6dd444850a | 162 | } else { |
| YosukeK | 1:5f6dd444850a | 163 | pc.printf("\r\nNG\r\n"); |
| YosukeK | 1:5f6dd444850a | 164 | } |
| YosukeK | 0:a9b204e27472 | 165 | } |
| YosukeK | 0:a9b204e27472 | 166 | } |
| YosukeK | 0:a9b204e27472 | 167 | |
| YosukeK | 0:a9b204e27472 | 168 | } |
| YosukeK | 0:a9b204e27472 | 169 | } |
| YosukeK | 0:a9b204e27472 | 170 | |
| YosukeK | 0:a9b204e27472 | 171 | |
| YosukeK | 3:9ac9fdf1856e | 172 | int initialize() { |
| YosukeK | 3:9ac9fdf1856e | 173 | myled = 1; |
| YosukeK | 3:9ac9fdf1856e | 174 | |
| YosukeK | 3:9ac9fdf1856e | 175 | nyandaLight = 0; |
| YosukeK | 3:9ac9fdf1856e | 176 | |
| YosukeK | 3:9ac9fdf1856e | 177 | shakeHead.setAngle(0); |
| YosukeK | 3:9ac9fdf1856e | 178 | nodHead.setAngle(0); |
| YosukeK | 3:9ac9fdf1856e | 179 | leftArm.setAngle(0); |
| YosukeK | 3:9ac9fdf1856e | 180 | leftShoulder.setAngle(0); |
| YosukeK | 3:9ac9fdf1856e | 181 | rightArm.setAngle(0); |
| YosukeK | 3:9ac9fdf1856e | 182 | rightShoulder.setAngle(0); |
| YosukeK | 3:9ac9fdf1856e | 183 | } |
| YosukeK | 0:a9b204e27472 | 184 | |
| YosukeK | 3:9ac9fdf1856e | 185 | |
| YosukeK | 3:9ac9fdf1856e | 186 | /* |
| YosukeK | 3:9ac9fdf1856e | 187 | * |
| YosukeK | 3:9ac9fdf1856e | 188 | */ |
| YosukeK | 3:9ac9fdf1856e | 189 | int serial_gets(char *buffer, int size) { |
| YosukeK | 0:a9b204e27472 | 190 | /*if (!pc.readable()) { |
| YosukeK | 0:a9b204e27472 | 191 | return 0; |
| YosukeK | 0:a9b204e27472 | 192 | }*/ |
| YosukeK | 0:a9b204e27472 | 193 | |
| YosukeK | 0:a9b204e27472 | 194 | int i = 0; |
| YosukeK | 0:a9b204e27472 | 195 | while (i < size - 1) { |
| YosukeK | 0:a9b204e27472 | 196 | if (pc.readable()) { |
| YosukeK | 0:a9b204e27472 | 197 | buffer[i] = pc.getc(); |
| YosukeK | 0:a9b204e27472 | 198 | //pc.printf("%c", buffer[i]); |
| YosukeK | 0:a9b204e27472 | 199 | |
| YosukeK | 0:a9b204e27472 | 200 | if (buffer[i] == '\r') { |
| YosukeK | 0:a9b204e27472 | 201 | --i; |
| YosukeK | 0:a9b204e27472 | 202 | } |
| YosukeK | 0:a9b204e27472 | 203 | if (buffer[i] == '\n') { |
| YosukeK | 0:a9b204e27472 | 204 | break; |
| YosukeK | 0:a9b204e27472 | 205 | } |
| YosukeK | 0:a9b204e27472 | 206 | ++i; |
| YosukeK | 0:a9b204e27472 | 207 | }/* else { |
| YosukeK | 0:a9b204e27472 | 208 | wait_ms(1); |
| YosukeK | 0:a9b204e27472 | 209 | }*/ |
| YosukeK | 0:a9b204e27472 | 210 | } |
| YosukeK | 0:a9b204e27472 | 211 | buffer[i] = '\0'; |
| YosukeK | 0:a9b204e27472 | 212 | //pc.printf("%s", buffer); |
| YosukeK | 0:a9b204e27472 | 213 | return i; |
| YosukeK | 0:a9b204e27472 | 214 | } |
