0

Arduino を使用して、プロジェクトの相撲ボットを作成しています。Arduino コードの経験はありませんが、Java の経験はあります。とはいえ、このボットには、落下を防ぐためのエッジ検出機能や、L298 ドライバーなどがあります。私の経験不足のため、Arduino のコードがメソッドなどでどのように機能するか正確にはわかりません。リターンのないメソッドでスタックしていますか? 入りませんか?実行は後で終了しますか?現在、スイッチをオンまたはオフにせずに、モーターを前進させるだけのようです。配線も確認しました。(質問が不十分で申し訳ありません-stackoverflow処女)。

int motor_forward = 10;
int motor_reverse = 9;
int motor2_forward = 13;
int motor2_reverse = 12;
int edgeDec1 = 7;
//int edgeDec2 = 6;

//the setup routine runs once when you press reset;
void setup(){
 //initialize the digital pin as an output.
 pinMode(motor_forward, OUTPUT);
 pinMode(motor_reverse,OUTPUT);
 pinMode(motor2_forward,OUTPUT);
 pinMode(motor2_reverse,OUTPUT);
 pinMode(edgeDec1,INPUT);

}
//the loop routine runs over and over again forever
void loop(){
  int indicator = random(2);

  delay(5000);//5 second delay
  //loop to prevent another 5 second delay
  while(true){
    if (indicator = 0){
      for(int x = 0; x < random(200); x++){
        Forward();
        EdgeDec();
        delay(10);
      }
    }
    else if ( indicator = 1){
       for(int x = 0; x < random(200); x++){
        TurnLeft();
        EdgeDec();
        delay(10);
      }
    }
     else if ( indicator = 2){
       for(int x = 0; x < random(200); x++){
        TurnRight();
        EdgeDec();
        delay(10);
      }
    }

  }

}
void Forward(){
  //right motor
  digitalWrite(motor_forward,1);//terminal d1 will be high
  digitalWrite(motor_reverse,0);//terminal d2 will be low

  //left motor
  digitalWrite(motor2_forward,1);//terminal d1 will be high
  digitalWrite(motor2_reverse,0);//terminal d2 will be low

}
//going in reverse
void Reverse(){
  //right motor
  digitalWrite(motor_forward,0);//terminal d1 will be low
  digitalWrite(motor_reverse,1);//terminal d2 will be high

  //left motor
  digitalWrite(motor2_forward,0);//terminal d1 will be low
  digitalWrite(motor2_reverse,1);//terminal d2 will be high

}
//rotating left
void TurnLeft(){
  //right motor
  digitalWrite(motor_forward,0);//terminal d1 will be high
  digitalWrite(motor_reverse,1);//terminal d2 will be low

  //left motor
  digitalWrite(motor2_forward,1);//terminal d1 will be high
  digitalWrite(motor2_reverse,0);//terminal d2 will be low

}
void TurnRight(){
  //right motor
  digitalWrite(motor_forward,1);//terminal d1 will be high
  digitalWrite(motor_reverse,0);//terminal d2 will be low

  //left motor
  digitalWrite(motor2_forward,0);//terminal d1 will be high
  digitalWrite(motor2_reverse,1);//terminal d2 will be low

}
void EdgeDec(){
  if(edgeDec1 == 1){
     Reverse();
     delay(700);
     TurnLeft();
     delay(1000);
     Forward();

    }
}
4

2 に答える 2

0

一般的に言えば、Arduinoのメソッドは、必要な遅延時間を補うのに十分なサイクルの間、CPU でdelayいくつかの s を実行するだけで実装されます。nopに渡された引数で指定された十分な時間、CPU を完全に使い果たすという点で、これは基本的にブロッキング呼び出しdelayです。

たとえば、プロセッサが 100hz で実行されているとします。基本的に 1 秒間遅延するにnopは、プロセッサが実行する 100 の命令を生成する必要があります。もちろん、このような命令には正確に 1 クロック サイクルかかると想定しています。Arduino Uno が ATMEGA328p マイクロプロセッサで動作することを考えると、そのデータシートを見て詳細を確認する必要があります。

于 2014-05-19T04:36:42.377 に答える