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

Dependencies:   mbed SBDBT arrc_mbed play_mp3

Committer:
sopuranoaruto
Date:
Fri Mar 11 05:38:21 2022 +0000
Revision:
5:200723c2d111
Parent:
4:925391180349
Child:
6:d29a019b96cf

        

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 1:677d12692be0 4 #include "scrp_slave.hpp"
sopuranoaruto 1:677d12692be0 5
sopuranoaruto 1:677d12692be0 6 Serial pc(USBTX,USBRX);
sopuranoaruto 1:677d12692be0 7 ScrpSlave slave(PC_12,PD_2,PH_1,SERIAL_TX,SERIAL_RX,5);
sopuranoaruto 4:925391180349 8 NeoPixelOut npx(PB_0,16);
sopuranoaruto 4:925391180349 9 Playmp3 mp3(PA_0,PA_1);
sopuranoaruto 4:925391180349 10 bool areamode = 0;
sopuranoaruto 1:677d12692be0 11 bool colormode = 0;
sopuranoaruto 1:677d12692be0 12 bool stop = 0;
sopuranoaruto 4:925391180349 13 bool start = 0;
sopuranoaruto 3:4d2a0e4bb4d9 14
sopuranoaruto 1:677d12692be0 15 int i = 0;
sopuranoaruto 0:12a2f5f9ab60 16
sopuranoaruto 4:925391180349 17 //農作物回収 1
sopuranoaruto 4:925391180349 18 bool play1(int rx_data,int &tx_data)
sopuranoaruto 4:925391180349 19 {
sopuranoaruto 4:925391180349 20 if(rx_data == 1) {
sopuranoaruto 4:925391180349 21 mp3.set_number_of_tracks(1);
sopuranoaruto 4:925391180349 22 }
sopuranoaruto 4:925391180349 23 return true;
sopuranoaruto 4:925391180349 24 }
sopuranoaruto 4:925391180349 25
sopuranoaruto 4:925391180349 26 //農作物設置 2
sopuranoaruto 4:925391180349 27 bool play2(int rx_data,int &tx_data)
sopuranoaruto 4:925391180349 28 {
sopuranoaruto 4:925391180349 29 if(rx_data == 1) {
sopuranoaruto 4:925391180349 30 mp3.set_number_of_tracks(2);
sopuranoaruto 4:925391180349 31 }
sopuranoaruto 4:925391180349 32 return true;
sopuranoaruto 4:925391180349 33 }
sopuranoaruto 4:925391180349 34
sopuranoaruto 4:925391180349 35 //ビーンバック回収 3
sopuranoaruto 4:925391180349 36 bool play3(int rx_data,int &tx_data)
sopuranoaruto 4:925391180349 37 {
sopuranoaruto 4:925391180349 38 if(rx_data == 1) {
sopuranoaruto 4:925391180349 39 mp3.set_number_of_tracks(3);
sopuranoaruto 4:925391180349 40 }
sopuranoaruto 4:925391180349 41 return true;
sopuranoaruto 4:925391180349 42 }
sopuranoaruto 4:925391180349 43
sopuranoaruto 4:925391180349 44 //自動運転モードに移行 4
sopuranoaruto 4:925391180349 45 bool play4(int rx_data,int &tx_data)
sopuranoaruto 4:925391180349 46 {
sopuranoaruto 4:925391180349 47 if(rx_data == 1) {
sopuranoaruto 4:925391180349 48 mp3.set_number_of_tracks(4);
sopuranoaruto 4:925391180349 49 }
sopuranoaruto 4:925391180349 50 return true;
sopuranoaruto 4:925391180349 51 }
sopuranoaruto 4:925391180349 52
sopuranoaruto 4:925391180349 53 //ビーンバック発射 5
sopuranoaruto 4:925391180349 54 bool play5(int rx_data,int &tx_data)
sopuranoaruto 4:925391180349 55 {
sopuranoaruto 4:925391180349 56 if(rx_data == 1) {
sopuranoaruto 4:925391180349 57 mp3.set_number_of_tracks(5);
sopuranoaruto 4:925391180349 58 }
sopuranoaruto 4:925391180349 59 return true;
sopuranoaruto 4:925391180349 60 }
sopuranoaruto 4:925391180349 61
sopuranoaruto 5:200723c2d111 62 //スタート 6
sopuranoaruto 5:200723c2d111 63 bool get_start(int rx_data,int &tx_data)
sopuranoaruto 5:200723c2d111 64 {
sopuranoaruto 5:200723c2d111 65 if(rx_data == 0) {
sopuranoaruto 5:200723c2d111 66 if(start == 1) {
sopuranoaruto 5:200723c2d111 67 start = 0;
sopuranoaruto 5:200723c2d111 68 }
sopuranoaruto 5:200723c2d111 69 } else {
sopuranoaruto 5:200723c2d111 70 if(start == 0) {
sopuranoaruto 5:200723c2d111 71 start = 1;
sopuranoaruto 5:200723c2d111 72 }
sopuranoaruto 5:200723c2d111 73 }
sopuranoaruto 5:200723c2d111 74 return true;
sopuranoaruto 5:200723c2d111 75 }
sopuranoaruto 5:200723c2d111 76
sopuranoaruto 2:9adbf7e03f35 77 //モード変更 50
sopuranoaruto 1:677d12692be0 78 bool get_changemode(int rx_data,int &tx_data)
sopuranoaruto 1:677d12692be0 79 {
sopuranoaruto 4:925391180349 80 if(rx_data == 0) {
sopuranoaruto 4:925391180349 81 if(colormode == 1) {
sopuranoaruto 4:925391180349 82 colormode = 0;
sopuranoaruto 3:4d2a0e4bb4d9 83 }
sopuranoaruto 1:677d12692be0 84 } else {
sopuranoaruto 4:925391180349 85 if(colormode == 0) {
sopuranoaruto 4:925391180349 86 colormode = 1;
sopuranoaruto 3:4d2a0e4bb4d9 87 }
sopuranoaruto 1:677d12692be0 88 }
sopuranoaruto 3:4d2a0e4bb4d9 89 return true;
sopuranoaruto 1:677d12692be0 90 }
sopuranoaruto 1:677d12692be0 91
sopuranoaruto 2:9adbf7e03f35 92 //非常停止 51
sopuranoaruto 1:677d12692be0 93 bool get_stop(int rx_data,int &tx_data)
sopuranoaruto 1:677d12692be0 94 {
sopuranoaruto 3:4d2a0e4bb4d9 95 if(rx_data == 0) {
sopuranoaruto 3:4d2a0e4bb4d9 96 stop = 0;
sopuranoaruto 3:4d2a0e4bb4d9 97 } else {
sopuranoaruto 1:677d12692be0 98 stop = 1;
sopuranoaruto 1:677d12692be0 99 for(i=0; i<npx.numPixels(); i++) {
sopuranoaruto 1:677d12692be0 100 npx.setPixelColor(i,0x000000);
sopuranoaruto 1:677d12692be0 101 }
sopuranoaruto 1:677d12692be0 102 }
sopuranoaruto 3:4d2a0e4bb4d9 103 return true;
sopuranoaruto 1:677d12692be0 104 }
sopuranoaruto 0:12a2f5f9ab60 105
sopuranoaruto 4:925391180349 106 //エリアチェンジ 52
sopuranoaruto 4:925391180349 107 bool get_areachange(int rx_data,int &tx_data)
sopuranoaruto 4:925391180349 108 {
sopuranoaruto 4:925391180349 109 if(rx_data == 0) {
sopuranoaruto 4:925391180349 110 if(areamode == 1) {
sopuranoaruto 4:925391180349 111 areamode = 0;
sopuranoaruto 4:925391180349 112 }
sopuranoaruto 4:925391180349 113 } else {
sopuranoaruto 4:925391180349 114 if(areamode == 0) {
sopuranoaruto 4:925391180349 115 areamode = 1;
sopuranoaruto 4:925391180349 116 }
sopuranoaruto 4:925391180349 117 }
sopuranoaruto 4:925391180349 118 return true;
sopuranoaruto 4:925391180349 119 }
sopuranoaruto 4:925391180349 120
sopuranoaruto 1:677d12692be0 121 int main()
sopuranoaruto 1:677d12692be0 122 {
sopuranoaruto 4:925391180349 123 //農作物回収
sopuranoaruto 4:925391180349 124 slave.addCMD(1,play1);
sopuranoaruto 4:925391180349 125 //農作物設置
sopuranoaruto 4:925391180349 126 slave.addCMD(2,play2);
sopuranoaruto 4:925391180349 127 //ビーンバック回収
sopuranoaruto 4:925391180349 128 slave.addCMD(3,play3);
sopuranoaruto 4:925391180349 129 //自動運転モードに移行
sopuranoaruto 4:925391180349 130 slave.addCMD(4,play4);
sopuranoaruto 4:925391180349 131 //ビーンバック発射
sopuranoaruto 4:925391180349 132 slave.addCMD(5,play5);
sopuranoaruto 4:925391180349 133 //スタート
sopuranoaruto 5:200723c2d111 134 slave.addCMD(6,get_start);
sopuranoaruto 2:9adbf7e03f35 135 //モード変更
sopuranoaruto 1:677d12692be0 136 slave.addCMD(50,get_changemode);
sopuranoaruto 2:9adbf7e03f35 137 //非常停止
sopuranoaruto 1:677d12692be0 138 slave.addCMD(51,get_stop);
sopuranoaruto 4:925391180349 139 //エリア変更
sopuranoaruto 4:925391180349 140 slave.addCMD(52,get_areachange);
sopuranoaruto 2:9adbf7e03f35 141 //光の強さ
sopuranoaruto 1:677d12692be0 142 npx.global_scale = 0.05f;
sopuranoaruto 2:9adbf7e03f35 143 //信号来ていないときは光らない
sopuranoaruto 0:12a2f5f9ab60 144 npx.normalize = false;
sopuranoaruto 4:925391180349 145 //音量セット
sopuranoaruto 4:925391180349 146 mp3.set_volume(255);
sopuranoaruto 4:925391180349 147 //クワイエットモードOFF
sopuranoaruto 4:925391180349 148 mp3.quiet_mode(false);
sopuranoaruto 4:925391180349 149
sopuranoaruto 1:677d12692be0 150 while(1) {
sopuranoaruto 2:9adbf7e03f35 151 //非常停止解除
sopuranoaruto 1:677d12692be0 152 if(stop == 0) {
sopuranoaruto 4:925391180349 153 if(start == 0) {
sopuranoaruto 4:925391180349 154 //フィールド赤
sopuranoaruto 4:925391180349 155 if(areamode == 0) {
sopuranoaruto 4:925391180349 156 for(i = 0; i < npx.numPixels(); i++) {
sopuranoaruto 4:925391180349 157 npx.setPixelColor(i,0xFF0000);
sopuranoaruto 4:925391180349 158 npx.show();
sopuranoaruto 4:925391180349 159 wait(0.05);
sopuranoaruto 1:677d12692be0 160 }
sopuranoaruto 4:925391180349 161 pc.printf("red area\n");
sopuranoaruto 4:925391180349 162 //フィールド青
sopuranoaruto 4:925391180349 163 } else if(areamode == 1) {
sopuranoaruto 4:925391180349 164 for(i = 0; i < npx.numPixels(); i++) {
sopuranoaruto 4:925391180349 165 npx.setPixelColor(i,0x0000FF);
sopuranoaruto 4:925391180349 166 npx.show();
sopuranoaruto 4:925391180349 167 wait(0.05);
sopuranoaruto 4:925391180349 168 }
sopuranoaruto 4:925391180349 169 pc.printf("bule area\n");
sopuranoaruto 1:677d12692be0 170 }
sopuranoaruto 4:925391180349 171 } else {
sopuranoaruto 4:925391180349 172 //手動モード 黄色
sopuranoaruto 4:925391180349 173 if(colormode == 0) {
sopuranoaruto 4:925391180349 174 for(i = 0; i < npx.numPixels(); i++) {
sopuranoaruto 4:925391180349 175 npx.setPixelColor(i,0xFFF100);
sopuranoaruto 4:925391180349 176 npx.show();
sopuranoaruto 4:925391180349 177 wait(0.05);
sopuranoaruto 4:925391180349 178 if(i == npx.numPixels()) {
sopuranoaruto 4:925391180349 179 i = 0;
sopuranoaruto 4:925391180349 180 }
sopuranoaruto 4:925391180349 181 }
sopuranoaruto 4:925391180349 182 pc.printf("control\n");
sopuranoaruto 4:925391180349 183 //自動モード 緑
sopuranoaruto 4:925391180349 184 } else if(colormode == 1) {
sopuranoaruto 4:925391180349 185 for(i = 0; i < npx.numPixels(); i++) {
sopuranoaruto 4:925391180349 186 npx.setPixelColor(i,0x00FF00);
sopuranoaruto 4:925391180349 187 npx.show();
sopuranoaruto 4:925391180349 188 wait(0.05);
sopuranoaruto 4:925391180349 189 if(i == npx.numPixels()) {
sopuranoaruto 4:925391180349 190 i = 0;
sopuranoaruto 4:925391180349 191 }
sopuranoaruto 4:925391180349 192 }
sopuranoaruto 1:677d12692be0 193 pc.printf("auto\n");
sopuranoaruto 1:677d12692be0 194 }
sopuranoaruto 1:677d12692be0 195 }
sopuranoaruto 3:4d2a0e4bb4d9 196 //非常停止
sopuranoaruto 1:677d12692be0 197 } else if(stop == 1) {
sopuranoaruto 1:677d12692be0 198 for(i = 0; i < npx.numPixels(); i++) {
sopuranoaruto 1:677d12692be0 199 npx.setPixelColor(i,0x000000);
sopuranoaruto 1:677d12692be0 200 npx.show();
sopuranoaruto 1:677d12692be0 201 wait(0.05);
sopuranoaruto 1:677d12692be0 202 if(i == npx.numPixels()) {
sopuranoaruto 1:677d12692be0 203 i = 0;
sopuranoaruto 1:677d12692be0 204 }
sopuranoaruto 0:12a2f5f9ab60 205 }
sopuranoaruto 4:925391180349 206 pc.printf("stopping\n");
sopuranoaruto 0:12a2f5f9ab60 207 }
sopuranoaruto 0:12a2f5f9ab60 208 }
sopuranoaruto 0:12a2f5f9ab60 209 }