1

私はArduinoを使い始めたばかりで、高度なものについてはほとんど何も考えていません。それはかなり簡単なようです。今、私は通常2つのデバイスを統合するのが好きなので、コンピューターのキーボードまたはArduinoボードに接続された2つのハードウェアプッシュボタンでサーボを制御できるかどうか疑問に思いました。

念のため、ArduinoUnoボードを使用しています。これが私が今のところサーボをスイープするために使用しているサンプルコードです

// Sweep
// by BARRAGAN <http://barraganstudio.com> 
// This example code is in the public domain.


#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
            // a maximum of eight servo objects can be created 

int pos = 0;    // variable to store the servo position 

void setup() 
{ 
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object 
} 


void loop() 
{ 
  for(pos = 0; pos < 45; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(10);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 45; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(10);                       // waits 15ms for the servo to reach the position 
  } 
}
  1. ここで、コンピューターのキーボードの左/右矢印キーを押してサーボの角度を変更したいとします。どうすればそれを行うことができますか?

  2. または、Arduinoに2つのプッシュボタンを取り付け、1つを押すと、ボタンに応じてサーボが左または右に移動します。ボタンをどのポートに接続しますか?コードサンプルや図は大いに役立ちます!

4

2 に答える 2

1

コンピューターに接続されたarduinoに接続されたサーボを移動するには、2つのコンポーネントが必要です。

キーボードコマンドを受け入れ、シリアルポートを介してarduinoにコマンドを送信するには、コンピューターにソフトウェアが必要です。単純なアプリは非常に簡単に記述できるため、PythonやJavaなどの言語を使用することをお勧めします。

Javaの使用例については、この遊び場のリンクを確認してください。そして、Pythonの例については、このプロジェクトをチェックしてください。

arduinoにはバグ/機能が組み込まれており、ここに進むと悲しみを覚えます。arduinoは、USB経由でシリアル接続が確立されたときに自動リセットするように設計されています。 このページには、問題の詳細な説明があり、問題に対処するためのいくつかの方法が引用されています。

シリアルポートをリッスンし、コンピューターから受信したコマンドに基づいてサーボの位置を調整するには、arduinoのスケッチを変更する必要があります。上記のPythonリンクを確認してください。これは、あなたがやろうとしていることと非常によく似た何かをするように設計された完全な(ハードウェア、PCソフトウェア、およびarduinoスケッチ)プロジェクトです。

どちらかのコンポーネントから始めて、それを実行することをお勧めします。問題が発生した場合は、コードを投稿してください。誰かが喜んでサポートしてくれます。

2番目の質問に関しては、arduinoにボタンを追加するのはかなり簡単です。それらをデジタル入力に接続します。ウェブ上には何百もの例があります。「arduinoにボタンを追加」を検索して、何が得られるかを確認してください。(笑... 130万ヒット)。ここでも、試してみて、詳細を投稿してください。

于 2012-06-03T08:58:13.660 に答える
0

シリアル通信用のパテ
は、クロスプラットフォームのシリアルおよびsshクライアントです。

左矢印コマンドと右矢印コマンドの場合:
矢印のASCII文字はありません:しかし、utf-8があります。
puttyまたは他のクライアントはutf-8文字を送信します。基本的なASCII文字はutf-8とasciiはまったく同じです。

arduinoはASCII文字のみを読み取ります。

arduinoの読み取り
->: 27、91、67
<-: 27、91、68

ですから、それを読むのはそれほど簡単ではありません。

あなたはこのようなものを使うことができます

int pos = 0;
Serial.flush(); // flush all received data
while(Serial.avaialble()<3); // wait for the 3 ascii chars
if(Serial.read()==27){ // first char
  if(Serial.read()==91){ //second char
    switch (Serial.read()){
      case 67: // Right arrow
        myservo.write(++pos); // increment pos with 1 before write it
        break;
      case 68: // left arrow
        myservo.write(--pos); // derement pos with 1 before write it
        break;
      case 65: // up arrow
        myservo.write(++pos); // increment pos with 1 before write it
        break;
      case 66: // down arrow
        myservo.write(--pos); // decrement pos with 1 before write it
        break;
      case default:
        break;
    }
  }
}

しかし、これは良い解決策ではありません。矢印の文字が3バイトで送信されるためです。フラッシュすると27がフラッシュされるため、91、97、27と表示されます。それは有効ではないので、は機能しません

5つのASCII文字から矢印コマンドを差し引くアルゴリズムを書くことができます

または、4を使用して左に移動し、6を使用して右に移動できます。これらはASCII文字であり、テンキーにはそれらのキーに描かれた矢印があります

于 2012-06-08T10:51:08.310 に答える