nokia 5110 dht22 arduino 接続スケッチを表示します。

27.04.2019 サウンドデバイス

フィリップス PCD8544。
モジュールを他のデバイスに接続するために、ボードにはコネクタ プラグとワイヤをはんだ付けするための穴が含まれています。 4つもあります 取り付け穴、ボードの隅にあります。
Nokia 5110 LCD の単色ディスプレイ (ブルー スクリーン) は青色 LED でバックライト付きです。 Nokia 5110 は長年にわたり生産され、現在も使用されています。 広い範囲アプリケーション。 ディスプレイモジュールで簡単に ノキア接続そして装置への取り付け。 このモジュールのおかげで、エレクトロニクス エンジニアやプログラマーは、Nokia 5110 LCD ディスプレイに初めて慣れることが簡単になります。 元々はインジケーターとして使用されていました 携帯電話この表示は他の機器カテゴリーにも広がりました。 で使うと便利です 計測器:電圧計、電流計、抵抗計など。 このディスプレイは、医療モバイル機器からの測定値を表示するのにも役立ちます。 ラジオ受信機のスケールや音響再生機器の信号レベルインジケーターなどに使用すると面白いです。 解像度 84x48 ピクセルの画面では、シンボルや グラフィック情報.
Nokia 3310 LCD の経験がある場合は、これらのインジケーターが同じ PCD8544 コントローラー上に構築されているため、Nokia 5110 LCD を簡単にマスターできるでしょう。

Nokia 5110 LCD モジュールの仕様

栄養
電圧 2.7 ~ 3.3 V
現在
バックライトオフ 5mA
バックライトオン 20 mA

動作中の気温 0 ~ 50
保管温度 -10 ~ 70

LCD インジケータ Nokia 5110

主な特徴

Nokia 5110 LCD モジュールの主なコンポーネントは LCD インジケータです。 電源電圧とLCD素子のバイアスのジェネレーターが内蔵されており、 LEDライト。 SPI情報入力インターフェース。 Nokia 5110 は、通常、画像反転、ブランク画面、および「オール ドット オン」の 4 つのモードで動作できます。 ユーザーは温度、供給電圧、バイアスを制御することもできます。

栄養
電圧 2.7 ~ 3.3 V
最大電流320μA
クロック周波数最大4MHz
リセット時間は少なくとも100ns

表示構造

ディスプレイは、LCD 要素のマトリックスと、それらを制御するための PCD8544 マイクロ回路であり、ボードに取り付けられたハウジング内にあります。 また、4 つの画面バックライト LED も搭載されています。 表示ポイントのステータスに関する情報は、 ランダム・アクセス・メモリコントローラ PCD8544 では、各ポイントがメモリの 1 ビットに対応します。 アドレス カウンタも内蔵されており、次のバイトの情報がメモリに書き込まれると自動的に増加します。

表示制御

SPI インターフェイスを介して実行され、ディスプレイはスレーブ デバイスです。 ただし、通常の 4 つの制御線ではなく、3 つだけです。 これらは、CLK クロック、SCE チップ選択、および MOSI 入力データ ラインです。 MISO 出力ラインはありません。 これにより、使用する必要が生じます。 特別な方法管理、これについては以下で詳しく説明します。 インターフェイスは SPI-0 または SPI-3 モードで動作します。 Nokia 5110 には、追加の情報/コマンド制御ライン D/C̅ もあります。 ディスプレイに送信される各バイトは、D/C̅ ラインのレベルに応じてコマンドまたは情報バイトとして解釈できます。
情報転送は一方向であり、メモリや表示レジスタからデータを読み取ることはできません。 したがって、プログラムは表示状態を制御する機能を提供する必要があります。 ただし、管理を複雑にする機能がもう 1 つあります。 この機能はメモリの構成に関連しています。

メモリは 6 つのバンクで構成され、各バンクには 1 バイトの容量を持つ 84 個のセルが含まれています。

各インジケーター ピクセルのアドレス指定。 合計 84x48 ピクセルがあり、6 つの水平バンク (0 から 5) と 84 列に編成されています。

各バンクには垂直に配置された 8 つのピクセルが含まれており、6 つのバンクの合計で 48 ラインになります。 この図は、特定のピクセルが RAM からディスプレイにどのように表示されるかを示しています。図の各行は 1 つのバンクを表します。
情報はビット単位ではなくバイト単位でメモリに書き込まれ、各ポイントを制御する方法はなく、8 つのポイントのグループのみを制御します。 これに加えて、 ノキアメモリ 5110 LCD は読み取ることができないため、送信する前にどのデータがどのセルに保存されているかを覚えておく必要があります。 そうしないと、新しいデータがディスプレイに送信されるときに情報が失われる可能性があります。 この機能は、シンボルの置き換えを示す図で示されています。 書くとき 制御プログラムデータを保存できるようにする必要があります。

記号 L を記号 A に置き換えます。

ディスプレイのサイズは 84x48 ピクセルです。 情報は高さ 8 ピクセルの垂直ブロックで出力され、その値は出力バイトのビット値によって決まります。 最下位ビットは最上位のピクセルをエンコードします。
コマンドの説明を先に見てみましょう。 コマンド 1xxxxxxx および 01000yyy は、カーソル座標、つまり次の 8 ビットのデータが表示される行と位置を定義します。 バイトの出力後、カーソルは自動的に隣の位置に移動します。
コマンド00100PDVHを選択した場合 水平モード V=0 をアドレス指定すると、カーソルが右に移動し、次のデータ バイトが右隣の位置に表示されます。 画面の右端に到達すると、カーソルは次の行の先頭に移動します。 垂直アドレッシング V=1 を選択すると、カーソルは下に移動します。 次の行、最後の行の後、カーソルは水平位置 1 つ右に移動し、一番上の行に配置されます。
中間メモリとして、ディスプレイ内のデータのコピーを保存する制御コントローラのメモリを使用できます。 送信する前に、中間メモリに格納されている情報に応じてデータを調整する必要があります。

