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

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

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

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

Q&A

解決済

2回答

2004閲覧

Arduinoを使い、一本のテープLEDを複数のタクトスイッチでそれぞれ違う光らせ方をやりたいです

kaitoma

総合スコア3

Arduino

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

0グッド

0クリップ

投稿2020/10/27 06:22

編集2020/10/27 08:01

前提・実現したいこと

一本のテープLEDを複数のタクトスイッチでそれぞれ違う光らせ方をやりたい

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

一つのタクトスイッチを何回も押してそれぞれ違う光らせ方はできますが、複数のタクトスイッチにそれぞれの光らせ方を入れるのができません。
使っているテープLEDはWS2812B 一本です。

該当のソースコード__イタリックテキスト__

ここに問題に対して試したことを記載してください。

スケッチ例から光り方は持ってきました。
光った後にテープを全部消すやり方が分からず、
無理やりつけたようなものがついています。すいません。

Arduino
const int switchPin = 2;
const int switchpinpin=3;

#define NUM_LEDS 144
#include "FastLED.h"
#define DATA_PIN 6
#define CLOCK_PIN 13
CRGB leds[NUM_LEDS];

unsigned long time;

//
void setup () {
pinMode(switchPin, INPUT);
pinMode(switchpinpin,INPUT);
Serial.begin(57600);
Serial.println("resetting");
LEDS.addLeds<WS2812,DATA_PIN,RGB>(leds,NUM_LEDS);
LEDS.setBrightness(100);
}
void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } }

//
void loop () {
if (HIGH, switchPin) {
static uint8_t hue = 0;
Serial.print("x");
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(hue++, 255, 255);
FastLED.show();
fadeall();
delay(10);
}
Serial.print("x");

for(int i = (NUM_LEDS)-1; i >= 0; i--) {
leds[i] = CHSV(hue++, 255, 255);
FastLED.show();
fadeall();
delay(10);
}

time = micros(); Serial.println(time); delay(1); // 1秒おきに送信 for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB( 0, 0, 0); FastLED.show(); delay(1); }

}
if (HIGH,switchpinpin) {
static uint8_t hue = 0;
Serial.print("x");
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(hue++, 255, 255);
FastLED.show();
fadeall();
delay(100);
}
for(int i = (NUM_LEDS)-1; i >= 0; i--) {
leds[i] = CHSV(hue++, 255, 255);
FastLED.show();
fadeall();
delay(100);
}

time = micros(); Serial.println(time); delay(1); // 1秒おきに送信 for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB( 0, 0, 0); FastLED.show(); delay(1); }

}

}

### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

ozwk

2020/10/27 06:23

やろうとしてできなかったコード貼ってください 質問は編集できます
ozwk

2020/10/27 06:35

質問文に書いてください
kaitoma

2020/10/27 06:39

すいません。直しました。
thkana

2020/10/27 06:53

タグは数撃ちゃ当たるというものではありません。Javaは全く関係ないので外して下さい。本質的に言語に依存する問題でもないので、CとC++も微妙です。
kaitoma

2020/10/27 06:55

すいません。ご指摘ありがとうございます。 初心者なのでそのような意見助かります。
guest

回答2

0

ベストアンサー

arduino

1void loop(){ 2 // switchpinがHIGHになるまで待つ 3 // switchpinの光り方 4 5 // switchpinpinがHIGHになるまで待つ 6 // switchpinpinの光り方 7}

という構造かと思いますが、単純には

arduino

1void loop(){ 2 if(HIGH になったのが switchpin) 3 // switchpin の光り方 4 if(HIGH になったのが switchpinpin) 5 // switchpinpin の光り方 6}

投稿2020/10/27 07:11

編集2020/10/27 07:20
ozwk

総合スコア13553

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

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

ozwk

2020/10/27 07:13

一方の光りかたをしている最中に他方のスイッチを押した場合に 即座に他方の光りかたに移りたいと言うのなら根本的に構造を変える必要があります。
kaitoma

2020/10/27 07:33

そのようなことはしません。 while (digitalRead(switchPin) == LOW) { ↓ if (digitalRead(switchPin) == HIGH) { に変更したのですが、勝手に光が流れてしまいました。
ozwk

2020/10/27 07:38 編集

質問文にコード追記してください ついでなのでコードは ```Arduino ここにコード ``` のように書いてください 編集中にプレビューが出ると思います。
ozwk

2020/10/27 07:40 編集

一応念の為ですが、 if(HIGH になったのが switchpin){} // switchpin の光り方 こうじゃなくて if(HIGH になったのが switchpin){ // switchpin の光り方 } こうですよ?
kaitoma

2020/10/27 07:54

変更しました しかし、勝手に光が流れてしまいます。
ozwk

2020/10/27 08:01

もともとのwhile()でやっていたようにdigitalRead()で判別してください
kaitoma

2020/10/27 08:05

できました。本当にありがとうございます。
guest

0

質問のプログラムは(スイッチをどの様に使っているかの情報は書かれていないので一部想像です)

スイッチ1が押されるまで待つ
点灯パターン1
(点灯終わったら)
スイッチ2が押されるまで待つ
点灯パターン2
(点灯終わったら、繰り返し)

になっているというのは把握していますか?

text

1スイッチ1が押されているのなら 2 点灯パターン1 3そうでなければ(スイッチ1が押されていなかったら) 4 スイッチ2が押されているのなら 5 点灯パターン2

という構成にすれば期待の動作になるのではないかと思われますがいかがですか。

投稿2020/10/27 07:16

thkana

総合スコア7703

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

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

thkana

2020/10/27 07:20

(考えることはほぼ一緒...)
kaitoma

2020/10/27 07:34

どのような言語を使えば良いですか?
thkana

2020/10/27 07:47

Arduino言語(C++をベースにしたArduino IDE用の言語)で書けばいいです。というか、それ以外はArduino IDEでは使えないので選択の余地はありません(インラインアセンブラとかは置いといて)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問