質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

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

Q&A

2回答

1510閲覧

Arudinoを使ったバーサライタについて

ganaha_cocoA

総合スコア4

Arduino

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

0グッド

0クリップ

投稿2020/01/10 08:47

編集2020/01/10 23:38

現在、Arduinoを使用してシリアルモニタから受け取った情報を傾斜センサを用いたバーサライタに表示させたいのですが肝心のLEDが点灯しない状態です。ハードの回路を正常だったのでソースに原因があると思うのですがコンパイルエラーは見られません。一体どこが原因なのでしょうか

Arudino

1byte bb1[8]; 2byte bb2[8]; 3byte bb3[8]; 4byte bb4[8]; 5byte bb5[8]; 6 7int kind; 8int km; 9long kct; 10int sn1; 11int sn2; 12int Tperiod; 13int date; 14 15int SensPin=2; 16int led1=3; 17int led2=4; 18int led3=5; 19int led4=6; 20int led5=7; 21int led6=8; 22int led7=9; 23int led8=10; 24 25void setup() 2627 pinMode(SensPin,INPUT_PULLUP); 28 pinMode(led1,OUTPUT); 29 pinMode(led2,OUTPUT); 30 pinMode(led3,OUTPUT); 31 pinMode(led4,OUTPUT); 32 pinMode(led5,OUTPUT); 33 pinMode(led6,OUTPUT); 34 pinMode(led7,OUTPUT); 35 pinMode(led8,OUTPUT); 36 37/* 文字パターン[A] */ 38bb1[0]=B00000000; 39bb1[1]=B00000000; 40bb1[2]=B00111111; 41bb1[3]=B01001000; 42bb1[4]=B10001000; 43bb1[5]=B01001000; 44bb1[6]=B00111111; 45bb1[7]=B00000000; 46/* 文字パターン[B] */ 47bb2[0]=B00000000; 48bb2[1]=B00000000; 49bb2[2]=B11111110; 50bb2[3]=B10010010; 51bb2[4]=B10010010; 52bb2[5]=B10010010; 53bb2[6]=B01101100; 54bb2[7]=B00000000; 55/* 文字パターン[C] */ 56bb3[0]=B00000000; 57bb3[1]=B00111100; 58bb3[2]=B01000010; 59bb3[3]=B10000001; 60bb3[4]=B10000001; 61bb3[5]=B10000001; 62bb3[6]=B01000010; 63bb3[7]=B00100100; 64/* 文字パターン[D] */ 65bb4[0]=B00000000; 66bb4[1]=B00000000; 67bb4[2]=B11111111; 68bb4[3]=B10000001; 69bb4[4]=B10000001; 70bb4[5]=B10000001; 71bb4[6]=B01000010; 72bb4[7]=B00111100; 73/* 文字パターン[E] */ 74bb5[0]=B00000000; 75bb5[1]=B11111110; 76bb5[2]=B10010010; 77bb5[3]=B10010010; 78bb5[4]=B10010010; 79bb5[5]=B10010010; 80bb5[6]=B10010010; 81bb5[7]=B10000010; 82 83km=7; 84 /*パターンの総コマ数 */ 85/* 配列bbをbyte型に宣言しているので,8bitしか入らない。 86 LEDの個数を9個以上に増やす場合は,int型に宣言を変更する */ 87kct=0; 88Tperiod=300; 89Serial.begin(9600); 90} 91 92void loop(){ 93 if(Serial.available() > 0){ 94 date=Serial.read(); 95 switch(date){ 96 case'a': 97 Serial.print("receive A"); 98 break; 99 case'b': 100 Serial.print("receive B"); 101 break; 102 case'c': 103 Serial.print("receive C"); 104 break; 105 case'd': 106 Serial.print("receive D"); 107 break; 108 case'e': 109 Serial.print("receive E"); 110 break; 111 112 } 113 } 114 115byte v;/*文字パターン作業変数*/ 116/*文字パターンの表示*/ 117 if (kind>0 && kind<=km && date=='a') 118 { /* 添え字が範囲内であることを確認した */ 119 v=bb1[kind]; /* 文字パターンを読み出して,*/ 120 hyoji(v); /*LEDに表示する */ 121 } 122 if (kind>0 && kind<=km && date=='b' ) 123 { /* 添え字が範囲内であることを確認した */ 124 v=bb2[kind]; /* 文字パターンを読み出して,*/ 125 hyoji(v); /*LEDに表示する */ 126 } 127 if (kind>0 && kind<=km && date=='c' ) 128 { /* 添え字が範囲内であることを確認した */ 129 v=bb3[kind]; /* 文字パターンを読み出して,*/ 130 hyoji(v); /*LEDに表示する */ 131 } 132 if (kind>0 && kind<=km && date=='d' ) 133 { /* 添え字が範囲内であることを確認した */ 134 v=bb4[kind]; /* 文字パターンを読み出して,*/ 135 hyoji(v); /*LEDに表示する */ 136 } 137 if (kind>0 && kind<=km && date=='e' ) 138 { /* 添え字が範囲内であることを確認した */ 139 v=bb5[kind]; /* 文字パターンを読み出して,*/ 140 hyoji(v); /*LEDに表示する */ 141 } 142 143 /*文字パターンの添え字kindを決める*/ 144if (kct < Tperiod/2) 145{ /* 行き(右から左)のときのみ表示*/ 146 kind=km - km*kct/(Tperiod/2); 147} 148else 149{ 150 /* 帰り(左から右)は消灯させるため,kindをありえない値に設定 */ 151 kind=km+99; 152} 153/*1ms遅らせる*/ 154delay(1); 155kct=kct+1; /*ループ回数をカウント*/ 156 157/*傾斜センサ*/ 158sn2=sn1; /*ひとつ古い値を退避する*/ 159sn1=digitalRead(SensPin); /*センサ入力*/ 160if(sn1 ==LOW && sn2 ==HIGH && kct>30 ) 161 { /*センサがHIGHからLOWに変わった。 162 kct>30の条件は,チャタリングによって 163 頻繁にLOW/HIGHが変化する現象を捨てるため */ 164 /* 周期Tperiodを測定*/ 165 Tperiod=kct; 166 167 /* Tperiodの上下限。想定される範囲内に周期Tperiodを押さえ込む */ 168 if (Tperiod>1000) Tperiod=1000; /*周期1s,周波数1Hzより早いだろう*/ 169 if (Tperiod<150) Tperiod=150; /*周期0.15s,周波数6.7Hzより遅いだろう*/ 170 /* ループカウンタkctを初期化*/ 171 kct=0; 172 } 173 174} 175void hyoji(byte v) /*文字パターンを8個のLEDに表示する*/ 176{ 177 178if((v &B00000001)==0)digitalWrite(led1,LOW);else digitalWrite(led1,HIGH); 179if((v &B00000010)==0)digitalWrite(led2,LOW);else digitalWrite(led2,HIGH); 180if((v &B00000100)==0)digitalWrite(led3,LOW);else digitalWrite(led3,HIGH); 181if((v &B00001000)==0)digitalWrite(led4,LOW);else digitalWrite(led4,HIGH); 182if((v &B00010000)==0)digitalWrite(led5,LOW);else digitalWrite(led5,HIGH); 183if((v &B00100000)==0)digitalWrite(led6,LOW);else digitalWrite(led6,HIGH); 184if((v &B01000000)==0)digitalWrite(led7,LOW);else digitalWrite(led7,HIGH); 185if((v &B10000000)==0)digitalWrite(led8,LOW);else digitalWrite(led8,HIGH); 186}

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

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

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

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

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

y_waiwai

2020/01/10 09:50

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答2

0

データに改行文字をつけて送ってたりとかしませんか。

それだと、例えば'A'と'\r'とか'\n'の改行文字が連続して送られるから、dateはほとんど改行文字になってて、date=='a'とかの条件はほとんど成立しない。

シリアルモニタなら一番下、[CRおよびLF]とかのリストボックスは[改行なし]になってますか?デフォルト設定がそれだから、結構あやしいなぁ。

投稿2020/01/11 12:52

thkana

総合スコア7639

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

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

0

とりあえず、LEDのポートに全部High、あるいはLowを出力させて、LEDが光るかどうか見てみればどうでしょう。

まずはそれから


その次は、特定の文字を受信したら特定のパターンでLEDをつけるようにしましょう
#センサは関係なく
それがしっかり動作することが確認できたら、次へ行けばいいです

投稿2020/01/10 11:36

編集2020/01/11 00:27
y_waiwai

総合スコア87774

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

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

ganaha_cocoA

2020/01/10 13:02

試してみたところLEDは正常に光りました LEDじたいに問題はなさそうでした
y_waiwai

2020/01/10 13:21

ならコードを見直してみよう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問