twitterでフォローしてくださってる方はご存じと思いますが、イデオン実はもう少し進んでますw
ネオピクセルのテープを出してきて何をしたかというと・・・
イデオンソード作ってみましたww
実はこの時点ではイデオンほとんど見たことないので妄想イデオンソードですwwww
プログラムはエルガイムMKⅡのバスターランチャー用のものを少し改変しましたw
出来合いのもので作ったので、唯一苦労したのがイデオンソード用のパーツの内面を削る事www
それと、コレ動画ではいい感じに見えているのですが、実際は
てな感じで結構ツブツブが見えるんですよね^^;
どうしようか悩み中ww
ちなみに手首の発光も可能にしています^^
このイデオンソードはイデオンガンにも使えそうですね。
それと、前回全体の構想を考えたのでそれを一部試してみます。
イデゲージとの連携ですね。
ちなみにイデゲージ製作方法はこちらで紹介しています^^
「イデオン ゲージ 製作方法」
この記事の一番最後に今回のゲージのプログラム載せておきますね^^
うんw上手くいきそうです^^
動作をちょっと説明すると、
①台座のスイッチが押されるとイデオンゲージが発動
②ゲージが点灯すると、Bluetoothで機体のESP32にコマンドを送信
③受信したコマンドの種類に応じて機体のESP32が目の走査線やLEDを制御
ちなみに目の部分はNeoPixel入れているのでプログラムの変更で青にすることもできますw
もちろん走査線も色々なパターンで発光させることもできます。
後々の事を考えると容易にプログラム変更できるように端子を付けておくことが必要そうですね^^
どうにかめどが立ちましたので、胴体部分にマイコンを仕込みました。
仕込むのはこの赤枠のESP32‐PICOとATTiny85x2です。
とりあえず削れるだけ削ってw
背中にはプログラム書き換え用の端子(電源線接続部、支柱接続部も兼用)を付けます。
マイコン3個のそれぞれの専用端子を設置しました。
この部分はランドセルで隠れるようにします
この胸部分は目のOLED用の基板も入ってくるので、
それを避けるようにATTiny85胸前方に基板に付けて取り付けます。
そして、ESP32はおなか部分に
ほんとギリギリwww
胸とお腹はボールジョイントを左右に付けて多少可動出来るようにして接続します。
可動時に干渉する部分を削っているとちょっと削りすぎてお腹が短くなってしまいましたwwwwパーツ請求中ですwww
ちなみにプラパーツ加工したり配線はんだ付けしたり、プログラムの書き込みテストしてりで色々な種類の作業をするのでこんな状態で作ってますwww
実際使えてるスペースは手前の15cm四方程度www
後は各部のLEDの仕込みと組み立てを行っていきますが・・・・・・・・・・・・・
このキットかっこいいんですけど、いかんせんアレンジが強くて設定と形態が大きく違うところが・・・・やっぱ気になりますよね~。
//—————————————————————————————————————
ゲージのプログラムですが、表示に必要ない部分は削除しています。
ちなみにこのような表示をします。
今回もLovyanGFXのライブラリーを使わせていただいています。
ゲージを今まで作ったことがない方は、まずこちらを参照してください。
「イデオン ゲージ 製作方法」
既にゲージ作成されている方はプログラムの書き換えのみで可動します。
スイッチはタクトスイッチで一端を12番ピンに、もう一端はGNDに接続してください。
すべてをフォローできないので、イデゲージを実際製作される程度のスキルの有る方のみtwitterで質問などが有れば受け付けます。(ブログ右上に私のTwitterリンクがあります。フォローはしなくて大丈夫です^^)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 |
#define LGFX_USE_V1 #include <LovyanGFX.hpp> #define lcd display #define SW 12 class LGFX : public lgfx::LGFX_Device { lgfx::Panel_GC9A01 _panel_instance; lgfx::Bus_SPI _bus_instance; // SPIバスのインスタンス lgfx::Light_PWM _light_instance; public: // コンストラクタを作成し、ここで各種設定を行います。 // クラス名を変更した場合はコンストラクタも同じ名前を指定してください。 LGFX(void) { { // バス制御の設定を行います。 auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。 // SPIバスの設定 cfg.spi_host = VSPI_HOST; // 使用するSPIを選択 (VSPI_HOST or HSPI_HOST) cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3) cfg.freq_write = 40000000; // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます) cfg.freq_read = 16000000; // 受信時のSPIクロック cfg.spi_3wire = true; // 受信をMOSIピンで行う場合はtrueを設定 cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定 cfg.dma_channel = 1; // Set the DMA channel (1 or 2. 0=disable) 使用するDMAチャンネルを設定 (0=DMA不使用) cfg.pin_sclk = 18; // SPIのSCLKピン番号を設定 cfg.pin_mosi = 23; // SPIのMOSIピン番号を設定 cfg.pin_miso = 19; // SPIのMISOピン番号を設定 (-1 = disable) cfg.pin_dc = 27; // SPIのD/Cピン番号を設定 (-1 = disable) // SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。 //*/ _bus_instance.config(cfg); // 設定値をバスに反映します。 _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。 } { // 表示パネル制御の設定を行います。 auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。 cfg.pin_cs = 14; // CSが接続されているピン番号 (-1 = disable) cfg.pin_rst = 33; // RSTが接続されているピン番号 (-1 = disable) cfg.pin_busy = -1; // BUSYが接続されているピン番号 (-1 = disable) // ※ 以下の設定値はパネル毎に一般的な初期値が設定されていますので、不明な項目はコメントアウトして試してみてください。 cfg.memory_width = 240; // ドライバICがサポートしている最大の幅 cfg.memory_height = 240; // ドライバICがサポートしている最大の高さ cfg.panel_width = 240; // 実際に表示可能な幅 cfg.panel_height = 240; // 実際に表示可能な高さ cfg.offset_x = 0; // パネルのX方向オフセット量 cfg.offset_y = 0; // パネルのY方向オフセット量 cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転) cfg.dummy_read_pixel = 8; // ピクセル読出し前のダミーリードのビット数 cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数 cfg.readable = false; // データ読出しが可能な場合 trueに設定 cfg.invert = true; // パネルの明暗が反転してしまう場合 trueに設定 cfg.rgb_order = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定 cfg.dlen_16bit = false; // データ長を16bit単位で送信するパネルの場合 trueに設定 cfg.bus_shared = true; // SDカードとバスを共有している場合 trueに設定(drawJpgFile等でバス制御を行います) _panel_instance.config(cfg); } { // バックライト制御の設定を行います。(必要なければ削除) auto cfg = _light_instance.config(); // バックライト設定用の構造体を取得します。 cfg.pin_bl = 32; // バックライトが接続されているピン番号 cfg.invert = false; // バックライトの輝度を反転させる場合 true cfg.freq = 44100; // バックライトのPWM周波数 cfg.pwm_channel = 7; // 使用するPWMのチャンネル番号 _light_instance.config(cfg); _panel_instance.setLight(&_light_instance); // バックライトをパネルにセットします。 } //*/ setPanel(&_panel_instance); // 使用するパネルをセットします。 } }; // 準備したクラスのインスタンスを作成します。 LGFX display; static LGFX_Sprite sprite(&lcd); int k,IDE_number=0; void IDE_HATUDOU(){ lcd.fillCircle(120,120,120,TFT_BLACK); delay(300); for(int i=0;i<=10;i++){ lcd.fillCircle(120,120,i*12,lcd.color888(0,100,0)); //delay(1); } delay(50); lcd.fillCircle(120,120,120,TFT_BLACK); delay(30); lcd.fillCircle(120,120,120,lcd.color888(0,100,0)); delay(500); //円の描画 for(int i=1;i<=360;i++){ lcd.fillArc(120,120,120,117,270,270+i,TFT_WHITE); k++; if(k<=5){lcd.fillRect(119,119,3,3,TFT_WHITE);} if(k>5 && k<=10){ lcd.fillRect(119,119,3,3,lcd.color888(0,100,0));} if(k==10){k=0;} delay(2); } //縦の直線描画 for(int i=0;i<=218;i++){ lcd.fillRect(119,120-120*i/218,3,240*i/218,TFT_WHITE); lcd.fillRect(169,11,3,i,TFT_WHITE); lcd.fillRect(69,11,3,i,TFT_WHITE); delay(2); } //斜めの線描画 delay(100); lcd.drawLine(69, 11, 169, 229, TFT_WHITE); lcd.drawLine(70, 11, 170, 229, TFT_WHITE); lcd.drawLine(71, 11, 171, 229, TFT_WHITE); lcd.drawLine(69, 229, 119, 120, TFT_WHITE); lcd.drawLine(70, 229, 120, 120, TFT_WHITE); lcd.drawLine(71, 229, 121, 120, TFT_WHITE); lcd.drawLine(69, 228, 169, 228, TFT_WHITE); lcd.drawLine(70, 229, 169, 229, TFT_WHITE); lcd.drawLine(71, 230, 169, 230, TFT_WHITE); //---------------待機---------------------------------- delay(2000); for(int i=0;i<=10;i++){//------------------明るく lcd.fillScreen(lcd.color888(0,105+i*15,0)); lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); lcd.fillRect(119,0,3,240,TFT_WHITE); lcd.fillRect(169,11,3,218,TFT_WHITE); lcd.fillRect(69,11,3,218,TFT_WHITE); lcd.drawLine(69, 11, 169, 229, TFT_WHITE); lcd.drawLine(70, 11, 170, 229, TFT_WHITE); lcd.drawLine(71, 11, 171, 229, TFT_WHITE); lcd.drawLine(69, 229, 119, 120, TFT_WHITE); lcd.drawLine(70, 229, 120, 120, TFT_WHITE); lcd.drawLine(71, 229, 121, 120, TFT_WHITE); lcd.drawLine(69, 228, 169, 228, TFT_WHITE); lcd.drawLine(70, 229, 169, 229, TFT_WHITE); lcd.drawLine(71, 230, 169, 230, TFT_WHITE); delay(1); } for(int i=0;i<=10;i++){//------------------白く lcd.fillScreen(lcd.color888(i*25+5,255,i*25+5)); lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); lcd.fillRect(119,0,3,240,TFT_WHITE); lcd.fillRect(169,11,3,218,TFT_WHITE); lcd.fillRect(69,11,3,218,TFT_WHITE); lcd.drawLine(69, 11, 169, 229, TFT_WHITE); lcd.drawLine(70, 11, 170, 229, TFT_WHITE); lcd.drawLine(71, 11, 171, 229, TFT_WHITE); lcd.drawLine(69, 229, 119, 120, TFT_WHITE); lcd.drawLine(70, 229, 120, 120, TFT_WHITE); lcd.drawLine(71, 229, 121, 120, TFT_WHITE); lcd.drawLine(69, 228, 169, 228, TFT_WHITE); lcd.drawLine(70, 229, 169, 229, TFT_WHITE); lcd.drawLine(71, 230, 169, 230, TFT_WHITE); delay(1); } delay(3000); // */ for(int i=0;i<=10;i++){//----------------ゲージ再度見えてくる lcd.fillScreen(lcd.color888(250-i*25,255,250-i*25)); lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); lcd.fillRect(119,0,3,240,TFT_WHITE); lcd.fillRect(169,11,3,218,TFT_WHITE); lcd.fillRect(69,11,3,218,TFT_WHITE); lcd.drawLine(69, 11, 169, 229, TFT_WHITE); lcd.drawLine(70, 11, 170, 229, TFT_WHITE); lcd.drawLine(71, 11, 171, 229, TFT_WHITE); lcd.drawLine(69, 229, 119, 120, TFT_WHITE); lcd.drawLine(70, 229, 120, 120, TFT_WHITE); lcd.drawLine(71, 229, 121, 120, TFT_WHITE); lcd.drawLine(69, 228, 169, 228, TFT_WHITE); lcd.drawLine(70, 229, 169, 229, TFT_WHITE); lcd.drawLine(71, 230, 169, 230, TFT_WHITE); delay(150); } for(int i=0;i<=50;i++){//------------------------点滅維持 lcd.fillScreen(lcd.color888(0,255,0)); lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); lcd.fillRect(119,0,3,240,TFT_WHITE); lcd.fillRect(169,11,3,218,TFT_WHITE); lcd.fillRect(69,11,3,218,TFT_WHITE); lcd.drawLine(69, 11, 169, 229, TFT_WHITE); lcd.drawLine(70, 11, 170, 229, TFT_WHITE); lcd.drawLine(71, 11, 171, 229, TFT_WHITE); lcd.drawLine(69, 229, 119, 120, TFT_WHITE); lcd.drawLine(70, 229, 120, 120, TFT_WHITE); lcd.drawLine(71, 229, 121, 120, TFT_WHITE); lcd.drawLine(69, 228, 169, 228, TFT_WHITE); lcd.drawLine(70, 229, 169, 229, TFT_WHITE); lcd.drawLine(71, 230, 169, 230, TFT_WHITE); delay(100); } //------------------------------------------------------------ for(int i=0;i<=30;i++){//------------------------点滅暗くなる lcd.fillScreen(lcd.color888(0,255-i*5,0)); lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); lcd.fillRect(119,0,3,240,TFT_WHITE); lcd.fillRect(169,11,3,218,TFT_WHITE); lcd.fillRect(69,11,3,218,TFT_WHITE); lcd.drawLine(69, 11, 169, 229, TFT_WHITE); lcd.drawLine(70, 11, 170, 229, TFT_WHITE); lcd.drawLine(71, 11, 171, 229, TFT_WHITE); lcd.drawLine(69, 229, 119, 120, TFT_WHITE); lcd.drawLine(70, 229, 120, 120, TFT_WHITE); lcd.drawLine(71, 229, 121, 120, TFT_WHITE); lcd.drawLine(69, 228, 169, 228, TFT_WHITE); lcd.drawLine(70, 229, 169, 229, TFT_WHITE); lcd.drawLine(71, 230, 169, 230, TFT_WHITE); delay(20); } for(int i=0;i<=95;i++){//------------------------下のライン消えていく lcd.drawLine(168-i, 228, 168, 228,lcd.color888(0,105,0)); lcd.drawLine(168-i, 229, 168, 229, lcd.color888(0,105,0)); lcd.drawLine(168-i, 230, 168, 230, lcd.color888(0,105,0)); lcd.fillRect(119,0,3,240,TFT_WHITE); lcd.fillRect(169,11,3,218,TFT_WHITE); lcd.fillRect(69,11,3,218,TFT_WHITE); //lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); delay(10); } for(int i=0;i<=25;i++){//--------------------------斜めのライン消えていく lcd.fillRect(72,0,i*47/25,240,lcd.color888(0,105,0)); lcd.fillRect(169-47*i/25,0,i*46/25,240,lcd.color888(0,105,0)); lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); delay(20); } for(int i=0;i<=120;i++){ //-------------------------両脇の縦消えていく lcd.fillRect(169,240-i*2,3,i,lcd.color888(0,105,0)); lcd.fillRect(69,240-i*2,3,i,lcd.color888(0,105,0)); lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); delay(2); } for(int i=0;i<=109;i++){ //-------------------------中央縦消えていく lcd.fillRect(119,0,3,120*i/109,lcd.color888(0,105,0)); lcd.fillRect(119,240-120*i/109,3,120*i/218,lcd.color888(0,105,0)); lcd.fillArc(120,120,120,117,270,630,TFT_WHITE); delay(2); } IDE_number=0; lcd.fillScreen(TFT_BLACK); lcd.setBrightness(255); } void TENMETU(){ lcd.drawLine(120, 115, 120, 125, lcd.color888(0,200,0)); lcd.drawLine(116, 120, 124, 120, lcd.color888(0,200,0)); lcd.drawLine(117, 117, 123, 123, lcd.color888(0,200,0)); lcd.drawLine(117, 123, 123, 117, lcd.color888(0,200,0)); delay(40); lcd.fillCircle(120,120,120,TFT_BLACK); delay(40); } //=================================================================== void setup(void){ display.init(); lcd.setBrightness(255); lcd.fillScreen(TFT_BLACK); delay(3000); pinMode(SW,INPUT_PULLUP); } //================================================================== void loop(void){ if(digitalRead(SW)==0){IDE_number=1;} if(IDE_number==0){TENMETU();} if(IDE_number==1){IDE_HATUDOU();} } |
関連すると思われる記事:
- None Found
(*´д`*)すばらしいですねえ〜〜〜〜!!!LCDも高輝度LEDみたいにまばゆいほどに光らせられるとは知りませんでした!
丸い方、師匠なら74ヤマトに登場したレーダースクリーンみたいなのもできそうですね♪ そや、魔法陣とかもイケますな⋯ああプログラミングができる方がうらやましい!!
よろづ屋TOMさん おはようございます!
あっ、LCDはね、少し部屋を暗くして撮影してあるからまばゆく光っているように見えていますが実際にはそこまで光りませんよ^^;
白くなって少し明るくなったかな程度です。
LCDなので画像とかももちろん表示できますので色々と使い道は有りそうですよ^^
お~!! イデオンソードもカッコいいですね!
エネルギーを充電して、一気にバーンとはじける感じがとてもいいです。
LEDのつぶつぶ感がちょっと残念ですが、何か良い手がありそうですね。
何と言っても6jiroさんは工作が速いですね!!
Vividさん こんばんは!
実はこのイデオンソードとかは去年末くらいには完成していて、twitterではアップしていたのですが、ブログにはようやくお披露目なのですw
最近はブログ書くのが面倒でw^^;
ツブツブ感はなかなかの難問なんですよね~光量落ちるの覚悟なら色々と手はあるとは思うのですが、ただ今考え中ですw
こんにちは。久しぶりに覗いてみました。
自分ほどじゃないけど更新ペースが落ちてるようでちょっとホッとしたりしなかったりw
センセーはSNSで常にバズるからそっちも忙しいもんね(^^;
いつも思うけど、難しいことをサラッとこなすよね。無線でコマンドやり取りなんかはすでに離れ業ではなく基本技になってるし。さすがでございます!
なおさん こんちは~!
忘れ去られたブログへようこそwww
ホント最近更新しなくなっちゃったよ^^;
今考えるとブログ更新てホント大変だねw
無線はねESP32使うとホント誰でも簡単にできちゃうの^^
これで配線減らせるなら使わない手はないからねww