Nokia 5110 制御コマンド

ディスプレイは、SPI インターフェイス経由でコマンド ワードを送信することによって制御されます。 ワードサイズは1バイトです。 制御コマンドは 3 つのカテゴリに分類されます。

経営の最高機能

関数タイプの設定 - モジュールが動作する関数のタイプ (基本または高度) を示します。
電源モードの設定 - 電源をオンまたはオフにします。
アドレス指定モードの設定 - メモリのアドレス指定のタイプ (垂直または水平) を決定します。 最初のケースでは、データのバイトを書き込んだ後、Y アドレス カウンタが増加します。つまり、記録は列単位で進行します。 2 番目の X アドレス カウンターでは、記録は行ごとに行われます。
ライン D/C に接続すると、機能が Nokia 5110 LCD に転送されます 低レベル。 これらは単一のコマンドワードによって定義されます。 このワードは操作開始時にディスプレイに送信する必要があります。 フォーマット:

0 0 1 0 0 PD V H

PD ビットは電力モードを決定します。PD に設定するとパワーダウン モードを意味します。
ビット V アドレッシング モード: 1 - 垂直、0 - 水平。
ビット H は、付属する関数のタイプです。 今後の作業: 0 - 通常、1 - 拡張。
ご覧のとおり、新しいパラメータ値を設定するときに他の値に関する情報を失わないように、ディスプレイの現在の状態を覚えておく必要があります。 00100PDVH コマンドは両方のコマンド セットに存在します。

主な機能

表示モードを00001D0Eに設定します。 表示モードを定義します: ブランク画面、全ドットオン、通常表示、反転表示。 E - 画像反転符号、D - 画像出力。 D=0 の場合、画面は完全に透明 E=0 または完全に黒 E=1 のいずれかになります。
X アドレス コマンド 1xxxxxxx を設定するか、0x80 + x で画像が表示される現在の行の水平位置を選択します。 ここで、x=0 は左端の位置、83 は右端の位置です。
SetY-address コマンド 01000yyy は、次のバイトが書き込まれるセルの Y アドレスを設定します。 コマンド、または 0x40+y で、画像が表示される行 (ページ) 番号を選択します。 Y=0が最も多い トップライン, 5が最低です。 ラインの高さは 8 ポイントです。

高度な機能

拡張コマンド セットは、コマンド 00100PDV1 が送信された後に選択されます。
インストール 温度体制。 コマンド 000001tt、または 0x04 + t は、4 つの温度補正モードのいずれかを選択します。 モードに応じて、温度変化に応じた表示電圧の変化が異なります。
LCD 表示素子のバイアス電圧を設定します。 コマンド 00010bbb、または 0x10 + b は、LCD 制御のレベル オフセットを計算するための 8 つのモードの 1 つを選択します。 のために 従来のディスプレイ Nokia はモード 0001011、つまり 0x13 を推奨します。
LCD 表示要素の供給電圧を設定します。 コマンド 1vvvvvvv、または 0x80 + v 発電機の電圧を選択 高電圧液晶用。 v=0 の場合、発電機はオフになります。 出力電圧は、式 VLCD = 3.06 V + v * 0.06 V を使用して計算されます。選択した電圧補正方法に応じて、この値は温度に応じて変化します。 ディスプレイの損傷を防ぐため、 低温、この値は 8.5 V 未満にすることをお勧めします。つまり、v<=90. Для обычных дисплеев Nokia это нормальное рабочее значение этого параметра примерно равно 56, т. е. команда принимает вид 10111000, или 0xB8.
基本機能と高度な機能にはそれぞれ独自のコマンド ワードがあるため、操作が簡単です。
特定の種類の機能を使用するには、これらの機能を使用できるようにディスプレイを設定する必要があることに注意してください。 そうしないと、コマンド ワードの送信がこのコマンドの誤った実行につながります。 制御コマンドの詳細については、11 ページのドキュメントを参照してください。

ディスプレイの初期化

電源投入後 30 ミリ秒以内に次の順序で実行する必要があります。
対応する入力を100ns以上ローに駆動することでリセットします。
ディスプレイをオンにし、0x21 を送信して拡張コマンド セットを選択します。
電圧オフセットコマンド0x13を送信、
コマンド0x04で温度補正を設定します。
0xB8 コマンドを使用して高電圧発生器を 6.42 V のレベルまでオンにします。
0x20を送信して標準コマンドセットに戻ります。
コマンド 0x0C でグラフィックス モードを有効にします。
これらの手順を完了すると、Nokia 5110 LCD を使用できるようになります。

Nokia 5110 LCD モジュールの接続

モジュール接点への信号の出力は、ページ上部の画像に示されています。 図に示されている接点の配置が異なる場合もあります。

連絡先の場所のオプションの 1 つ。

モジュールの信号とライン

VCC電源3.3V
GNDコモン線
SCE イネーブル、アクティブ ロー
リセット リセット、アクティブロー
D/C̅ データ/コマンド: 0 - データ、1 - コマンド
SDINインターフェース入力
SCLC クロック信号
LEDバックライト。 赤いボード上のモジュールの場合は共通に接続し、青いモジュールの場合は電源に接続します。 バックライト回路には 330 オームの抵抗を使用します。 一部の改造にはすでに抵抗が取り付けられていますが、その他の改造には取り付けられていません。 抵抗の存在を判断し、最適なバックライト モードを選択するには、モジュールの電流とバックライトの電流を監視する必要があります。 20mAを超えてはなりません。

