🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

4680閲覧

arduino for文で文字を流したい

mika9

総合スコア1

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2021/01/09 14:30

編集2021/01/11 05:36

前提・実現したいこと

初心者です。arduinoのlcdでfor文を使って文字を流したいのですが、うまく動きませんん。どのように修正するべきか教えていただけると幸いです。

発生している問題・エラーメッセージ

コードを実行すると、arduinoの左上に二本の縦線が表示されます。

該当のソースコード

arduino

1#include <LiquidCrystal.h> 2LiquidCrystal lcd(13,12,11,10,9,8); 3 4 5void setup() { 6 // put your setup code here, to run once: 7 lcd.begin(16,2); 8 9lcd.clear(); 10 delay(2000); 11 12} 13 14void loop() { 15 char hi[13]="HellowWorld!"; 16 int p; 17 for(p=0; p<=16; p++){ 18 int a=13; 19 int r=0; 20 lcd.setCursor(r,0); 21 r++; 22 if(r>16){ 23 r=0; 24 } 25 lcd.print(hi[a]); 26 a--; 27 if(a<0){ 28 a=13; 29 } 30 delay(500); 31 } 32 33 34}

補足情報(FW/ツールのバージョンなど)

使用しているのはarduino nanoです。
配線に問題点はないと考えております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/01/09 14:51

しつもんはなんでしょうか
thkana

2021/01/10 00:10

配線は「絶対に」間違っていませんか? ショートや断線はありませんか?
mika9

2021/01/11 05:26

y_waiwai様 質問を明記せず申し訳ありません。修正させて頂きます。
mika9

2021/01/11 05:28

thkana様 ご指摘ありがとうございます。 他のプログラムでは問題なくlcdに文字を表示させることができていることから、配線の問題はないと考えております。
guest

回答2

0

多くの間違いがあるので、何をしたいのかが正確に読み取れません。
例えば

for(p=0; p<=16; p++) {

> int a=13; > int r=0; > lcd.setCursor(r,0); > r++;

は、lcd.setCursor(r,0);
の部分は直前にrを0にしているので
lcd.setCursor(0,0);
にするのと同じです。
ループごと数値を変えるなら
static int r=0;
が適当です。
また、r++となっているのでインクリメントしたいように思われますけど、
文字列をスクロールするのなら本来、読めるように左にスクロールします。
つまり、書き込み位置を買えるならr--が適当だと思います。

lcd.print(hi[a]);

だと、この「一文字」表示ですけど、これは想定通りなのでしょうか?

arduinoの左上に二本の縦線が表示

というのも、arduinoではなく、液晶画面ですよね?
現状では、深く追究することは止めておきます。

で、本来、どこからどこまで、またどちらにスクロールしたいのか・・・
また、変数が多くてわかりにくいと思います。

方法はいくつかあるでしょうけど、今回のに近い手法だと下記のような形です。

arduino

1 2void loop() { 3 char hi[13] = "HellowWorld!"; 4 for(int pos=16; pos>-13; pos--) { 5 lcd.clear(); 6 if(pos>=0) {//文字が現れて左端に着くまで 7 lcd.setCursor(pos, 0); 8 lcd.print(hi); 9 } else {//最後の消える部分 10 lcd.setCursor(0, 0); 11 lcd.print(&hi[-pos]); 12 } 13 delay(1000); 14 } 15} 16

他にも、固定した16文字分の表示用文字列を用意して、そこに毎回、表示させる状態に整形してから表示させる手法もよく見かけます。※スケッチは省きます。

もっとかんたんにするなら下記の手法です。
一度書き込んで、ハードのスクロール機能を使います。
いすれにしろ、多少はハード面(ドライバ)の事も知っておいたほうが良いです。

arduino

1 2 3void setup() { 4 lcd.begin(16, 2); 5 lcd.clear(); 6 lcd.setCursor(16, 0); 7 lcd.print("HellowWorld!"); 8} 9 10void loop() { 11 for(byte i=0; i<28; i++) {//全部 12 lcd.scrollDisplayLeft();//左スクロール 13 delay(1000); 14 } 15 lcd.home(); 16} 17

投稿2021/01/10 05:12

nac_tnk

総合スコア494

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

aやhi[a]、rが、どいういう値をとっているか、シリアルモニタに出力して、確認してはいかがでしょうか? 想定した値になっていますか?

最低限の修正という意味では、

c

1 for(p=0; p<=16; p++){ 2 int a=13; 3 int r=0;

c

1 int a=13; 2 int r=0; 3 for(p=0; p<=16; p++){

に変更でしょうか。

投稿2021/01/09 22:21

mkgt00

総合スコア165

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問