タッチパネル+ラズベリーパイを組み合わせ写真のようなバイクのメーターを作りたいと勉強しています。
①メーターモード・セッティングモード・ナビゲーションモードなど切り替えれるように作りたいのですが、
今はProcessingで再現しようと勉強を始めたところなのですが、もっと適したプログラミング言語やアドイン・ツールなどは有りますでしょうか?
②タコメーターの曲がりながら幅が太くなり、その後まっすぐ、これはどうやっているのでしょうか。
まっすぐの部分は棒グラフと同じなので解りますが、最初のRを描きながら幅も太くするのはどうやってやっているのが検討も付きません。
③時計の7セグLED風の表示や、フォントに無い変わった数字を使いたい場合は0~9の画像データを切り替えて表現するのでしょうか。
④他にアドバイスが有ればよろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
考えることは一緒だなぁ...
とりあえず②をやってみたので、おくればせながら。
外側(?)が正円なのはそのほうが「針」がらしく描けるかなぁ、ということで。
Processing
1float needleWidth=0.03;//"針"の太さ 2float lvl=0;//指示値 3float lvlMax=15;//最大スケール 4float r1=260;//カーブ部分の外径 5float l1=250;//直線部分の長さ 6float hoffset=30;//全体の水平位置 7float voffset=50;//全体の垂直位置 8float ratio1=0.7;//直線部分の太さ(細さ) 9float ratio2=0.9;//0の太さ(細さ) 10 11void setup() { 12 size(640, 360); 13 ellipseMode(RADIUS); 14} 15 16void fillGage(float lv, color col) { 17 if (lv<HALF_PI) { 18 fill(col); 19 arc(hoffset+r1, voffset, r1, r1, PI-lv, PI); 20 } else { 21 fill(col); 22 arc(hoffset+r1, voffset, r1, r1, HALF_PI, PI); 23 rect(hoffset+r1, voffset+r1*0.7, (lv-HALF_PI)*r1, r1*0.3); 24 } 25} 26 27float d=0.05; 28void draw() { 29 lvl+=d; 30 if (lvl>lvlMax) { 31 d=-d; 32 lvl=lvlMax; 33 } 34 if(lvl<0){ 35 d=-d; 36 lvl=0; 37 } 38 39 background(0xcc); 40 translate(0, height); 41 scale(1, -1); 42 noStroke(); 43 fill(255); 44 arc(hoffset+r1, voffset, r1, r1, HALF_PI, PI); 45 rect(hoffset+r1, voffset+r1*ratio1, l1, r1*(1-ratio1)); 46 float meterMax=HALF_PI+l1/r1-needleWidth; 47 float needleBtm=map(lvl, 0, lvlMax, 0, meterMax); 48 float needleTop=needleBtm+needleWidth; 49 fillGage(needleTop,color(255,0,0)); 50 fillGage(needleBtm,color(0)); 51 //中心部を隠す 52 fill(0xcc); 53 ellipse(hoffset+r1, voffset, r1*ratio2, r1*ratio1); 54}
投稿2022/02/25 15:08
総合スコア7639
0
ベストアンサー
①メーターモード・セッティングモード・ナビゲーションモードなど切り替えれるように作りたいのですが、
今はProcessingで再現しようと勉強を始めたところなのですが、もっと適したプログラミング言語やアドイン・ツールなどは有りますでしょうか?
マイコン系は全然わからないのですが、GUIは何でやっても大変なので情報の多いものでやるのがいいと思います(何がメジャーなのかは知りません^^;
②タコメーターの曲がりながら幅が太くなり、その後まっすぐ、これはどうやっているのでしょうか。
まっすぐの部分は棒グラフと同じなので解りますが、最初のRを描きながら幅も太くするのはどうやってやっているのが検討も付きません。
円弧(扇形)を描く関数があります。
arc() / Reference / Processing.org
うまく大きさを変えて2つ描けばいけそうです。
③時計の7セグLED風の表示や、フォントに無い変わった数字を使いたい場合は0~9の画像データを切り替えて表現するのでしょうか。
7セグ風なんかは探せばそういうフォントがいっぱいありそうですけど?
もちろん画像でもいいでしょうし、SVG
のようなベクターデータも扱えます。
Load and Display a Shape Illustration / Examples / Processing.org
④他にアドバイスが有ればよろしくお願いいたします。
Processingはボタンすら組み込みのものはありません(ControlP5やG4Pといったライブラリを使えば簡単に作れますが、見た目のカスタマイズ性はあまり高くありません)
しかし逆に言えば全部自前描画なら、いくらでも見た目にこだわれるとも言えます。
このアプリがあくまで実用重視(実際に使えることのほうが重要)なら、見た目はとりあえず置いておいてControlP5等でざっと作ってみるのをお勧めします。
あるいはProcessing以外の選択肢のほうが、向いているかもしれません。
このアプリが見た目重視(完コピすることに意味がある)なら、Processingもありって気はします。
機能が増えるにしたがってスパゲッティ化しないようにするスキル(テクニック?)は必要でしょうが^^;
マウス左右でメーターが振れます。
構造が分かりやすいように色を付けました。
Processing
1void setup() { 2 size(400, 300); 3} 4 5void draw() { 6 background(255); 7 8 // arcで使いやすいようにPIベースに値を変換(最大値に特に意味はない。TWO_PIだと長すぎた) 9 float v = map(mouseX, 0, width, 0, PI + QUARTER_PI); 10 11 //fill(0); 12 fill(#ff0000); 13 arc(120, 200, 220, 300, PI, min(PI + v, PI + HALF_PI)); // 扇形メーター部分 14 15 //fill(255); 16 fill(#00ff00); 17 arc(120, 200, 200, 200, PI, PI + HALF_PI); // 一回り小さい1/4扇形で下側を隠す 18 19 line(120, 100, 380, 100); 20 21 if (HALF_PI < v) { 22 //fill(0); 23 fill(#0000ff); 24 rect(120, 50, (v - HALF_PI) * 100, 50); // 直線部分 25 } 26}
投稿2022/02/25 13:32
編集2023/07/30 04:54総合スコア9321
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/27 14:19 編集
2022/03/03 14:00
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/27 11:15
2022/02/27 22:31
2022/03/03 13:58