他のデバイスがマイクロコントローラーの SPI インターフェイスに接続されていない場合は、デバイスのメイン制御モジュールの接点を節約し、通信ラインの数を減らすために、SCE アクティブ デバイス選択ピンをモジュールの GND ピンに接続する必要があります。ボード。 しかし、欠点もあります。 Nokia コントローラーが MK との同期を失った場合、検出することは不可能になります。
より信頼性の高い接続を行うには、この方法を使用する必要があります。 MK がリセット状態にあるときに干渉がコントローラーに影響を与えるのを防ぐために、100 ~ 500 kΩ の抵抗を使用してこのラインをハイ レベルに引き上げます。
AVR マイクロコントローラを使用する場合、SPI マスター モードで USART インターフェイスを使用すると便利です。 SPI-3 モード (CPHA=1、CPOL=1)。 これは、交換がない間、SCLK ラインが High であり、コントローラーは 100 ns の間、SCLK ラインの立ち上がりエッジで SDIN ラインからデータを読み取ることを意味します。 この場合、立ち上がりエッジの少なくとも 100ns 前に設定する必要があります。 送信は最上位から順に 8 ビットで実行されます。
D/C̅ ラインのレベルによって、受信データを解釈する方法が決まります。 高レベルは送信されたデータが表示されることを意味し、低レベルはコマンドが送信されることを意味します。 コントローラは、転送された各データ バイトの最後の (最下位) ビットとともにこのラインの値を読み取ります。 非同期ハードウェア転送を使用する場合、これは困難になる可能性があります。 レベルを設定する前に、前のバイトの送信が完了するまで待つ必要があります。

Nokia 5110 LCD モジュールと Arduino UNO を接続します。

モジュールの入力信号は、3.3 V の電圧で動作する回路の論理レベルに対応する必要があります。5 V 電源のマイクロコントローラーを使用する場合は、レベル整合回路を使用する必要があります。

グラフィックアート

グラフィック イメージの準備を開始するときは、グラフィック エディターで解像度 84x48 ピクセルの *.bmp 形式の白黒イメージを準備する必要があります。 ペイントでそのような画像を準備しました。これが次のとおりです。

画像ファイル名はラテン文字で保存する必要があります。 プログラムの使用

おそらく、他の Arduino ビルダーと同様に、私も頭の中にある種のクレイジーなアイデアを持っていたのでしょう。 必要な部品はすべて中国から注文しました。 非常に長い間待たなければなりませんでしたが、Arduino Uno ボードのクローンと Nokia 5110 LCD ディスプレイが予定より早く届けられました。 私はこれまで電子機器やプログラミングに詳しくなかったので、時間を無駄にしないことに決め、このモジュールの情報を表示する方法を学び始めました。

私が最初にグーグルで調べたところ、著者の出版物「Arduino、Nokia 5110 LCDモジュールとキリル文字」を見つけました。 そして、以前に計画していたすべてのことを実行するのはそれほど簡単ではないことに気づきました。

キリル文字はわかりました。すべてが簡単です。前回の投稿をコピー&ペーストしませんが、写真には大きな問題があります。 タスクは次のとおりです。絵を描いてディスプレイにアップロードする必要があります。 最初の問題に遭遇しました。Arduino プログラミング環境に入ったところ、「挿入 - 画像」のようなものはないのですが、16 進数積分システムで特定のコードを使用して画像を書き込む必要があることがわかりました。 何人かの編集者を見つけましたが、そうではありませんでした。 画像が適切に表示されません。 私は考えられる問題を探し始めました。

たくさんの実験、試行、テストを経て、私は皆さんと共有するアルゴリズムを思いつきました。

1) 画像自体を、拡張子 84 x 48 ピクセルの白黒 .bmp 形式で取得する必要があります。
これはさまざまな方法で実行できます。ほとんどすべてのグラフィック エディタには、必要なパラメータを指定する「名前を付けて保存」機能があります。
corelDRAWでやりました。 同様のものが得られます。 次のプログラムでは画像を開くことができないため、画像の名前はラテン語のキーボードレイアウトで保存する必要があることを明確にする必要があります。

2) 必要に応じて、ペイントで画像を編集できます。奇妙なことに、そこにはいくつかのシンプルで興味深いツールがあります。

3) これを使用して、画像の 16 進コードを取得します。

4) このコードを Arduino プログラム コードに貼り付け、ボードにアップロードします。

// SCK - ピン 8 // MOSI - ピン 9 // DC - ピン 10 // RST - ピン 11 // CS - ピン 12 // #include LCD5110 myGLCD(8,9,10,11,12); extern uint8_t OKO; 浮動小数点 y; uint8_t* bm; 整数スペース; void setup() ( myGLCD.InitLCD(); ) void loop() ( myGLCD.clrScr(); myGLCD.drawBitmap(0, 0, OKO, 84, 48); myGLCD.update(); 遅延(2000); )

#含む const uint8_t OKO PROGMEM=( //コピーされた 16 進コード GLCD ツール );

説明書

以下の図に従って、Nokia 5110 の LCD 画面を Arduino に接続してみましょう。

