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

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

ただいまの
回答率

90.83%

  • Arduino

    458questions

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

delayを無くしたい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 477

msyk-23

score 1

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);
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • koronatail

    2017/01/12 19:29

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

    キャンセル

回答 1

0

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

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


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

unsigned long start_time = millis();
while(millis() < start_time + 1000){
  //なにもしない
}
servo.write(100)

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Arduinoにスピーカをつなぐとなんで音が鳴るんですか? 

    単純な質問かもしれませんが、音を出すために下記のようなコードを見つけました。 #define Sound 9 void setup() {  pinMode(Sound, OUTP

  • 受付中

    arduinoと温度センサ

    arduinoと温度センサ arduinoで温度センサを自作しようと考えています。 そこで、7セグLED温度センサのPICをarduinoで代用出来ないかと考えました。マイコン→A

  • 解決済

    fadeInのTime設定について

    今度はScriptの書き換えに手こずっています。 正方形の画像を2枚使用し 1枚を画像bとします 画像bは常にブラウザの画面 左上に固定 もう1枚は画像aとして ブラウザの外から

  • 受付中

    サーボモーターが動かない

    以下のプログラムを作成したのですがサーボモーターが動きません。逆運動学で角度を求めてその位置まで動いて元の位置に戻るプログラムを作りたいです。どこように改善したらよいでしょうか?回

  • 解決済

    acosの式が間違っている??

    逆運動学から角度を求めサーボモーターを動かすプログラムを作成したのですがpos=acosの値が正しく検出してもらえずサーボモーターが動きません。 ちなみにpos=90にすると動く

  • 受付中

    サーボモーターをループさせて動かしたい

    目標座標へ2つのサーボを動かし、元の座標地までもどして、また目標座標へサーボを動かしてを繰り返すプログラムを作りたいのですが目標座標へ動いて止まってしまいます。どのように改善したら

  • 解決済

    mbedでMP3モジュールへシリアル通信

    前提・実現したいこと mbedでGrove MP3モジュール v2へシリアル通信をして、 mp3を再生したいと思ってプログラミングをしているのですが、どのように信号を送ればいいのか

  • 解決済

    arduinoで無限ループしてしまう。

    Unity,arduinoでプログラミングをしています。 UnityからArduinoでシリアルデータを送り、ロボットを動かそうとしています。 Loop文の中で、While文でSe

同じタグがついた質問を見る

  • Arduino

    458questions

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