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

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

ただいまの
回答率

88.59%

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

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 637

ganaha_cocoA

score 4

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

byte bb1[8];
byte bb2[8];
byte bb3[8];
byte bb4[8];
byte bb5[8];

int kind;
int km;
long kct;
int sn1;
int sn2;
int Tperiod;
int date;

int SensPin=2;
int led1=3;
int led2=4;
int led3=5;
int led4=6;
int led5=7;
int led6=8;
int led7=9;
int led8=10;

void setup()
{
 pinMode(SensPin,INPUT_PULLUP);
 pinMode(led1,OUTPUT);
 pinMode(led2,OUTPUT);
 pinMode(led3,OUTPUT);
 pinMode(led4,OUTPUT);
 pinMode(led5,OUTPUT);
 pinMode(led6,OUTPUT);
 pinMode(led7,OUTPUT);
 pinMode(led8,OUTPUT);

/* 文字パターン[A] */
bb1[0]=B00000000;
bb1[1]=B00000000;
bb1[2]=B00111111;
bb1[3]=B01001000;
bb1[4]=B10001000;
bb1[5]=B01001000;
bb1[6]=B00111111;
bb1[7]=B00000000;
/* 文字パターン[B] */
bb2[0]=B00000000;
bb2[1]=B00000000;
bb2[2]=B11111110;
bb2[3]=B10010010;
bb2[4]=B10010010;
bb2[5]=B10010010;
bb2[6]=B01101100;
bb2[7]=B00000000;
/* 文字パターン[C] */
bb3[0]=B00000000;
bb3[1]=B00111100;
bb3[2]=B01000010;
bb3[3]=B10000001;
bb3[4]=B10000001;
bb3[5]=B10000001;
bb3[6]=B01000010;
bb3[7]=B00100100;
/* 文字パターン[D] */
bb4[0]=B00000000;
bb4[1]=B00000000;
bb4[2]=B11111111;
bb4[3]=B10000001;
bb4[4]=B10000001;
bb4[5]=B10000001;
bb4[6]=B01000010;
bb4[7]=B00111100;
/* 文字パターン[E] */
bb5[0]=B00000000;
bb5[1]=B11111110;
bb5[2]=B10010010;
bb5[3]=B10010010;
bb5[4]=B10010010;
bb5[5]=B10010010;
bb5[6]=B10010010;
bb5[7]=B10000010;

km=7;
  /*パターンの総コマ数 */
/*  配列bbをbyte型に宣言しているので,8bitしか入らない。
    LEDの個数を9個以上に増やす場合は,int型に宣言を変更する */
kct=0;
Tperiod=300;
Serial.begin(9600);
}

void loop(){ 
  if(Serial.available() > 0){
    date=Serial.read();
    switch(date){
      case'a':
      Serial.print("receive A");
      break;
      case'b':
      Serial.print("receive B");
      break;
      case'c':
      Serial.print("receive C");
      break;
      case'd':
      Serial.print("receive D");
      break;
      case'e':
      Serial.print("receive E");
      break;

    }
  }

byte v;/*文字パターン作業変数*/
/*文字パターンの表示*/
 if (kind>0 && kind<=km && date=='a') 
  { /* 添え字が範囲内であることを確認した */
     v=bb1[kind];  /* 文字パターンを読み出して,*/
     hyoji(v);      /*LEDに表示する  */
  }
 if (kind>0 && kind<=km && date=='b' ) 
  { /* 添え字が範囲内であることを確認した */
     v=bb2[kind];  /* 文字パターンを読み出して,*/
     hyoji(v);      /*LEDに表示する  */
  }
 if (kind>0 && kind<=km && date=='c' ) 
  { /* 添え字が範囲内であることを確認した */
     v=bb3[kind];  /* 文字パターンを読み出して,*/
     hyoji(v);      /*LEDに表示する  */
  }
 if (kind>0 && kind<=km && date=='d' ) 
  { /* 添え字が範囲内であることを確認した */
     v=bb4[kind];  /* 文字パターンを読み出して,*/
     hyoji(v);      /*LEDに表示する  */
  }
   if (kind>0 && kind<=km && date=='e' ) 
  { /* 添え字が範囲内であることを確認した */
     v=bb5[kind];  /* 文字パターンを読み出して,*/
     hyoji(v);      /*LEDに表示する  */
  }

 /*文字パターンの添え字kindを決める*/
if (kct < Tperiod/2) 
{ /* 行き(右から左)のときのみ表示*/
  kind=km - km*kct/(Tperiod/2); 
} 
else 
{
 /* 帰り(左から右)は消灯させるため,kindをありえない値に設定 */
  kind=km+99; 
}
/*1ms遅らせる*/
delay(1);
kct=kct+1; /*ループ回数をカウント*/

/*傾斜センサ*/
sn2=sn1;  /*ひとつ古い値を退避する*/
sn1=digitalRead(SensPin); /*センサ入力*/
if(sn1 ==LOW  && sn2 ==HIGH  &&  kct>30 )
  {  /*センサがHIGHからLOWに変わった。
       kct>30の条件は,チャタリングによって
      頻繁にLOW/HIGHが変化する現象を捨てるため  */
   /* 周期Tperiodを測定*/
      Tperiod=kct;

   /* Tperiodの上下限。想定される範囲内に周期Tperiodを押さえ込む */
   if (Tperiod>1000) Tperiod=1000; /*周期1s,周波数1Hzより早いだろう*/
   if (Tperiod<150) Tperiod=150; /*周期0.15s,周波数6.7Hzより遅いだろう*/
   /* ループカウンタkctを初期化*/
     kct=0;
  }

}
void hyoji(byte v)  /*文字パターンを8個のLEDに表示する*/
{

if((v &B00000001)==0)digitalWrite(led1,LOW);else digitalWrite(led1,HIGH);
if((v &B00000010)==0)digitalWrite(led2,LOW);else digitalWrite(led2,HIGH);
if((v &B00000100)==0)digitalWrite(led3,LOW);else digitalWrite(led3,HIGH);
if((v &B00001000)==0)digitalWrite(led4,LOW);else digitalWrite(led4,HIGH);
if((v &B00010000)==0)digitalWrite(led5,LOW);else digitalWrite(led5,HIGH);
if((v &B00100000)==0)digitalWrite(led6,LOW);else digitalWrite(led6,HIGH);
if((v &B01000000)==0)digitalWrite(led7,LOW);else digitalWrite(led7,HIGH);
if((v &B10000000)==0)digitalWrite(led8,LOW);else digitalWrite(led8,HIGH);
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2020/01/10 18:50

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

    キャンセル

回答 2

0

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

まずはそれから


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/10 22:02

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

    キャンセル

  • 2020/01/10 22:21

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る