多くのライブラリがこの LCD 画面で動作するように作成されています。 これを使用することをお勧めします: http://www.rinkydinkelectronics.com/library.php?id=44 (ファイルのダウンロード) LCD5110_Basic.zip).
インストールするには、ファイルをディレクトリに解凍します。 Arduino IDE/ライブラリ/.
ライブラリは次の機能をサポートしています。
LCD5110(SCK、MOSI、DC、RST、CS);- Arduino ピンへの対応を示す LCD 画面のアナウンス。
InitLCD();- オプションのコントラスト表示 (0 ~ 127) による 5110 ディスプレイの初期化、デフォルト値は 70;
setContrast(コントラスト);- コントラストを設定します (0 ~ 127)。
イネーブルスリープ();- 画面をスリープモードにします。
無効スリープ();- 画面をスリープモードから復帰させます。
clrScr();- 画面をクリアします。
clrRow(行, , );- 選択した行番号行を開始位置から終了位置までクリアします。
反転(真); そして反転(false);- LCD 画面の内容の反転を有効または無効にします。
print(文字列, x, y);- 指定された座標の文字列を表示します。 x 座標の代わりに、LEFT、CENTER、RIGHT を使用できます。 標準フォントの高さは 8 ポイントなので、行間隔は 8 ポイントになります。
printNumI(num, x, y, , );- 画面上の指定された位置 (x, y) に整数を表示します。 長さ - 希望する数値の長さ。 filler - 数値が希望の長さより短い場合に「空」を埋めるための記号。 デフォルトは空のスペース " " です。
printNumF(数値, 10 進数, x, y, , , );- 浮動小数点数を表示します。 dec - 小数点以下の桁数。 除算器 - 小数点記号、デフォルトのポイント「.」;
setFont(名前);- フォントを選択します。 組み込みフォントは SmallFont および TinyFont と呼ばれます。 スケッチ内でフォントを定義できます。
invertText(true); そしてinvertText(false);- テキスト反転のオン/オフ。
drawBitmap(x, y, data, sx, sy);- 画面上の x 座標と y 座標に画像を表示します。 data - 画像を含む配列。 sx と sy - 画像の幅と高さ。

こんな感じでスケッチを書いてみましょう。 まずライブラリを接続し、次にピン割り当てを使用して LCD5110 クラスのインスタンスを宣言します。
手続き中 設定()液晶画面を初期化します。
手続き中 ループ()画面をクリアして小さいフォントで任意のテキストを書き込み、その下に中程度のフォントで秒カウンターを表示します。

画面に写真を表示してみましょう。 これを行うには、Nokia 5110 画面に表示するモノクロ画像を準備します。画面解像度は 48 x 84 ピクセルであり、画像はこれより大きくてはいけないことに注意してください。 http://www.rinkydinkelectronics.com/t_imageconverter_mono.php ページで、画像をビット配列に変換します。 拡張子「*.c」が付いた結果のファイルをダウンロードし、メニューからプロジェクトに追加します。 スケッチ -> ファイルを追加...または、単純にファイルをスケッチディレクトリに配置して、Arduino IDE を再起動します。

Arduino でデバイスを組み立てるとき、自律的な情報出力の必要性に直面することがよくあります。 そしていつものように、私は解決策が安価であることを望んでいます。 そしてここで、安価なデバイスの選択肢がそれほど豊富ではないことがわかります。

表示する情報が少ない場合は、7セグメントインジケーターを使用すると便利です。 とても明るく対照的です。 TM1637 の高さ 0.36 インチの 4 桁の定規は 70 セントで販売されており、わずか 2 つのピンによって制御されます。 ご想像のとおり、これらは主に時間を表示するように設計されていますが、たとえば、温度、圧力、その他のパラメーターを簡単に表示することもでき、4 桁で十分です。

ただし、出力情報が多い場合は機能しません。 このような場合、「フォーク」LCD 1602 ディスプレイが最もよく使用されます。これは、1 ドル半の価格で 2 行の 16 文字を表示できる機能を備えています。 このようにして、より多くの情報を表示できます。

より高度な 4 行の兄弟版ではさらに多くの情報が表示されますが、価格は約 5 ドルと著しく高く、サイズもすでにかなり大きくなっています。

これらのデバイスにはすべて長所と短所があります。 主な欠点としては、コード テーブルがチップにしっかりと組み込まれているためロシア語がサポートされていないこと、およびグラフィックスを表示できないことが挙げられます。 厳密に言うと、キリル文字ファームウェアは 同様のデバイスたまたまですが、これらは主にロシアで法外な価格で販売されています。
これらの欠点が次の用途に使用される場合 作成中のデバイス白黒グラフィックの 84x48 ピクセルの解像度が適切な場合は、Nokia 5110 のディスプレイに注意を払う必要があります。かつてはありましたが、非常に不完全で、いくつかの場所で時代遅れでした。 特にキリル文字の表示は不可能であると記載されていました。 今日ではそのような問題はありません。

私たちのレビューの主人公は、数ドル未満の価格で、丈夫な段ボール箱に入れられて私のところに来ました。 保護フィルム販売者に感謝します。 デバイスには寸法があります プリント回路基板 45x45 mm の赤色 textolite と、解像度 84x48 ピクセル、サイズ 40x25 mm の LCD スクリーン。 本体の重さは15gで、消灯可能な青色のバックライトを備えています。 Arduino の場合、このディスプレイは電源を除いて 5 つのデジタル ピンを食いちぎります。 ボードには平行なピンが 2 列あるため、1 列だけを使用できます。 このうち 5 つは制御用、2 つは電源用、1 つはバックライトの点灯用です。 バックライトをオンにするには、LIGHT ピンをグランドに短絡する必要があります (ボード上には、このディスプレイの別のバージョンがあると言われています) 青い色の、このピンは電源に接続されます)。 ボードははんだ付けされていない状態で出荷され、キットには 2 つのコームが含まれています。
したがって、SCLK、DIN、DC、CE、および RTS ピンを Arduino ピン (たとえば、3、4、5、6、7) に接続します。VCC ピンを 3.3V (5 ではなく、正確に 3.3!) に接続します。接地してライブラリをダウンロードします。
このライブラリの関数を使用すると、次のことを表示できます。 グラフィックプリミティブ(線、円、長方形など)、ラスター画像、テキスト。 ライブラリにはその機能を示す例が含まれているので、参照することをお勧めします。 ただし、テキストをロシア語で表示するには、フォントを調整する必要があります。 しかし幸いなことに、 善良な人すべてがすでに行われており、置換ファイルをダウンロードできます。
以下にスケッチの例を示します。ロシア語でのテキスト出力の結果は上に表示されます。 実際にそれを計算するのは難しくありません 小さいサイズフォント (No. 1) を使用すると、84 文字 (6 行で 14 文字) を表示できます。これは、たとえば、簡潔な診断メッセージを表示するには十分です。 フォント #2 は 2 倍の大きさです。
画面解像度により、非常に優れた 2 色のラスター イメージを表示でき、プログラムのアイコンとして使用できます。

