2015-04-17 2 views
0

Я пытаюсь закодировать действие Android для чтения данных Arduino Duemilanove. Эта модель Arduino оснащена чипом FTDI 232RL. Я изучал последующие сайты и ответы:Чтение Android USB Arduino return 19600

  1. setting parity with controlTransfer method
  2. http://developer.android.com/reference/android/hardware/usb/UsbDeviceConnection.html
  3. http://read.pudn.com/downloads181/sourcecode/embed/842049/usb/serial/ftdi_sio.h__.htm и так далее ...

Мой код работает отлично для выполнения операции controlTransfer на устройстве USB Android. Но, на bulkTransfer возвращенные данные только 1 96 0 ... Я уже исправил скорость: Arduino серийный работает на 57600 и controlTransfer to. Следуйте кусок моего кода:

 if(device != null){    
     UsbDeviceConnection conn = usbManager.openDevice(device); 
     if (!conn.claimInterface(device.getInterface(0), true)) { 
      return; 
     } 
     //configuring the usb device: https://stackoverflow.com/questions/8546099/setting-parity-with-controltransfer-method 
     if(conn.controlTransfer(0x40, 0, 0, 0, null, 0, 0) < 0){//reset 
      Toast.makeText(getApplicationContext(), "Reset Fail", Toast.LENGTH_LONG).show(); 
     } 
     if(conn.controlTransfer(0x40, 0, 0x01, 0, null, 0, 0) < 0){//clear Rx 
      Toast.makeText(getApplicationContext(), "Clean RX Fail", Toast.LENGTH_LONG).show(); 
     } 
     if(conn.controlTransfer(0x40, 0, 0x02, 0, null, 0, 0) < 0){//clear Tx 
      Toast.makeText(getApplicationContext(), "Clean TX Fail", Toast.LENGTH_LONG).show(); 
     } 
     if(conn.controlTransfer(0x40, 0x02, 0x0000, 0, null, 0, 0) < 0){ //flow control none    
      Toast.makeText(getApplicationContext(), "Flow Control fail", Toast.LENGTH_LONG).show(); 
     } 
     if(conn.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0) < 0){//baudrate 57600 
      Toast.makeText(getApplicationContext(), "Baudrate fail", Toast.LENGTH_LONG).show(); 
     } 
     if(conn.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0) < 0){ //data bit 8 parity none stop bit 1 
      Toast.makeText(getApplicationContext(), "settings fail", Toast.LENGTH_LONG).show(); 
     }    

     Toast.makeText(getApplicationContext(), "Reading data...", Toast.LENGTH_LONG).show();    
     byte[] data = new byte[4096]; 
     if(conn.bulkTransfer(epIN, data, 4096, 5000) >= 0){ 
      StringBuilder builder = new StringBuilder(); 
      for (int i = 0; i < 8; i++) { 
       builder.append(data[i]); 
      }       
      Toast.makeText(getApplicationContext(), "Data: "+builder, Toast.LENGTH_LONG).show();    
      dispositivos.setText(builder); 
     }    

     /* 
     try{ 
      Thread.sleep(5000);      
     } 
     catch(InterruptedException e){ 
      e.printStackTrace(); 
      Toast.makeText(getApplicationContext(), "Error: "+e.getMessage(), Toast.LENGTH_LONG).show(); 
     }*/ 
    } 

есть кто-нибудь какой-то идеи или предложения?

Резервуары для помощи.

+0

Существует рабочий код сети для разговора с FTDI частью Android с интерфейсами USB-хоста - поиск и исследование некоторых из них в сравнении, вероятно, поможет вам решить эту проблему. Вам также нужно помнить о возможности того, что вы можете поговорить с загрузчиком, а не с вашей программой. –

+0

Спасибо @ChrisStratton ... =) Ты мне очень помог – t3rcio

ответ

1

Я нашел lib, который помог мне выполнить Android-связь с Arduino Duemilanove. Эта модель Arduino оснащена чипом FTDI (232R). Этот чип является интерфейсом USB UART. Затем я использую этот LIB:

Это помогло мне сделать связь между Android и Arduino простым способом, с несколькими строками кода.

Спасибо.

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