液晶ディスプレイのクリア表示

シリアル通信を使用して、データを 4x20 LCDディスプレイに表示しています。もちろん、すべての行を埋めたときに、それをクリアする必要があります。ネットで検索したところ、こんな感じでした      Serial.write(27);//ESCコマンド      Serial.print( "[2J"); //画面コマンドを消去      Serial.write(27);      Serial.print( "[H"); //ホームコマンドへのカーソル しかし、うまくいきません。私は Serial.println(); のような解決策も見つけましたが、その解決策は(彼らがそれを呼んだようにカンニングします)シリアルモニタでのみ動作しますそれでは、表示をクリアしたり、そこから単一の文字を削除したりするための考えられる解決策はありますか?

0
ライブラリを気にする必要はありません(それはシリアル通信です)。私たち/あなたはあなたが使うそのディスプレイのドキュメンテーションが必要です。
追加された 著者 tomzx,
いいえ、シリアルプロトコルのドキュメントです。私が知っているシリアルディスプレイは、適切なディスプレイと、シリアルプロトコルを実装するマイクロコントローラを使用した追加印刷で構成されています。そのuCのファームウェアは、ディスプレイがシリアルコマンドにどのように反応するかを決定します。それ故にあなたはそのドキュメンテーションが必要です。
追加された 著者 tomzx,
その文書はハードウェアだけを説明しています、あなたはプロトコルの説明が必要です。あなたはメーカーに連絡して尋ねることができます。
追加された 著者 tomzx,
@WoutervanOoijen私は彼らにメッセージを残すつもりですが、私は彼らの返信が到着するまでに5時間以上かかると思います。
追加された 著者 obeone,
@WoutervanOoijenこの E用語しかありません
追加された 著者 obeone,
@WoutervanOoijenあなたはその概略図のように液晶の仕様を意味していますね。
追加された 著者 obeone,
@alexan_e標準ライブラリだと思います。シリアルコマンドを正常に起動するためのものは何もダウンロードしていないからです。
追加された 著者 obeone,
あなたが使っているlcdライブラリのリンクを教えてください。それは標準のarduinoライブラリですか?
追加された 著者 alexan_e,

4 答え

概要

おそらく、標準のパラレルLCDをシリアルボードから分離して、パラレルディスプレイを直接使用することができます。

シリアル表示

E-Termは、表示部(天板)が16ピンパラレル4 x 20文字のLCDをボード上に持っているように見えます。これは、16ピンコネクタによって取り付けられ、パラレル - シリアルアダプタ(底板の一部)にスタンドオフします。

enter image description here

シリアルアダプタのコマンドインタフェースに関するソフトウェア情報がない場合は、使用が非常に困難です。

文書化された表示の改善

そのベンダーはもっと多くのドキュメントを持っている他のディスプレイを提供します。含む 例Arduinoのスケッチ。

あなたはこれらを試してみて、あなたのディスプレイインタフェースが(表示可能なデータ内のコマンドを囲むためにSTXとETX文字を使って)同じまたは類似のコマンドシステムを使っているかどうか見ることができます。

これは結局イライラする行き止まりになるかもしれません。

並列表示部

トップボードが標準の16ピンパラレルコントローラを使用している場合は、他のボードから取り外すことができ、Arduino LiquidCrystal ライブラリ。

このライブラリは、を含む多くの機能を持っています...

  • clear the display - clear()
  • position the cursor - setCursor(column, row)
  • move cursor to top left - home()

これに関するチュートリアルとそれを使用する膨大な数の人々がいるので、あなたはこれがより簡単な道を見つけるかもしれません。

2本ではなく6本のGPIOピンを使用します。あなたはおそらくあなたのArduinoクローンの(まだ)GPIOピンが不足していないでしょう。

通常のArduinoのA0-A5(またはそれ以上)ピンもデジタルIOピンとして使用できることに注意してください。

Arduino Megas(および同様のクローン)には、(関連する「コア」をIDEにロードしてからIDEで正しいボードを選択する限り)使用できるGPIOピンが他にもたくさんあります。

個人的には、これが最も簡単な方法だと思います。


これは古いArduino Duemilanoveです - GPIOピンが限られています。ただし、2つのMIDIポート、3つのプッシュボタン、2つのアナログポテンショメータを持つMIDIシールドを駆動しています。

パラレルLCDを接続するための6つのGPIOピン(および電源とGND)を見つけるのに問題はありませんでした。 4データ(黄色) RS(青)を有効(黄色)にします。あなたのArduinoクローンはこれよりはるかに多くのGPIOを持っているので、あなたはあまり問題にならないはずです。

ミニブレッドボードは、接続を容易にし、ポテンショメータによるLCDコントラスト制御を提供するためにあります。

enter image description here