このようなアイコンの作成は非常に簡単です。 ネタバレの下で、これがどのように行われるかを示します。

MYSKU Web サイトのロゴの例を使用してラスター イメージをすばやく作成する方法

まず、ロゴのスクリーンショットを撮りましょう ( プリントキー画面)。
からペイントを起動しましょう 標準プログラムそしてCtrl+Vを押します。 ロゴのある画面全体を自由に使用できます。


目的のフラグメントを選択し、TRIM ボタンを押します。 フラグメントを取得しましょう。

次に、このフラグメントを 2 色に変える必要があります。 ペイント自体がこれに対処できます。 「名前を付けて保存」をクリックし、種類「モノクロ写真(*.bmp)」を選択します。 編集者の警告を無視して [OK] をクリックすると、次の図が表示されます。

次に、このピクセルのセットを Arduino 用のコードの配列に変換する必要があります。 このタスクに対処できるものを見つけました。
彼は入り口で渡される必要がある bmpファイル、でも間違いなく256色です! そこで、もう一度「名前を付けて保存」をクリックし、「256 カラー BMP アート」タイプを選択します。 ここで、結果として得られるファイルの側面の寸法を覚えておきましょう。スケッチでそれらを指定する必要があります (ステータス バーの下部にあるペイントで確認するか、[ファイル プロパティ] -> [詳細] タブを開いて)、オンライン コンバーターに移動します。 。


ファイルを選択し、チェックボックスをオンにします 16進数そして「変換」をクリックします。
必要な配列を取得しましょう。


この配列をスケッチにコピーし、コンパイルして、何が起こるかを確認します。


次に、バックライトをオフにして、バックライトなしで画像がどのように見えるかを確認してみましょう。


ご覧のとおり、テキストとアイコンの両方が読みやすくなっています。 さらに、光が明るいほど、可読性は向上します(ああ、晴れた日に Nokia 1100 を使用するのがどれほど快適だったかを覚えています。その一方で、人々は番号をダイヤルするためにカラーマトリックスを備えた受話器を日陰に隠していました)。 一般に、十分な照明がある場合、またはバックライトが干渉する場合、またはバッテリー電力を節約するために、このモードでディスプレイを使用できます。 誰かの画面が見にくい場合は、スケッチのコントラストを調整してください。 コントラストの向上バックライトの有無にかかわらず、結果は次のようになります さまざまな意味、これを考慮する必要があります。

テキストと画像を表示するためのスケッチの例

#含む #含む // ピン 3 - シリアル クロック出力 (SCLK) // ピン 4 - シリアル データ出力 (DIN) // ピン 5 - データ/コマンド選択 (D/C) // ピン 6 - LCD チップ選択 (CS) // ピン7 - LCD リセット (RST) Adafruit_PCD8544 ディスプレイ = Adafruit_PCD8544(3, 4, 5, 6, 7); 定数静的 符号なし文字 PROGMEM ku59x39 = ( 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x7f, 0xff, 0xff 0xff, 0xff、0xff、0xf0 、0xe0、0x1f、0xff、0xff、0xe0、0x0、0x3、0xf0、0xfc、0xf、0xff、0xfc、0x0、0x0、0x0、0x0、0xff、0x87、0xff、0xc0、0x0、、0x7f、0 xc0、0xff、 0xe3、0xff、0x0、0x0、0x7f、0xff、0x90、0xff、0xf1、0xfc、0x0、0x7、0xff、0xff、0x30、0xff、0xf8、0xf0、0x0、0x7f、0xff、0xfe、、0x 30、0xff、0xfc 、0x40、0x3、0xff、0xff、0xfc、0x70、0xff、0xfe、0x0、0xf、0xff、0xff、0xf8、0xf0、0xff、0xff、0x0、0x7f、0xff、0xff、0xf0、、0xff、 ff、0x81、 0xff、0xff、0xff、0xe1、0xf0、0xff、0xff、0xc7、0xff、0xff、0xff、0xe3、0xf0、0xff、0xff、0xc3、0xff、0xff、0xff、0xc3、0xf0、0xff、 e3、0xff、0xff 、0xff、0x83、0xf0、0xff、0xff、0xe1、0xff、0xff、0xff、0x87、0xf0、0xff、0xff、0xf0、0xff、0xff、0xff、0x87、0xf0、0xff、0xf0、0xff、0 xff、0xff、0x87 、0xf0、0xff、0xff、0xf8、0x7f、0xff、0x1f、0x87、0xf0、0xff、0xff、0xf8、0x7f、0x0、0x0、0x7、0xf0、0xff、0xff 0x、fc、0x38、 0x0、0x1、 0xf0、0xff、0xff、0xfc、0x20、0x0、0x0、0xbf、0xf0、0xff、0xff、0xfe、0x0、0x3、0xff、0xff、0xf0、0xff、0xff、0xfe、0x0、0 x3f、0xe1、0 xff、0xf0 、0xff、0xff、0xfe、0x3、0xf0、0x0、0x1、0xf0、0xff、0xff、0xfe、0xf、0x80、0x0、0x0、0xf0、0xff、0xff、0xff、0xe、0x0、3f、0xff、 f0、0xff 、0xff、0xff、0xc、0x3、0xff、0xe1、0xf0、0xff、0xff、0xff、0x0、0x1f、0xff、0xc0、0xf0、0xff、0xff、0xff、0x80、0x7f、0x88、0xf0、0 xff、0xff、0xff 、0x80、0xff、0xff、0x9c、0xf0、0xff、0xff、0xff、0x83、0xff、0xff、0x38、0xf0、0xff、0xff、0xff、0xc3、0xff、0xff、0x19、0xf0、0xff、0 xff、0xff、0xf0 、0xff、0xff、0x3、0xf0、0xff、0xff、0xff、0xe0、0x7f、0xff、0x87、0xf0、0xff、0xff、0xff、0xce、0x7f、0xff、0xdf、、0xff、0xff、0xff、 ce、0x7f、 0xff、0xff、0xf0、0xff、0xff、0xff、0x9e、0x7f、0xff、0xff、0xf0、0xff、0xff、0xff、0x8c、0xff、0xff、0xff、0xf0、0xff、0xff、0xff、0x80、 0xff、0xff、 0xff、0xf0、0xff、0xff、0xff、0xc1、0xff、0xff、0xff、0xf0、0xff、0xff、0xff、0xe3、0xff、0xff、0xff、0xf0 ); void setup() ( display.begin(); display.setContrast(50); display.setTextSize(1); display.setTextColor(BLACK); // テキストの色を設定します ) void loop() ( display.clearDisplay(); display .drawBitmap(10, 5, ku59x39, 59, 39, BLACK); display.display(); display.setCursor(0,0); 弾道ターゲットだけでなく、航空力学的ターゲットも; ディスプレイ.ディスプレイ(2000);


