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

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

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

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

Q&A

解決済

3回答

3197閲覧

Arduinoであるピンの出力と別のピンの出力を同期させるにはどうすればいいですか?

aruarudino

総合スコア10

Arduino

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

0グッド

0クリップ

投稿2016/06/20 05:15

1番ピン及び2番ピンに書き込まれている信号をスイッチによって
切り替えながら5番ピンから出力したいのですが、うまくいきません。
どのようにすればよいでしょうか?
下はプログラムの一部です。

void loop() {
if(digitalRead(3) == HIGH && digitalRead(4) == HIGH)//3番ピンのクロック信号と4番ピンのスイッチ入力が両方HIGHの時にスイッチ切り替え
{
swi++;
if(swi>1)
{
swi=0;
}
}

while(swi==0) { digitalWrite(5) = digitalWrite(1); } while(swi==1) { digitalWrite(5) = digitalWrite(2); }

}

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

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

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

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

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

ozwk

2016/06/20 05:46

「うまくいきません」とはどういう状況ですか?
aruarudino

2016/06/20 05:52

digitalWrite(5) = digitalWrite(1);の部分でコンパイラエラーが出る状態です。
guest

回答3

0

質問のコードのloop関数の中の下記部分は、もしもswi==0の状態であったら上側のwhileが無限ループとなり、swi=1の状態であったら下側のwhileが無限ループとなります

while(swi==0) { digitalWrite(5) = digitalWrite(1); } while(swi==1) { digitalWrite(5) = digitalWrite(2); }

以下のように修正すると良いのではないでしょうか。
waiting()は、T.Kannoさんが指摘されたバタツキを抑えるために時間待ちをする関数です。

if(swi==0) { digitalWrite(5) = digitalWrite(1); waiting(); } else { digitalWrite(5) = digitalWrite(2); waiting(); }

投稿2016/06/20 08:12

coco_bauer

総合スコア6915

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

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

aruarudino

2016/06/21 06:45

exit status 1 'waiting' was not declared in this scope と出てきました...
coco_bauer

2016/06/21 07:26

waiting関数は標準ライブラリには入っていないので、自作してください。ループを何回か回すものなど多くの例が検索できると思います。
guest

0

ベストアンサー

このコードだと、loop 関数内の if で条件が成立している間、swi がバタつきませんか?

おそらく、条件成立時にバタつかないように、一度だけ処理するロジックが必要だと思います。

投稿2016/06/20 05:28

T.Kanno

総合スコア915

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

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

aruarudino

2016/06/20 05:51

バタつくとはswiの値が0と1で変化し続けるということでしょうか? 下のdigitalWrite(5) = digitalWrite(1);でエラーが出たのですが そちらもバタつきを直せば修正できるのでしょうか?
T.Kanno

2016/06/20 05:57

バタつくという表現はその通りです。 あと、エラーは、単純にコーディングミスでしょう。 たぶん、右辺が degitalWrite ではなくて degitalRead にしたいのじゃありませんか?
aruarudino

2016/06/20 06:43

バタつきはswi++の次にdelayを入れることで解決できたと思うのですが、 degitalRead()に変更してもエラーが治らないです。 そもそもの形が間違っているのでしょうか?
T.Kanno

2016/06/20 06:50

ちょっと調べてみたら digitalWrite (pin, value) みたいですね なので digitalWrite(5, digitalRead(1)); とかの書き方ですかね。 実機がないので、予想ですけど
guest

0

先ずは、
Arduino 日本語リファレンス
と、
Arduinoはやみ表(俗に云うところの、「チートシート」)
逆引きArduino
位は目を通して、慣れるまでは、チートシートは、
カラー印刷して手元に置いておいてください。

1.武蔵野電波:Arduino Wiki
http://www.musashinodenpa.com/wiki/
•日本語リファレンス
•日本語チュートリアル基礎編
•はやみ表 v1.2

2.逆引きArduino
http://garretlab.web.fc2.com/arduino/reverse_lookup/index.html

Arduino IDE のバージョン情報
Arduino のボード名(カード名)、
可能であればファームウェアが最新にしてあるか、購入時のままかなど。
は、重要な情報ですので、掲示するようにしてください。

投稿2016/06/20 07:00

daive

総合スコア2028

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

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

aruarudino

2016/06/21 07:05

わかりやすいサイトの掲示ありがとうございます。 バージョンは1.6.9、ボードはUNOでファームウェアは購入時のままだと思います。
daive

2016/06/21 10:35 編集

Arduino IDE はデバッグ機能が無いに等しいので、 (AVRStudio や VS2015 Arduino Ext:有料を使うとデバッグ環境は良くなります。) 1.LCD、キーパッドを付けていない場合は、   USB-COMをモニタ用に使います。   従って、Digital 0 / 1 は使えません。 2.Arduino serial モニタ で検索できる様な状態を作るのが、   準備です。サンプルスケッチを探してみてください。 3.次に、Digital 2 以降で、状態を取得できるように、   デジタルピン   http://www.musashinodenpa.com/arduino/ref/index.php?f=2&pos=83   を参考に設定して、プログラムして、   シリアルモニタで状態が取得できるようにします。 4.同様に、出力ピンを決めて(Digital 13 が UNOのLEDにつながっています。)   arduino led 13 点滅 で検索したり、   サンプルスケッチに、LED Blinkのサンプルがあるはずです。 不明な場合は、まずは、サンプルスケッチや、ネット検索してみてください。 シリアルモニタが可能になると、応用が効きますので、 なるべく覚えてください。 ※マイコン自体のピン番号と、Arduinoボードのピン番号は異なります。  Arduinoの形式によって、いろいろですので、注意してください。 ’ エレキジャック:Arduino の記事 なんでも作っちゃう、かも。:Arduino の記事 kimio kosaka arduino で、検索できる Arduinoの記事 (技術系の教育者の御様子ですので、旧コンテンツ含めて、  理解できると、かなり役にたちます。) 船田戦闘機さんの Arduinoの記事、他いろいろ参考になるサイトはあります。 ネット上の、Arduino のスケッチで、Ver 1.0 以前の物は、 そのままでは、動作しませんが、多少の変更で動作するものも多いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問