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

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

ただいまの
回答率

89.86%

arduinoで2つLEDをプッシュボタンを押して交互に点灯するプログラムについて

解決済

回答 2

投稿

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

KUMA90rider

score 1

赤いLEDを点灯時にプッシュスイッチを押すと赤いLEDが消灯し、青いLEDが点灯。
青いLEDを点灯時にプッシュスイッチを押すと青いLEDが消灯し、赤いLEDが点灯。
というプログラムを作って実行したのですが、後ろから7行目の
if (digitalRead(BUTTON) == LOW) { 
でexpected unqualified-id before 'if'というエラーが出てしまいます。問題にif文を消してもまた前のif文がエラー、前のif文がエラーと繰り返してしまい、よくわかりませんでした。どのように間違っているのか教えていただきたいです。
よろしくお願いします。

const int red_LED = 12;        // 赤LEDが接続されているピン
const int blue_LED = 10;       // 青LEDが接続されているピン
const int BUTTON = 7;  // プッシュボタンが接続されているピン

int LedState = LOW;
unsigned long preMillis = 0;
unsigned long interval = 100;//時間の設定

int counts = 0;//カウント回数の格納
int state = 0;//スイッチの状態
int c = 0;

void setup() {
pinMode(red_LED, OUTPUT);    // ArduinoにLEDが出力であると伝える
pinMode(blue_LED, OUTPUT);    
/*pinMode(green_LED, OUTPUT);  */
pinMode(BUTTON, INPUT);  // BUTTONは入力に設定
}
/*
Serial.begin(9600);
pinMode(7, INPUT) ; // 7ピンのスイッチをデジタル入力に設定します
pinMode(13, OUTPUT) ; // 13ピンのLEDをデジタル出力に設定します
}*/

void loop() {
unsigned long curMillis = millis();//"millis()"はマイコンが動き出してから現在までの経過時間をcurMillisに代入しています。
//ここからスイッチの状態をチェック
if (digitalRead(BUTTON) == LOW) { // 2ピンがLOWなら(スイッチが押されるとLOWになる)
state = 1;//スイッチが押れたことを記録する
}
//この処理を行わないとスイッチが押されている間ループ1回で1カウントしてしまう。
if (state == 1) {//スイッチが押れたと記録されていたら
if (digitalRead(BUTTON) == HIGH) { //スイッチが放されたら
counts = counts + 1;//カウントする
state = 0;//スイッチの状態をリセット
}
}

//LEDの操作
/*ここからの内容を書き換えることでオリジナルの回路設計ができる*/
if (counts == 0) { // countsが0なら
digitalWrite(red_LED,HIGH);
digitalWrite(blue_LED,LOW);
}
}

if (counts == 1) { // countsが1なら
digitalWrite(red_LED,LOW);
digitalWrite(blue_LED,HIGH);
}

if (counts == 2) { // countsが3なら
counts = 0;
}

//スイッチの状態、カウント数を確認するためのプログラム

if (digitalRead(BUTTON) == HIGH) {
c = 1;
}
if (digitalRead(BUTTON) == LOW) {
c = 0;
}
Serial.print(c);
Serial.print(" ");
Serial.println(counts);
}

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • y_waiwai

    2019/07/27 16:25

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

    キャンセル

回答 2

checkベストアンサー

0

if (counts == 1) { // countsが1なら
digitalWrite(red_LED,LOW);
digitalWrite(blue_LED,HIGH);

これ以降が関数の中に入ってません。
カッコの数を確認してみよう

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/07/27 17:08

    一つアドバイスですが、
    チャタリング処理、ってのでぐぐってみよう

    キャンセル

0

Arduino IDEでは、CTRLを押しながらtキーでソースの整形をしてくれます。そうすると

  //LEDの操作
  /*ここからの内容を書き換えることでオリジナルの回路設計ができる*/
  if (counts == 0) { // countsが0なら
    digitalWrite(red_LED, HIGH);
    digitalWrite(blue_LED, LOW);
  }
}

if (counts == 1) { // countsが1なら
  digitalWrite(red_LED, LOW);
  digitalWrite(blue_LED, HIGH);
}


if (counts == 1) {のアタマが1桁目から始まっていて、関数の定義でもないのにここに来るのはおかしい、というのが見つけやすくなります。
{}の対応がおかしい場合などはこれで大抵発見できるかと思いますので、習慣づけましょう。

その他いろいろ言いたいこともあるけれど...呑み込んで(チャタの件はy_waiwaiさんが指摘しているので)一つだけ。

スイッチが押されるとLOWになる

のなら、該当ピンについてはプルアップ抵抗がついていることを確認し、付いていないならばpinMode(BUTTON,INPUT_PULLUP);として内蔵プルアップ抵抗を使用して下さい。動作が不安定になることがあります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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