1
追加された
@新しい:答えはLiquidCrystalのリンクを参照してください。任意の文字を(スペースで)上書きすることも、バッファ配列から行を書き換えることもできます。ただし、シリアルで作業している場合はそれを使用してください。
追加された 著者 Mykroft,
@新しい:更新された答えを参照してください。あなたは少なくともGPIOピン18-23を自由に持っています - それはパラレルLCD(オフボードコントラストコントロール付き)には十分です
追加された 著者 Mykroft,
私はまだあなたの解決策を試してみます。 Coz私の教授は単一の文字を削除せずにそれを承認するとは思わない。問題が発生した場合は、もう一度質問します。また助けてください。ありがとう
追加された 著者 obeone,
よく、私はスレッドでここに答えの一つで迅速な解決策を見つけましたが、私はその解決策がディスプレイの単一の文字を削除することができるとは思わない。あなたの答えであなたは私が私のディスプレイから単一の文字を削除することができると思いますか?
追加された 著者 obeone,
実際に私のクローンはtxとrx.pinsのための4つのピンを持っています4-11は私のキーパッド、GNDとAREFのためのピンとピン12と13によって埋め尽くされます。 GPIOとして、そして6本の未使用アナログピン。ディスプレイのキーパッドで占められているピンへの接続をタップしたら問題はありますか?ところでここに私のクローンのマニュアルがあります。 >
追加された 著者 obeone,

The only relevant info I managed to find is this discussion

ボードの所有者からの最後のコメントによると

ASCIIテーブルを0から255まで印刷しようとしました。   CR、LF、BS、TABが動作します。他の印刷不可能な文字はいけません。他の文字は完璧です(拡張文字は限られています)。

つまり、CR + LF(キャリッジリターン、ラインフィード)シーケンスは、印刷された文字を画面から押し出す効果があるのでしょうか。

for (int i=0; i < 4; i++) 
{
  Serial.print(13); //carriage return (CR)
  Serial.print(10); //line feed (LF)
}

または多分

for (int i=0; i < 4; i++) 
{
  Serial.write(13); //carriage return (CR)
  Serial.write(10); //line feed (LF)
}

これらがうまくいかないなら、私が見る代わりの方法は、リンクされた議論の始めに記述されている解決策を適用して、40のバックスペースコマンドを送ることです:

for (int i=0; i < 80; i++) 
{
  Serial.print(8); //print 40 times backspace (BS)
}

またはあなたが必要とするかもしれません

for (int i=0; i < 80; i++) 
{
  Serial.write(8); //print 40 times backspace (BS)
}
1
追加された
しかしこれは私がマイクロコントローラに投げられたデータを削除していないことを意味します。そして私が正しいとすればそれはarduinoのすべての記憶を消費することができますか?私は正しいですか?そして、その記憶をいっぱいにすることの効果は何でしょうか?
追加された 著者 obeone,
このコードは for(int i = 0; i <40; i ++){Serial.write(8); //バックスペース(BS)を40回印刷します。ありがとう、しかし私はそれが逆行しているのではありません。シリアルモニタでは順調に進んでいるからです。つまり、私は1文字を削除することはできません。
追加された 著者 obeone,
しかし、なぜ彼はそれが議論でうまくいくと言ったのですか、彼は同じボードを持っていました。 (?)(1) "backspace"を20 * 4回印刷する(2)印刷行1(3)印刷行2(4)印刷行3(5)印刷行4 20 * 40 = 80回なのでコードを編集する必要があります
追加された 著者 alexan_e,
@NewInEverything送信した各文字は受信され、(上書きまたは削除されるまで)ディスプレイメモリに保存されます。シリアルコマンドを使って何かを送ると、それはarduinoのメモリのどこにも格納されません。
追加された 著者 alexan_e,

私が使った Newhaven シリアルディスプレイでは、[ディスプレイのクリア]コマンドは0x01です。

Parallax の表示では、コマンド( "フォームフィード"と呼ばれます)は0x0C(10進12)です。

ディスプレイの種類が異なる場合は、コマンドが異なる場合があります。

0
追加された
だから私はこれが Serial.write(12); 、または Serial.println(12); Serial.print(12); <であると思います/ code>。私は正しいですか?もしそれが。私はまだ液晶ディスプレイをクリアすることができます。
追加された 著者 obeone,
視差に少し似ていますが、 tx 用の外部ピンがあります。視差でコマンドを試す
追加された 著者 obeone,

私はあなたの特定の質問に対する答えを知りません - しかし、これが通常どのように機能するかです。

通常、ほとんどのLCDボードはパラレル通信のみを受け入れる "LCDコントローラ"を持っています - 最も一般的な例は日立のものです。 nofollow "> HD44780 4行ディスプレイの場合は、2つのコントローラーがあります。シリアル通信を受け付けるLCDには、 also a コンパニオンマイクロコントローラ。このマイクロコントローラはシリアル通信を受け入れ、それをLCDコントローラへの適切なパラレルコマンドに変換するようにプログラムされています。

手短に言うと、「標準」があるとは思わないし、ディスプレイをクリアしたりカーソル位置を変更したりするためにどのシリアルコマンドを使用するかは、マイクロコントローラがそれらのコマンドを受け付けるようにプログラムされている方法によって異なります。これらのコマンドの発行方法の詳細を説明したユーザーガイドがあるかどうかを確認する必要があります。

0
追加された
実際に私は少し似たようなモジュールを使っています。 Eターム
追加された 著者 obeone,