さて、Arduino (プロセッサ + RAM + ブートローダー BIOS) + ドライブ (EEPROM) + 入出力システム (IRDA リモートおよび Nokia 5110) は、実際には、 本格的なコンピューターなら、それ用の本格的なゲームを書いてみませんか? もちろん、Arduino コンピューターは GTA のようなゲームを処理することはできませんが、単純なカジュアルなおもちゃなら簡単に処理できます。 史上最高のゲーム、テトリスを書いてみましょう。
プログラマーにとって、これは朝の体操のようなもので、簡単な頭の体操なので、ぜひやってください。 そして、これはムスカではこれまで一度も起こったことのないことのようです。 そして、ゲームはその主題の可能性を明らかにします。
入力システムとして、どのデバイスからでも IRDA リモコンを使用することにしました。 このソリューションを使用すると、必要なのは 1 つだけで、1 つあたり 4 ルーブルのコストがかかります。 IR リモコンはどのアパートにもあります。 声優の場合は、古いマザーボードのピエゾツイーターも使用します。これは、予算内でマルチメディアに相当します))。 今、より優れたものが私のところに来ていますが、これによってすでにスーパーコンピューターの価格が 1 ドル値上がりしています。 今のところはなんとかなります。 それはすでに彼と一緒にいるでしょう。
ブレッドボード上で、出力デバイスと入力デバイス、そして「マルチメディア」を接続します。 次のようになりました。


私が使用した Arduino ウノ、必要な 3.3 V がすでに存在しているため、Mini を使用する場合は、画面に必要な 3.3 を 5 ボルトから取得する必要があります。 インターネットから得た最も簡単な方法は、2 つのシリコン ダイオードを直列に接続する (選択する) ことです。
描画を避けるために 電気図, 使用したArduinoピンのみを示します。
Nokia 5110 ディスプレイの接続:
ピン 3 - シリアル クロック出力 (SCLK)
ピン 4 - シリアル データ出力 (DIN)
ピン 5 - データ/コマンド選択 (D/C)
ピン 6 - LCD チップセレクト (CS)
ピン 7 - LCD リセット (RST)
ディスプレイのLIGHTピンを点灯するには、それをArduinoのGNDに投げます。 (赤ボードのみ!)。 3.3Vのプラス電源。 GNDに接地します。
IR受信機の接続:
ピン 8 - IR (制御)。 電源はそれぞれ+5VとGNDです。
ピエゾツイーターの接続:
ピン 9 - スピーカー、グランドと GND。
インストール後、スケッチをアップロードします

テトリス ゲームのスケッチ

