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

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

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

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

Q&A

1回答

9755閲覧

delayを無くしたい

msyk-23

総合スコア7

Arduino

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

0グッド

0クリップ

投稿2017/01/12 10:27

編集2022/01/12 10:55

9番ピンから命令としてサーボモーターに0度→90度→0度→90度と交互に動くプログラムを作成してみたのですがmillsを使っているのでdelayを無くしたプログラムに書き換えたいです。
分かるかたいらっしゃいましたらコメントで教えてください。

#include<Servo.h>
Servo servo;
long beforetime = 0;

void setup() {
servo.attach(9);
pinMode(9, OUTPUT);
}
void loop() {
if ((millis() - beforetime > 500)) {
beforetime = millis();
static boolean st=0;
digitalWrite(9,st^=1);
}
servo.write(100);
delay(1000);
servo.write(10);
delay(1000);
}

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

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

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

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

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

koronatail

2017/01/12 10:29

タグですが「Android」ではなく「Arduino」の間違いでは?
guest

回答1

0

タイマー割込みを使って、一定時間毎にservo.writeを行うか、
他に処理がないのであれば
whileの中でmillisを監視し、ループの開始から1000だけ値が増加するまでwhileを回し続ける、なんてのも手だと思います。

基本的に良手なのはタイマー割込みですが。Arduinoでは確かライブラリが必要になると思います。


ちょっとタイマー割込みのほうはぱっとかけないので、whileを使った例を示します。

C

1 2unsigned long start_time = millis(); 3while(millis() < start_time + 1000){ 4 //なにもしない 5} 6servo.write(100) 7

これで、whileがstart_timeから1000ms間回り続けてくれます。
なお、このプログラムはmillisのオーバーフローを考慮していないので、
millisがオーバーフローして0になるとwhileは無限ループに突入します。

投稿2017/01/26 12:44

編集2017/01/26 12:46
ElecDove

総合スコア254

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問