ビーンバック回収、テープLED、美少女ボイス担当マイコンのプログラム

Dependencies:   mbed SBDBT arrc_mbed play_mp3

Committer:
sopuranoaruto
Date:
Sat Mar 19 12:38:45 2022 +0000
Revision:
6:d29a019b96cf
Parent:
5:200723c2d111

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sopuranoaruto 1:677d12692be0 1 #include "mbed.h"
sopuranoaruto 0:12a2f5f9ab60 2 #include "neopixel.h"
sopuranoaruto 4:925391180349 3 #include "mp3.hpp"
sopuranoaruto 6:d29a019b96cf 4 #include "rotary_inc.hpp"
sopuranoaruto 1:677d12692be0 5 #include "scrp_slave.hpp"
sopuranoaruto 1:677d12692be0 6
sopuranoaruto 1:677d12692be0 7 Serial pc(USBTX,USBRX);
sopuranoaruto 1:677d12692be0 8 ScrpSlave slave(PC_12,PD_2,PH_1,SERIAL_TX,SERIAL_RX,5);
sopuranoaruto 6:d29a019b96cf 9 RotaryInc rotaryx(PA_7,PA_6,30 * M_PI,512);
sopuranoaruto 6:d29a019b96cf 10 RotaryInc rotaryy(PC_4,PA_13,30 * M_PI,512);
sopuranoaruto 6:d29a019b96cf 11 PwmOut motor1[2] = {
sopuranoaruto 6:d29a019b96cf 12 PwmOut(PB_7),
sopuranoaruto 6:d29a019b96cf 13 PwmOut(PB_9)
sopuranoaruto 6:d29a019b96cf 14 };
sopuranoaruto 6:d29a019b96cf 15 PwmOut motor2[2] = {
sopuranoaruto 6:d29a019b96cf 16 PwmOut(PB_6),
sopuranoaruto 6:d29a019b96cf 17 PwmOut(PB_8)
sopuranoaruto 6:d29a019b96cf 18 };
sopuranoaruto 4:925391180349 19 NeoPixelOut npx(PB_0,16);
sopuranoaruto 4:925391180349 20 Playmp3 mp3(PA_0,PA_1);
sopuranoaruto 1:677d12692be0 21 bool colormode = 0;
sopuranoaruto 1:677d12692be0 22 bool stop = 0;
sopuranoaruto 6:d29a019b96cf 23 bool up = 1;
sopuranoaruto 6:d29a019b96cf 24 bool down = 0;
sopuranoaruto 6:d29a019b96cf 25 bool front = 0;
sopuranoaruto 6:d29a019b96cf 26 bool back = 0;
sopuranoaruto 6:d29a019b96cf 27 bool slope = 0;
sopuranoaruto 6:d29a019b96cf 28 bool move = 0;
sopuranoaruto 6:d29a019b96cf 29 int num = 0;
sopuranoaruto 1:677d12692be0 30 int i = 0;
sopuranoaruto 0:12a2f5f9ab60 31
sopuranoaruto 6:d29a019b96cf 32 //ボイス 2
sopuranoaruto 4:925391180349 33 bool play1(int rx_data,int &tx_data)
sopuranoaruto 4:925391180349 34 {
sopuranoaruto 6:d29a019b96cf 35 //農作物回収 1
sopuranoaruto 4:925391180349 36 if(rx_data == 1) {
sopuranoaruto 4:925391180349 37 mp3.set_number_of_tracks(1);
sopuranoaruto 4:925391180349 38 }
sopuranoaruto 6:d29a019b96cf 39 //農作物設置 2
sopuranoaruto 6:d29a019b96cf 40 else if(rx_data == 2) {
sopuranoaruto 4:925391180349 41 mp3.set_number_of_tracks(2);
sopuranoaruto 4:925391180349 42 }
sopuranoaruto 6:d29a019b96cf 43 //ビーンバック回収 3
sopuranoaruto 6:d29a019b96cf 44 else if(rx_data == 3) {
sopuranoaruto 4:925391180349 45 mp3.set_number_of_tracks(3);
sopuranoaruto 4:925391180349 46 }
sopuranoaruto 6:d29a019b96cf 47 //自動運転モードに移行 4
sopuranoaruto 6:d29a019b96cf 48 else if(rx_data == 4) {
sopuranoaruto 4:925391180349 49 mp3.set_number_of_tracks(4);
sopuranoaruto 4:925391180349 50 }
sopuranoaruto 6:d29a019b96cf 51 //ビーンバック発射 5
sopuranoaruto 6:d29a019b96cf 52 else if(rx_data == 5) {
sopuranoaruto 4:925391180349 53 mp3.set_number_of_tracks(5);
sopuranoaruto 6:d29a019b96cf 54 } else {}
sopuranoaruto 5:200723c2d111 55 return true;
sopuranoaruto 5:200723c2d111 56 }
sopuranoaruto 5:200723c2d111 57
sopuranoaruto 2:9adbf7e03f35 58 //モード変更 50
sopuranoaruto 1:677d12692be0 59 bool get_changemode(int rx_data,int &tx_data)
sopuranoaruto 1:677d12692be0 60 {
sopuranoaruto 4:925391180349 61 if(rx_data == 0) {
sopuranoaruto 4:925391180349 62 if(colormode == 1) {
sopuranoaruto 4:925391180349 63 colormode = 0;
sopuranoaruto 3:4d2a0e4bb4d9 64 }
sopuranoaruto 1:677d12692be0 65 } else {
sopuranoaruto 4:925391180349 66 if(colormode == 0) {
sopuranoaruto 4:925391180349 67 colormode = 1;
sopuranoaruto 3:4d2a0e4bb4d9 68 }
sopuranoaruto 1:677d12692be0 69 }
sopuranoaruto 3:4d2a0e4bb4d9 70 return true;
sopuranoaruto 1:677d12692be0 71 }
sopuranoaruto 1:677d12692be0 72
sopuranoaruto 2:9adbf7e03f35 73 //非常停止 51
sopuranoaruto 1:677d12692be0 74 bool get_stop(int rx_data,int &tx_data)
sopuranoaruto 1:677d12692be0 75 {
sopuranoaruto 3:4d2a0e4bb4d9 76 if(rx_data == 0) {
sopuranoaruto 3:4d2a0e4bb4d9 77 stop = 0;
sopuranoaruto 3:4d2a0e4bb4d9 78 } else {
sopuranoaruto 1:677d12692be0 79 stop = 1;
sopuranoaruto 1:677d12692be0 80 for(i=0; i<npx.numPixels(); i++) {
sopuranoaruto 1:677d12692be0 81 npx.setPixelColor(i,0x000000);
sopuranoaruto 1:677d12692be0 82 }
sopuranoaruto 1:677d12692be0 83 }
sopuranoaruto 3:4d2a0e4bb4d9 84 return true;
sopuranoaruto 1:677d12692be0 85 }
sopuranoaruto 0:12a2f5f9ab60 86
sopuranoaruto 6:d29a019b96cf 87 //ビーンバック回収 1
sopuranoaruto 6:d29a019b96cf 88 bool getting(int rx_data,int &tx_data)
sopuranoaruto 4:925391180349 89 {
sopuranoaruto 4:925391180349 90 if(rx_data == 0) {
sopuranoaruto 6:d29a019b96cf 91 if(move == 1) {
sopuranoaruto 6:d29a019b96cf 92 move = 0;
sopuranoaruto 4:925391180349 93 }
sopuranoaruto 4:925391180349 94 } else {
sopuranoaruto 6:d29a019b96cf 95 if(move == 0) {
sopuranoaruto 6:d29a019b96cf 96 move = 1;
sopuranoaruto 6:d29a019b96cf 97 num++;
sopuranoaruto 4:925391180349 98 }
sopuranoaruto 4:925391180349 99 }
sopuranoaruto 4:925391180349 100 return true;
sopuranoaruto 4:925391180349 101 }
sopuranoaruto 4:925391180349 102
sopuranoaruto 1:677d12692be0 103 int main()
sopuranoaruto 1:677d12692be0 104 {
sopuranoaruto 4:925391180349 105 //ビーンバック回収
sopuranoaruto 6:d29a019b96cf 106 slave.addCMD(1,getting);
sopuranoaruto 6:d29a019b96cf 107 //ボイス
sopuranoaruto 6:d29a019b96cf 108 slave.addCMD(2,play1);
sopuranoaruto 2:9adbf7e03f35 109 //モード変更
sopuranoaruto 1:677d12692be0 110 slave.addCMD(50,get_changemode);
sopuranoaruto 2:9adbf7e03f35 111 //非常停止
sopuranoaruto 1:677d12692be0 112 slave.addCMD(51,get_stop);
sopuranoaruto 2:9adbf7e03f35 113 //光の強さ
sopuranoaruto 1:677d12692be0 114 npx.global_scale = 0.05f;
sopuranoaruto 2:9adbf7e03f35 115 //信号来ていないときは光らない
sopuranoaruto 0:12a2f5f9ab60 116 npx.normalize = false;
sopuranoaruto 4:925391180349 117 //音量セット
sopuranoaruto 4:925391180349 118 mp3.set_volume(255);
sopuranoaruto 4:925391180349 119 //クワイエットモードOFF
sopuranoaruto 4:925391180349 120 mp3.quiet_mode(false);
sopuranoaruto 4:925391180349 121
sopuranoaruto 1:677d12692be0 122 while(1) {
sopuranoaruto 2:9adbf7e03f35 123 //非常停止解除
sopuranoaruto 1:677d12692be0 124 if(stop == 0) {
sopuranoaruto 6:d29a019b96cf 125 double distance = rotaryx.get();
sopuranoaruto 6:d29a019b96cf 126 double height = rotaryy.get();
sopuranoaruto 6:d29a019b96cf 127 pc.printf("num %d move %d\n",num,move);
sopuranoaruto 6:d29a019b96cf 128 //pc.printf("distance %lf height %lf up %d down %d front %d back %d\n",distance,height,up,down,front,back);
sopuranoaruto 6:d29a019b96cf 129 wait(0.01);
sopuranoaruto 6:d29a019b96cf 130 //手動モード 黄色
sopuranoaruto 6:d29a019b96cf 131 if(colormode == 0) {
sopuranoaruto 6:d29a019b96cf 132 for(i = 0; i < npx.numPixels(); i++) {
sopuranoaruto 6:d29a019b96cf 133 npx.setPixelColor(i,0xFFF100);
sopuranoaruto 6:d29a019b96cf 134 npx.show();
sopuranoaruto 6:d29a019b96cf 135 wait(0.01);
sopuranoaruto 6:d29a019b96cf 136 if(i == npx.numPixels()) {
sopuranoaruto 6:d29a019b96cf 137 i = 0;
sopuranoaruto 1:677d12692be0 138 }
sopuranoaruto 6:d29a019b96cf 139 }
sopuranoaruto 6:d29a019b96cf 140 pc.printf("control\n");
sopuranoaruto 6:d29a019b96cf 141 //自動モード 緑
sopuranoaruto 6:d29a019b96cf 142 } else if(colormode == 1) {
sopuranoaruto 6:d29a019b96cf 143 for(i = 0; i < npx.numPixels(); i++) {
sopuranoaruto 6:d29a019b96cf 144 npx.setPixelColor(i,0x00FF00);
sopuranoaruto 6:d29a019b96cf 145 npx.show();
sopuranoaruto 6:d29a019b96cf 146 wait(0.01);
sopuranoaruto 6:d29a019b96cf 147 if(i == npx.numPixels()) {
sopuranoaruto 6:d29a019b96cf 148 i = 0;
sopuranoaruto 4:925391180349 149 }
sopuranoaruto 1:677d12692be0 150 }
sopuranoaruto 6:d29a019b96cf 151 pc.printf("auto\n");
sopuranoaruto 6:d29a019b96cf 152 }
sopuranoaruto 6:d29a019b96cf 153 if(num == 0) {}
sopuranoaruto 6:d29a019b96cf 154 else {
sopuranoaruto 6:d29a019b96cf 155 switch(num%2) {
sopuranoaruto 6:d29a019b96cf 156 case 1:
sopuranoaruto 6:d29a019b96cf 157 if(distance >= -300 && up == 1) {
sopuranoaruto 6:d29a019b96cf 158 motor1[0] = 0.35;
sopuranoaruto 6:d29a019b96cf 159 motor2[0] = 0;
sopuranoaruto 6:d29a019b96cf 160 motor1[1] = 0;
sopuranoaruto 6:d29a019b96cf 161 motor2[1] = 0;
sopuranoaruto 6:d29a019b96cf 162 }
sopuranoaruto 6:d29a019b96cf 163
sopuranoaruto 6:d29a019b96cf 164 if(distance <= -300 && up == 1) {
sopuranoaruto 6:d29a019b96cf 165 up = 0;
sopuranoaruto 6:d29a019b96cf 166 down = 0;
sopuranoaruto 6:d29a019b96cf 167 front = 1;
sopuranoaruto 6:d29a019b96cf 168 back = 0;
sopuranoaruto 6:d29a019b96cf 169 slope = 0;
sopuranoaruto 6:d29a019b96cf 170 }
sopuranoaruto 6:d29a019b96cf 171
sopuranoaruto 6:d29a019b96cf 172 if(front == 1 && height >= -127) {
sopuranoaruto 6:d29a019b96cf 173 motor1[0] = 0;
sopuranoaruto 6:d29a019b96cf 174 motor2[0] = 0;
sopuranoaruto 6:d29a019b96cf 175 motor1[1] = 0.2;
sopuranoaruto 6:d29a019b96cf 176 motor2[1] = 0;
sopuranoaruto 6:d29a019b96cf 177 }
sopuranoaruto 6:d29a019b96cf 178
sopuranoaruto 6:d29a019b96cf 179 if(height <= -127 && front == 1) {
sopuranoaruto 6:d29a019b96cf 180 up = 0;
sopuranoaruto 6:d29a019b96cf 181 down = 1;
sopuranoaruto 6:d29a019b96cf 182 front = 0;
sopuranoaruto 6:d29a019b96cf 183 back = 0;
sopuranoaruto 6:d29a019b96cf 184 slope = 0;
sopuranoaruto 6:d29a019b96cf 185 }
sopuranoaruto 6:d29a019b96cf 186
sopuranoaruto 6:d29a019b96cf 187 if(distance <= -300 && height <= -127) {
sopuranoaruto 6:d29a019b96cf 188 motor1[0] = 0;
sopuranoaruto 6:d29a019b96cf 189 motor2[0] = 0;
sopuranoaruto 6:d29a019b96cf 190 motor1[1] = 0;
sopuranoaruto 6:d29a019b96cf 191 motor2[1] = 0;
sopuranoaruto 6:d29a019b96cf 192 }
sopuranoaruto 6:d29a019b96cf 193 break;
sopuranoaruto 6:d29a019b96cf 194
sopuranoaruto 6:d29a019b96cf 195 case 0:
sopuranoaruto 6:d29a019b96cf 196 if(distance <= -90 && down == 1) {
sopuranoaruto 6:d29a019b96cf 197 motor1[0] = 0;
sopuranoaruto 6:d29a019b96cf 198 motor2[0] = 0.35;
sopuranoaruto 6:d29a019b96cf 199 motor1[1] = 0;
sopuranoaruto 6:d29a019b96cf 200 motor2[1] = 0;
sopuranoaruto 4:925391180349 201 }
sopuranoaruto 6:d29a019b96cf 202
sopuranoaruto 6:d29a019b96cf 203 if(distance >= -90 && down == 1) {
sopuranoaruto 6:d29a019b96cf 204 up = 0;
sopuranoaruto 6:d29a019b96cf 205 down = 0;
sopuranoaruto 6:d29a019b96cf 206 front = 0;
sopuranoaruto 6:d29a019b96cf 207 back = 1;
sopuranoaruto 6:d29a019b96cf 208 slope = 0;
sopuranoaruto 6:d29a019b96cf 209 }
sopuranoaruto 6:d29a019b96cf 210
sopuranoaruto 6:d29a019b96cf 211 if(distance <= 0 && back == 1) {
sopuranoaruto 6:d29a019b96cf 212 motor1[0] = 0;
sopuranoaruto 6:d29a019b96cf 213 motor2[0] = 0.2;
sopuranoaruto 6:d29a019b96cf 214 motor1[1] = 0;
sopuranoaruto 6:d29a019b96cf 215 motor2[1] = 0.2;
sopuranoaruto 6:d29a019b96cf 216 }
sopuranoaruto 6:d29a019b96cf 217
sopuranoaruto 6:d29a019b96cf 218 if(distance >= 0 && back == 1) {
sopuranoaruto 6:d29a019b96cf 219 up = 0;
sopuranoaruto 6:d29a019b96cf 220 down = 0;
sopuranoaruto 6:d29a019b96cf 221 front = 0;
sopuranoaruto 6:d29a019b96cf 222 back = 0;
sopuranoaruto 6:d29a019b96cf 223 slope = 1;
sopuranoaruto 4:925391180349 224 }
sopuranoaruto 6:d29a019b96cf 225
sopuranoaruto 6:d29a019b96cf 226 if(slope == 1 && height <= 1) {
sopuranoaruto 6:d29a019b96cf 227 motor1[0] = 0;
sopuranoaruto 6:d29a019b96cf 228 motor2[0] = 0;
sopuranoaruto 6:d29a019b96cf 229 motor1[1] = 0;
sopuranoaruto 6:d29a019b96cf 230 motor2[1] = 0.2;
sopuranoaruto 6:d29a019b96cf 231 }
sopuranoaruto 6:d29a019b96cf 232
sopuranoaruto 6:d29a019b96cf 233 if(height >= 1 && slope == 1) {
sopuranoaruto 6:d29a019b96cf 234 up = 1;
sopuranoaruto 6:d29a019b96cf 235 down = 0;
sopuranoaruto 6:d29a019b96cf 236 front = 0;
sopuranoaruto 6:d29a019b96cf 237 back = 0;
sopuranoaruto 6:d29a019b96cf 238 slope = 0;
sopuranoaruto 6:d29a019b96cf 239 }
sopuranoaruto 6:d29a019b96cf 240
sopuranoaruto 6:d29a019b96cf 241 if(distance >= 1 && height >= 1) {
sopuranoaruto 6:d29a019b96cf 242 motor1[0] = 0;
sopuranoaruto 6:d29a019b96cf 243 motor2[0] = 0;
sopuranoaruto 6:d29a019b96cf 244 motor1[1] = 0;
sopuranoaruto 6:d29a019b96cf 245 motor2[1] = 0;
sopuranoaruto 6:d29a019b96cf 246 }
sopuranoaruto 6:d29a019b96cf 247 break;
sopuranoaruto 6:d29a019b96cf 248 default:
sopuranoaruto 6:d29a019b96cf 249 break;
sopuranoaruto 1:677d12692be0 250 }
sopuranoaruto 6:d29a019b96cf 251 }
sopuranoaruto 6:d29a019b96cf 252 //非常停止
sopuranoaruto 1:677d12692be0 253 } else if(stop == 1) {
sopuranoaruto 1:677d12692be0 254 for(i = 0; i < npx.numPixels(); i++) {
sopuranoaruto 1:677d12692be0 255 npx.setPixelColor(i,0x000000);
sopuranoaruto 1:677d12692be0 256 npx.show();
sopuranoaruto 6:d29a019b96cf 257 wait(0.01);
sopuranoaruto 1:677d12692be0 258 if(i == npx.numPixels()) {
sopuranoaruto 1:677d12692be0 259 i = 0;
sopuranoaruto 1:677d12692be0 260 }
sopuranoaruto 0:12a2f5f9ab60 261 }
sopuranoaruto 4:925391180349 262 pc.printf("stopping\n");
sopuranoaruto 0:12a2f5f9ab60 263 }
sopuranoaruto 0:12a2f5f9ab60 264 }
sopuranoaruto 0:12a2f5f9ab60 265 }