//// © Klop 2017 #include #含む #含む #含む #define rk 4 // 正方形の幅 #define rz 5 // 座席の幅 #define smeX 1 #define smeY 1 #define MaxX 10 // ガラスの座席の水平方向の数 #define Speaker 9 #define RECV_PIN 8 // foot IRDA レシーバー上 // ピン 3 - シリアル クロック出力 (SCLK) // ピン 4 - シリアル データ出力 (DIN) // ピン 5 - データ/コマンド選択 (D/C) // ピン 6 - LCD チップ選択 (CS) // ピン 7 - LCD リセット (RST) Adafruit_PCD8544 ディスプレイ = Adafruit_PCD8544(3, 4, 5, 6, 7); IRrecv irrecv(RECV_PIN); decode_results 結果; バイトmstacan; バイト Lst、SmeH、センター、NumNext; バイト最大Y; // ガラスの垂直方向の桁数 int dxx, dyy, FigX, FigY, Victory, myspeed,tempspeed; 符号なしロング OK、左、プラボ、ヴニズ、マイレコード; unsigned long flfirst=1234; // 最初の起動ラベル バイト fig= (((0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0)) 、((0,1,0,0)、(0,1,0,0)、(0,1,0,0)、(0,1,0,0))、((0,0,0) ,0)、(0,1,1,0)、(0,1,1,0)、(0,0,0,0))、((0,1,0,0)、(0,1) ,1,0), (0,0,1,0), (0,0,0,0)), ((0,1,0,0), (0,1,0,0), (0 ,1,1,0), (0,0,0,0)), ((0,1,0,0), (0,1,1,0), (0,1,0,0), (0,0,0,0))、((0,0,1,0)、(0,1,1,0)、(0,1,0,0)、(0,0,0,0 ))、((0,0,1,0)、(0,0,1,0)、(0,1,1,0)、(0,0,0,0))、((0,0) ,0,0), //8 (0,0,0,0), (0,0,0,0), (0,0,0,0)) ); //=============================================== ============= void mybeep () // sound (analogWrite(speaker, 100);lay(100);analogWrite(speaker, 0); ) //======= =============== ======================== void figmove(バイト a, バイト b) ( (バイト i=0;i<4;i++) for (byte j=0;j<4;j++) fig[a][i][j]=fig[b][i][j]; } //============================================== void figinit(byte a) { for (byte i=0;i<4;i++) for (byte j=0;j<4;j++) { fig[i][j]=fig[i][j]; if (fig[a][j][i]==1) // покажем след фигуру display.fillRect(i*rz+60, 20+(j)*rz, rk , rk, BLACK); else display.fillRect(i*rz+60, 20+(j)*rz, rk , rk, WHITE); } display.display(); NumNext=a; tempspeed=myspeed-(Victory/30)*50; // через каждые 30 линий увеличим скорость падения; dxx=0; for (byte i=0;i0)display.fillRect(i*rz+1, SmeH+(j-4)*rz, rk , rk, BLACK); else display.fillRect(i*rz+1, SmeH+(j-4)*rz, rk , rk, WHITE); ds(勝利,1); ディスプレイ.ディスプレイ(); ) //============================================== ================ = void ds(int aa, int b) (display.fillRect(55, 10, 29, 10, WHITE); display.setCursor(55,b* 10); 表示.println(aa); //=== =============================== ========================== bool iffig(int dx , int dy) (int i,j; bool flag=true; bool pov=false ; for (i=0;i MaxX-1) dx=-1;// 右側の壁から 1 ) ) ) だけ遠ざけてみます (i=0;i)<4;i++) for (j=0;j<4;j++) if (fig[j][i]==1) if (i+FigX+dx<0 || i+FigX+dx>MaxX-1 || FigY+j+dy>MaxY-1 || mstacan>0) (flag=false; Break;) // 新しい座標をチェック if (flag) (FigX=FigX+dx; FigY=FigY+dy;byte k=0; for (i=0;i)<4;i++) for (j=0;j<4;j++) if (fig[j][i]==1) {mstacan=1; dxx=0; } } // переместили фигуру на новые координаты else { if (pov) figmove(0,8); for (i=0;i<4;i++) // восстановили фигуру for (j=0;j<4;j++) if (fig[j][i]==1) mstacan=1; } return(flag); } //================================================ void clearstacan() { for (byte i=0;imyrecord) ( myrecord=Victory; EEPROM_write(16, myrecord); ) display.setCursor(5,0); display.print("レコード"); display.setCursor(5,10); 表示.print(myrecord); ディスプレイ.ディスプレイ(); display.setCursor(5,20); 遅延(2000);irrecv.resume(); display.println("クリック"); tb=getbutton("OK"); if (tb!=ok) ( ok=tb; levo=getbutton("左"); pravo=getbutton("右"); vniz=getbutton("下"); EEPROM_write(0, ok); EEPROM_write(4, levo); EEPROM_write(12, vniz); myspeed=800; tempspeed = 私の速度; 勝利=0; ) //============================================== ================ = void setup() ( unsigned long tr; word gg=0;randomSeed(analogRead(0)); irrecv.enableIRIn(); // IRDA を開始する受信機display.setContrast(50); display.setTextColor(BLACK); // 文字の色を設定します。ピクセル単位のガラス MaxY=display.height()/rz+4; 立方体単位の SmeH=display.height()%rz; // ディスプレイの上部オフセット (7); (20, tr); if (tr==flfirst) EEPROM_read(16, myrecord); else ( myrecord=0; EEPROM_write(16, myrecord); EEPROM_write(20, flfirst); ) //=== ================================================= =========== void dvoiki() (for (byte i=0;i
そして戦うこともできる。 ゲームは、任意のリモコンへのバインドをサポートしています。 これを行うには、ゲームの開始時に「OK を押して」と尋ねられたら、フィギュアを回転させるリモコンのボタンを押します。 ゲームのリモコンに慣れている場合は、すぐにゲームが開始されます。 リモコンが新しい場合、OK ボタンのコードは記憶されているものと一致しないため、ゲームでは「左」、「右」、「下」ボタンを順番に押す必要があります。 これらのボタンは Arduino の不揮発性メモリに記録され、その後この特定のリモコンは「OK」ボタンを押すとすぐに認識されます。


