
Arduino初心者です。
さいきんArduinoを買ったので断念していた赤外線銃を作ろうと思ってネットの知識を寄せ集めこのようなプログラムを作りました(途中ですが。)
int State=0;
void setup() {
pinMode(2,INPUT) ; //スイッチに接続ピンをデジタル入力に設定
pinMode(8,OUTPUT) ;
pinMode(9,OUTPUT) ;//LEDに接続ピンをデジタル出力に設定
}
void loop() {{
State=digitalRead(6);
if (State==LOW){ //6ピンがLOWなら
unsigned long start = millis(); // 処理B開始時刻
while (millis() < start + 500) { // 0.5秒間=500ミリ秒経過するまで
digitalWrite(8,HIGH);
}
}else{
digitalWrite(8,LOW);
}
} //あたり判定
{
if (digitalRead(2) == HIGH) { //2ピンがhighなら
unsigned long start = millis(); // 処理B開始時刻
while (millis() < start + 100) { // 0.1秒間=100ミリ秒経過するまで
digitalWrite(9, HIGH); // ピンをONにする
delayMicroseconds(13); // 13マイクロ秒待つ
digitalWrite(9, LOW); // ピンをOFFにする
delayMicroseconds(13); // 13マイクロ秒待つ
}
}
}//赤外線LED
}
あたり判定と書いてあるうえの部分が赤外線受光部でしたが送信部です
赤外線銃なので連射を防止するために
if (digitalRead(2) == HIGH) { //2ピンがhighなら
unsigned long start = millis(); // 処理B開始時刻
while (millis() < start + 100) { // 0.1秒間=100ミリ秒経過するまで
digitalWrite(9, HIGH); // ピンをONにする
delayMicroseconds(13); // 13マイクロ秒待つ
digitalWrite(9, LOW); // ピンをOFFにする
delayMicroseconds(13); // 13マイクロ秒待つ
}
delay (1000); }
}//赤外線LED
}
と赤外線と書いた上にdelayを入れました。
すると受光部部分もdelayの影響を受けてしまいました。
解決する方法はないでしょうか?
No.1ベストアンサー
- 回答日時:
delay (1000)だと、その場で1秒間何もせずに止まりますからね。
動作を止めることなく発光後1秒間は発光させないようにしましょう。
最初に待ちフラグと待ち時間を用意します。
int WaitFlag = 0;
unsigned long WaitTime;
そして、赤外線LEDのトリガをウェイト状態であれば発光しないようにします。
if ((WaitFlag == 0) && ((digitalRead(2) == HIGH)) { //Wait状態でなく2ピンがhighなら
LED発光処理が終わればフラグを立てて時間を記録します
delayMicroseconds(13); // 13マイクロ秒待つ
}
WaitFlag = 1;
WaitTime = millis();
そしてloop内に一つの処理を追加します。
フラグが立って1秒以上経過していればフラグをクリアします。
if ((WaitFlag != 0) && (millis() - WaitTime >= 1000){
WaitFlag = 0;
}
--------------------------------------------------------------------
以下は蛇足です。
この1行はバグを含んでいます。
while (millis() < start + 100){
このように書き換えてください。
while (millis() - start < 100){
ま、バグが発生するまでに電源入れっぱなしで最低50日かかるんで実質的に問題ないんでしょうけど、将来的にそのようなアプリケーションを作った時にハマりますから、覚えておいて損は無いかと。
ありがとうございます!
しかし
int State=0;
int WaitFlag = 0;
unsigned long WaitTime;
void setup() {
中略
} //あたり判定
{
if ((WaitFlag == 0) && ((digitalRead(2) == HIGH)) { //Wait状態でなく2ピンがhighなら
unsigned long start = millis(); // 処理B開始時刻
while (millis() - start < 100) { // 0.1秒間=100ミリ秒経過するまで
digitalWrite(9, HIGH); // ピンをONにする
delayMicroseconds(13); // 13マイクロ秒待つ
digitalWrite(9, LOW); // ピンをOFFにする
delayMicroseconds(13); // 13マイクロ秒待つ
}
WaitFlag = 1;
WaitTime = millis();
}
}
if ((WaitFlag != 0) && (millis() - WaitTime >= 1000){
WaitFlag = 0;
}
}//赤外線LED
}
こう書き替えてみると
if ((WaitFlag == 0) && ((digitalRead(2) == HIGH)) { //Wait状態でなく2ピンがhighなら この行と
if ((WaitFlag != 0) && (millis() - WaitTime >= 1000){ この行に
exit status 1
expected ')' before '{' token
というエラーメッセージが出てしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 コードを書いたのですが上手く実行出来なかったです。どこが間違ってますか? 【作成したいもの】 1 2022/05/04 11:36
- C言語・C++・C# C言語 ① 5秒間 1秒間隔で点滅を繰り返す ② 3秒間 0.5秒間隔で点滅を繰り返す ①→②→①→ 5 2022/05/03 23:37
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- その他(コンピューター・テクノロジー) USBハブとPCとの通信状況について 2 2023/01/30 11:28
- 物理学 特殊相対性理論の時間の遅れについて。 この赤線の部分が分かりません。 なぜ光の速度が同じだと車の人は 3 2022/11/26 21:27
- ダイヤルアップ Raspberry Piでアナログモデム経由で音声再生 1 2022/05/20 18:01
- 車検・修理・メンテナンス Nissan ROUGE 2011年式のトランスミッションオイルの液量を確認しているのですが、このオ 2 2022/10/21 23:08
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
- 工学 分布定数回路に関して質問です。 電源と電球が二つの長さがLの銅線で繋ぐとする。 スイッチが電源の近く 5 2022/04/28 01:37
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
打ち上げで15人でボーリング行...
-
ETC混雑時はカードで切れる?
-
ボウリング。私はこれでうまく...
-
delayが干渉する・・
-
4人でボーリングをする場合、2...
-
はくしょん大魔王
-
ETCの普及効果として。。意見が...
-
教えて欲しいです ボウリングで...
-
AKB48 握手会イベント参加券に...
-
昨日隣のレーンで投げてた男性...
-
ボウリング場で出会いとか出来...
-
ボウリングについて
-
ボーリング場の利用方法
-
自宅にボウリングのレーンを作る。
-
ボウリングはストレートだけで...
-
ボウリングボール
-
昔のボーリングマイボールでは...
-
首都高の平井大橋出入口って一...
-
「ち」に濁点を打ちたいのです...
-
ボウリングを1人で練習したいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
打ち上げで15人でボーリング行...
-
首都高の平井大橋出入口って一...
-
4人でボーリングをする場合、2...
-
ボウリング場ってスタッフさん...
-
教えて欲しいです ボウリングで...
-
オイルが厚くて曲がらないとき...
-
自宅にボウリングのレーンを作る。
-
10人でボウリング2ゲームす...
-
ボウリング投球時の横方向の立...
-
ボウリングはストレートだけで...
-
ボウリング場で 2人でスコア対...
-
ボウリングの2ゲームの時間
-
schallerのストラップロックピ...
-
ボウリングでボールじゃなく人...
-
ボウリングで一番端のレーンで...
-
ボウリングボール
-
昔のボーリングマイボールでは...
-
ボウリングのレーンの長さ
-
ボウリングは必ずしも技術のあ...
-
ボーリング下手なんです・・・
おすすめ情報