忍者ブログ

あやの

NゲージをベースとしたDCCについての日記を 書いています。 ある程度貯まりましたら、鉄道模型のDCCのまとめサイトに まとめています。 DCC館 http://1st.geocities.jp/dcc_digital/ DCC2号館 http://dcc.client.jp/

2017/05    04«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  »06

ホビセンでお披露目しようと頑張っていますが、
RAMが144バイトしか残っておらず、ちょっと機能を足すと、下写真の様に画面にノイズが
入ってしまいます。
U8g2libがSRAMをビデオメモリとして確保しているエリアにスタックポインタとか変数が
侵食しているんでしょうねぇ(想像)




対策は、テキスト類をSRAMに展開されない様に、
PROGMEMを使って定義する必要があるのですが、読みにくいプログラムが
出来上がるんですよね。

const char MenuMes1[] PROGMEM = "------- MENU -------";

ストレスだわ〜。SRAMもうちょっと欲しいw

拍手[1回]

PR
さて、実際のDCC速度計に針の描画を修正したものを組み込んでみました。

微々たるもんですが、針が太くなりました(^^;




spdの値から、針の角度を算出して、u8glibのdrawTriangle関数(三角形を描く関数)を
使って描画させています。

    x1=cos(3.14159*(151+spd)/180);
    y1=sin(3.14159*(151+spd)/180);

    x2=cos((3.14159*(151+spd)+angle)/180);
    y2=sin((3.14159*(151+spd)+angle)/180);

    x3=cos((3.14159*(151+spd)-angle)/180);
    y3=sin((3.14159*(151+spd)-angle)/180); 
    u8g2.drawTriangle((x1*28)+sx, (y1*28)+sy,x2*5+sx,y2*5+sy,x3*5+sx,y3*5+sy);

解像度がもうちょっと欲しいですねー。

拍手[1回]

おととい、広角度計器速度計のデモをお見せしましたが、針がイマイチでした。
検証してみました。
言語はExcel VBAを使いました。

■その1
以下のような、プログラムで作りましたが、線1本なので味気がありません。

Sub test()

    ActiveSheet.DrawingObjects.Delete

    Pi = 3.14

    ox = 100

    oy = 100

    For i = 0 To 360 Step 45

        x = Cos(i * Pi / 180)

        y = Sin(i * Pi / 180)

        ActiveSheet.Shapes.AddLine x * 100 + ox, y * 100 + oy, x * 10 + ox, y * 10 + oy

    Next i

End Sub




■その2
針を太らせるために以下のような、プログラムで作りましたが、角度によって開きが異なります。
※現在のDCC速度計のアルゴリズムと同等

Sub test2()

    ActiveSheet.DrawingObjects.Delete

    Pi = 3.14

    ox = 100

    oy = 100

    For i = 0 To 360 Step 45

        x = Cos(i * Pi / 180)

        y = Sin(i * Pi / 180)

        ActiveSheet.Shapes.AddLine x * 100 + ox, y * 100 + oy, x * 10 + ox + 5, y * 10 + oy + 5

        ActiveSheet.Shapes.AddLine x * 100 + ox, y * 100 + oy, x * 10 + ox - 5, y * 10 + oy - 5

    Next i

End Sub





■その3先っぽもSin,Cosを使う必要があるんだねということで。
良い感じになりました。

Sub test3()

    ActiveSheet.DrawingObjects.Delete

    Pi = 3.14

    ox = 100

    oy = 100

    Angle = 60

    For i = 0 To 360 Step 45

        x1 = Cos(i * Pi / 180)

        y1 = Sin(i * Pi / 180)

        x2 = Cos((i * Pi + Angle) / 180)

        y2 = Sin((i * Pi + Angle) / 180)

        x3 = Cos((i * Pi - Angle) / 180)

        y3 = Sin((i * Pi - Angle) / 180)

        ActiveSheet.Shapes.AddLine 100 * x1 + ox, 100 * y1 + oy, 10 * x2 + ox, 10 * y2 + oy

        ActiveSheet.Shapes.AddLine 100 * x1 + ox, 100 * y1 + oy, 10 * x3 + ox, 10 * y3 + oy

    Next i

End Sub






■原理はこんな感じで、(x1,y1)を起点として、(x2,y2), (x3,y3)の座標を演算して表示させています。



拍手[0回]

ずっと、SmileFunctionDecoderLightに掛かりっきりでしたが、久しぶりに
DCC速度計のスケッチをいじりました。
デジタルより、アナログ表示のほうが見やすいかなと思い画面を作ってみました。


久しぶりに、三角関数触りましたw

拍手[0回]

Arduino IDEからの書き込みもできたし、液晶への表示もできました。
液晶のライブラリはu8glibを使っているのですが、いろいろ面倒くさそう。


今回液晶は、ST7920タイプの12864を使用していまして、ATmega328との
接続はSPIを使っていますので、基板と液晶との配線は7本で済みました。


メニュー


速度計

拍手[2回]

ブログ内検索

プロフィール

HN:
あやのすけ
性別:
非公開
| HOME Next >>
Copyright ©  -- あやの --  All Rights Reserved
Design by CriCri / Material by もずねこ / powered by NINJA TOOLS / 忍者ブログ / [PR]