2013-06-02 1 views
1

Я начинаю работать с Sphero и Android, и я просматриваю примеры в SDK Sphero. Я успешно объединил примеры проектов ButtonDrive и Collisions, поэтому я fx. может заставить Sphero броситься в направлении и остановиться, когда он врывается во что-то. Но код для настройки асинхронного прослушивания данных меня озадачивает, и я не могу добавить код, необходимый для использования функций Locator, таких как getLocatorData. Может кто-нибудь дать мне код, мне нужно реализовать, так что я могу назвать «collisionData.hasImpactXAxis()» оба метода и «locatorData.getPositionX()»Получение данных локатора и столкновений в одно и то же время

ответ

0

Смотрите образец локатора на https://github.com/orbotix/Sphero-Android-SDK для получения более подробной информации, но общий практика является ...

private CollisionDetectedAsyncData collisionData; 
private LocatorData lastLocation; 

// setup general AsyncDataListener 
private final DeviceMessenger.AsyncDataListener mDataListener = new DeviceMessenger.AsyncDataListener() { 
    @Override 
    public void onDataReceived(DeviceAsyncData data) { 

     if(data instanceof DeviceSensorsAsyncData){ 
      //get the frames in the response 
      List<DeviceSensorsData> data_list = ((DeviceSensorsAsyncData)data).getAsyncData(); 
      if(data_list != null){ 

       // Iterate over each frame, however we set data streaming as only one frame 
       for(DeviceSensorsData datum : data_list){ 
        LocatorData locatorData = datum.getLocatorData(); 
        if(locatorData != null) { 
         lastLocation = locatorData; 
        } 
       } 
      } 
     } 

     if (data instanceof CollisionDetectedAsyncData) { 
      collisionData = (CollisionDetectedAsyncData) data; 
     } 

     // handle new data from collisions or locations 
    } 
}; 

private configureStreamingAndCollisions(){ 
    // hook up Locator 
    final long mask = SetDataStreamingCommand.DATA_STREAMING_MASK_LOCATOR_ALL; 
    final int divisor = 4; //100Hz 
    final int packet_frames = 1; 
    final int response_count = 0; 
    SetDataStreamingCommand.sendCommand((Robot)mRobot, divisor, packet_frames, mask, response_count); 
    DeviceMessenger.getInstance().addAsyncDataListener((Robot)mRobot, mDataListener); 

    // hook up Collision Listener 
    DeviceMessenger.getInstance().addAsyncDataListener((Robot)mRobot,mCollisionListener); 
    ConfigureCollisionDetectionCommand.sendCommand(mRobot, ConfigureCollisionDetectionCommand.DEFAULT_DETECTION_METHOD, 
          45, 45, 100, 100, 100); 
} 

Обратите внимание, что вам нужно переменный класс для отслеживания lastLocation или lastCollision ...

 Смежные вопросы

  • Нет связанных вопросов^_^