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

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

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

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

Q&A

2回答

2230閲覧

RaspberryPi Picoで常にボタンを押したことになっている

syuuu

総合スコア10

Arduino

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

0グッド

1クリップ

投稿2022/08/12 04:14

Arduino IDEで
TIMEボタンを長押しして
STARTボタンを押すと
長押しした時間が経つと
LEDが光るというタイマーのプログラムを作っています

しかしボタンを押さなくても
isStartはtrueになっていて、
押したら消えたり消えなかったりします

回路図

コード

arduino

1int LED=16; 2int START=13; 3int TIME=12; 4 5void setup() { 6 pinMode(LED,OUTPUT); 7 pinMode(START,INPUT); 8 pinMode(TIME,INPUT); 9} 10int time = 0; 11boolean start = false; 12void loop() { 13 if(digitalRead(START)) { 14 start = true; 15 } 16 if(start) { 17 if(time==0) { 18 digitalWrite(LED,HIGH); 19 delay(1000); 20 digitalWrite(LED,LOW); 21 delay(1000); 22 start = false; 23 } else { 24 time--; 25 } 26 } else { 27 if(digitalRead(TIME)) { 28 time++; 29 } 30 } 31}

Raspberry Pi Picoでやっています

なぜできないのでしょうか
よろしくお願いします

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

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

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

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

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

thkana

2022/08/12 21:47

なんか矢印っぽいからというだけで接地記号を「どこかへの接続」という意味に使っているのかと思いますが、(厳密にはいろいろありますが)接地はすなわちGNDです。敢えてGNDと書いてなくても。 その回路図は、GPIO12とか書いてあるのは無意味で、スイッチで電源をショートする、ということを記述しています。まぁ、「察し」はできますけれど。
nac_tnk

2022/08/15 01:13

基本、回路の問題ですけど、スケッチの方も良くないですよ。 (時間の概念が無い。→スケッチ的にインクリメントしていく時間とデクリメントしていく時間が異なる)
guest

回答2

2

ぱっと回路を見たところ、スイッチをプルアップもプルダウンもしていないようです。

まずは、この記事を参考にしてみてはいかがでしょう。
https://burariweb.info/electronic-work/arduino-learning/digital-input-pullup-pulldown.html

また、このあたりは基本事項ですし、他にもいろいろ知っておく必要のあることはあります。そういう知識を一通り得るには、入門書を一冊やってみるのがお勧めです。

投稿2022/08/12 05:06

TakaiY

総合スコア14291

sato, MasahikoHirata👍を押しています

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

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

syuuu

2022/08/12 11:11

内部プルアップでやってみましたが出来ませんでした
setoppu

2022/08/12 14:02

SW押下でVCCに接続なんですから、押されていない時はGNDに落とすプルダウンなんじゃないですか?
syuuu

2022/08/12 21:38

ArduinoIDEはプルアップしかできなかったので読み取るときはNOTしました
y_waiwai

2022/08/13 04:41

プルアップしかないんなら、スイッチはVCCにつなぐんじゃなくて、GNDにつなぎましょう
guest

0

小学校理科の豆電球実験レベルの「電池に繋がってれば点灯」の考えは適用されません。
高校物理の「オームの法則」あたりで複数の抵抗を接続してその両端電圧を求める...あたりのやり方を適用するところです。
以前ちょっと書いた説明があったので貼っておきます。PDFになっているのでテキストと原図?。


プルアップまたはプルダウン抵抗をオンにすると、I/Oピンが入力、または出力をハイインピーダンス
にしたときに外部からドライブされないピン電位をH(プルアップの場合)またはL(プルダウンの場合)
に固定することができます。
例えば、IOポートにスイッチを接続する場合など、単純にスイッチを電源との間に接続した場合、以
下左のような等価回路となります。

スイッチがオフの場合、マイコン内部は高抵抗(通常数メガΩ)で分圧されたような状態となり、電位が
定まりません。もしかしたらHかも知れないし、Lかも知れない。また、ノイズによって容易にH/L
が変わってしまったりします。このような場合に、右図のようにマイコン回路の抵抗より十分に低い
(数十~100KΩ程度)のプルダウン抵抗を追加すると、この抵抗によってInput pinのLレベルが確定
し、スイッチをオンすれば確実にHレベルになる、という回路を構成できます。

スイッチをGND側に接続し、プルアップ抵抗を併用して、スイッチがOFF時にInput pinがHレベ
ル、スイッチON時にLレベルとなるような構成も考えられます。スイッチへの配線に電源側の線を
引っ張らなくてもよい(ショート時などにトラブルが起こりにくい)ので、実用的にはこちらの方が多く
使われています。

以下画像貼り付け

PullUp/PullDown

投稿2022/08/12 22:04

thkana

総合スコア7733

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

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

syuuu

2022/08/12 23:02

すみませんつまりどういうことですか
thkana

2022/08/13 00:53 編集

質問の本題(スイッチを意図通り動作させること)に対しては、 --- あなたの配線は「良くない回路」なので、 案1: 外付け(あるなら内蔵でもいい)プルダウン抵抗を付けて適切な回路にする 案2: 極性を反転して、内蔵(外付けでもいいけれど)プルアップ抵抗を使用してスイッチでGNDに落とす回路にする --- などが解決策であるということ。 回路図(接地記号)については、 適切でないので以降適切な書き方をしましょう、 ということ。 どのへんがわかりにくくかったかを教えていただけると、今後文章を書くときの参考にできるので教えていただけますか。
syuuu

2022/08/13 03:40 編集

分からない言葉があったので質問しました 案1の外付けでプルダウンをやってみましたが出来ませんでした 案2のGNDに落とすとはどういうことですか
thkana

2022/08/13 05:04

> 出来ませんでした 問題解決の際には、できた/できなかったではなくて「何が起こった」かを観察し、説明する癖をつけたほうがいいです。 とりあえず、できるだけ単純化して int LED=25; //オンボードのLEDにしてみる int START=13; void setup() { pinMode(LED,OUTPUT); pinMode(START,INPUT_PULLDOWN); } void loop(){ int stat=digitalRead(START); digitalWrite(LED,stat); } としたとき、START SWの操作でなにが起こりますか? 私の手元ではSW ON/OFFでLED点灯/消灯しますが。 --- > GNDに落とす GNDにつなぐ、の意です。すみません、普段遣いしている言葉なのでつい勢いで。単電源の場合GNDが最低電位なので「落とす」と称することがしばしば。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問