集めたラインで「失敗」すると、キーッという音が鳴ります。 これは、特定の周波数で PWM を生成するために、いくつかの Arduino ピン (この例では 9 個) に基づいて実装されています。
このゲームは、通常のゲームのすべての属性をサポートしています。 次の数字と現在のスコアのヒントもあります。 ゲームは記録を追跡します。 この値はArduinoの不揮発性メモリに保存されます。 レコードをリセットするには、スケッチ内の値 flfirst=1234 を他の値に変更するだけです。 また、ゲームは 30 行ごとに落下速度が自動的に増加するため、無限にプレイできるわけではありません)。 スケッチは最適化されておらず、慎重に実行されていませんでしたが、楽しみのために自由に書かれました。 誰かが間違いを見つけたら、書き込んでください。 ©について。 スケッチは自由に編集できます。 オプションをどこかに公開する場合のみ、元のソースへのリンクを示してください)。
なぜそれをしたのか - 長い週末 + 「芸術への愛のため」。 もし私の娘が小さかったら、3月8日の人形の部屋にミニスロットマシンを作ってあげるかもしれません, ちょうど間に合うように。 Snake や Arkanoid などのゲームをいくつか追加し、おそらく PCB から本体を切り出すでしょう。 今年すでに博士号を取得しているのは娘だけなので、失敗しましたが、このアイデアは他の人に役立つかもしれません)。

Nokia 5110 ディスプレイについてまとめてみましょう。
長所
+グラフィックを表示する可能性;
+キリル文字には問題ありません。
+軽量;
+表示情報の寸法/量の優れた比率。
+ 使用されている LCD テクノロジーの利点は、消費電力が低く、明るい場所でも読みやすいことです。
+ 切り替え可能なバックライト;
+価格。

マイナス
- バックライトが不均一です。
- 画像は白黒 (陰影なし) です。
-3.3Vに注意する必要がありますが、すべてのArduinoがそのような電圧を備えているわけではありません。

評決: その特性の全体に基づいて、その金額の割に、自信を持ってそのニッチを占めています。Arduino 用のディスプレイ デバイスの中でこれほど長寿であるのには理由がないわけではありません。

+102を買う予定です お気に入りに追加 レビューが気に入りました +148 +269

新しい記事

● プロジェクト 16: グラフィック インジケーター。 Nokia 5110 ディスプレイの接続

この実験では、Arduino プロジェクトでグラフィック情報を表示するために使用できる Nokia 5110 グラフィック ディスプレイを調べます。

必要なコンポーネント:

Nokia 5110 液晶ディスプレイは、PCD8544 コントローラを搭載した解像度 84×48 のモノクロ ディスプレイで、グラフィック情報とテキスト情報を表示するように設計されています。 ディスプレイの電源は 2.7 ~ 3.3 V である必要があります (最大 3.3 V、VCC ピンに 5 V が供給されるとディスプレイが損傷する可能性があります)。 ただし、コントローラーのピンは +5V 耐性があるため、Arduino 入力に直接接続できます。 重要な点は低消費電力であるため、外部電源を使用せずに Arduino ボードからディスプレイに電力を供給できます。
Nokia 5110 と Arduino の接続図を図に示します。 16.1.

米。 16.1. Nokia 5110 と Arduino の接続図

Nokia 5110 ディスプレイを操作するには、グラフィックとテキストを表示するための豊富な機能を備えた Adafruit_GFX ライブラリを使用します。 私たちの実験では、Arduino A0 のアナログ入力に接続されたフォトレジスタから照明データを受け取り、その照明データを数値およびグラフ表示で出力します。 接続図を図に示します。 16.2.

米。 16.2. Nokia 5110とフォトレジスタのArduinoへの接続図

実験スケッチのコードをリスト 16.1 に示します。 フォトレジスタからデータを読み取り、照度値を最大値のパーセンテージとして数値およびグラフ (進行状況バー) で表示します。 実験13から最小および最大照明の値を取得します。

// ライブラリを接続する #含む #含む // ピン 7 - LCD の RST ピン 1 // ピン 6 - LCD の CE ピン 2 // ピン 5 - LCD の DC ピン 3 // ピン 4 - LCD の DIN ピン 4 // ピン 3 - LCD の CLK ピン 5 Adafruit_PCD8544 表示 = Adafruit_PCD8544(3, 4, 5, 6, 7); const int LIGHT=A0; // フォトレジスタ入力用のピン A0 const int MIN_LIGHT=200 ; // 照明閾値の下限 const int MAX_LIGHT=900 ; // 照明の上限閾値 // フォトレジスタデータを保存するための変数 int val1,val2 = 0 ; void setup()( 表示.begin(); // 画面の背景のコントラストを設定します // 非常に重要なパラメータです。ディスプレイ.setContrast(60); ディスプレイ.clearDisplay(); // 画面をクリア遅延(2000); ) ボイドループ()( val1 = アナログ読み取り(LIGHT); // フォトレジスタの測定値を読み取ります描画テキスト(val1,1); // テキストを表示する // ポテンショメータの値を 0 ~ 75 にスケーリングします val2= マップ (val1, MIN_LIGHT, MAX_LIGHT, 0 , 75 ); // 黒い四角形を%で出力します display.fillRect(5, 25, val2, 10, 1); // 長方形の白い部分を出力します display.fillRect(5 +val2,25 , 75 -val2, 10 , 0 ); ディスプレイ.ディスプレイ(); 遅延(1000); // 新しい測定の前に一時停止します描画テキスト(val1,2); // テキストを消去します) // テキスト出力手続き voiddrawText( unsigned long num、int color)( display.setTextSize(2); // フォント サイズ display.setCursor(20,5); // カーソル位置 if (color==1 ) display.setTextColor(BLACK); // 値を出力しますそれ以外の場合は、display.setTextColor(WHITE); // 消去(白地に白)表示.print(番号); )
接続順序:

1. 図の図に従って、Nokia 5110 ディスプレイ センサーとフォトレジスタを接続します。 16.2.
2. リスト 16.1 のスケッチを Arduino ボードにロードします。
3. 光の流れを手で遮断し、表示画面上の照度の測定値の変化を確認します。

番組一覧