Meta(Oculus)Quest のコントローラーの動きでロボットの手の動きを制御:ソースコード:RobotControl.ino

 
 //RobotControl.ino
 //copyright 2022 https://robot-creation-diary.com/
 
#include <Wire.h>                     // ライブラリのインクルード
#include <Adafruit_PWMServoDriver.h>
#include "ServoSupport.h" 
CServoSupport gServoSupport;
unsigned long g_time_data;
void setup() {
   Serial.begin( 115200 );     // シリアル通信を初期化する。通信速度は9600bps
  g_time_data = millis();

  Serial.println( "Hello Arduino!" );   // 最初に1回だけメッセージを表示する
  gServoSupport.SetSerialDataSize(24);
  gServoSupport.SetAllWeakness();
}
 
 void loop() {
  
   unsigned char key;     // 受信データを格納するchar型の変数
   int i;
//   static bool firstrecieved=false;
  // 受信データがあった時だけ、処理を行う
  if ( Serial.available() ) {       // 受信データがあるか?
    key = Serial.read();
    Serial.write( key );            // 1文字送信。受信データをそのまま送り返す。

    switch (gServoSupport.SetRecievedData(key)){
      
      case 1:
         Serial.println( "Start." );
      break;
      case 20:
         Serial.println( "sucsessd." );
         Serial.print( gServoSupport.GetRecievedDataSize(),DEC);

      break;
      case 21:
         Serial.println( "GetIndexData Out Of Range." );
         Serial.print( gServoSupport.GetRecievedDataSize(),DEC);
         break;

      case 22:
         Serial.println( "AddData Out Of Range." );
         break;

      case 23:
         Serial.println( "SetDataPosition Out Of Range." );
         break;

      case 24:
         Serial.println( "CheckError Data is small.");
         Serial.print( gServoSupport.GetRecievedDataSize(),DEC);
         break;

      case 25:
         Serial.println( "CheckError Deta size Error." );
         Serial.print( gServoSupport.GetRecievedDataSize(),DEC);
         break;

      case 26:
         Serial.println( "CheckError Start Flag Error." );
         break;

      case 27:
         Serial.println( "CheckError End Flag Error." );
         break;

      case 28:
         Serial.println( "__CheckChecksum  Data is small." );
         break;

      case 29:
         Serial.println( "__CheckChecksum Checksum Error." );
         break;
      
      default:
      break;
    }
    
  }else{
  }
  if (50 < millis() - g_time_data){
      //Serial.println( "Serial Not Available." );
    g_time_data = millis();
    gServoSupport.SetSerovoData();
    
  }else{
 
  }

 
}