2016-06-14 4 views
1

Итак, я новичок в разработке Java и Android. Пока я создаю приложение, которое может подключаться и взаимодействовать с ардуином. У меня есть метод, который способен читать данные из arduino (в байтах), а затем печатать данные как строку в UTF-8 .... Однако я просто хочу, чтобы этот метод читал и интерпретировал данные, и интерпретируемые данные, подлежащие вызову от другого метода, например, кнопка от android. Ниже приведен код, который считывает данные.Разработка android с arduino

public class MainActivity extends AppCompatActivity { 
    public final String Action_USB_Permission = "com.example.myapplication.USB_PERMISSION"; 
    UsbManager usbManager; 
    UsbDevice device; 
    UsbSerialDevice serial; 
    UsbDeviceConnection connection; 
    String data; 
    String adata; 
    TextView textView; 
    Button tempButton 

    UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { 
     @Override 
     public void onReceivedData(byte[] arg0) { 
      try { 
       data = new String(arg0, "UTF-8"); //edit (removed String in "String data =") 


      } catch (UnsupportedEncodingException e) { 
       e.getStackTrace(); 
      } 
     } 
    }; 

    // Serial codes and commands 
    public void pushcmd(String command) { //command for serial 
     serial.write(command.getBytes()); 
    } 

    public void gettemp() { 
     pushcmd("T\n"); 
     serial.read(mCallback); 
     adata = data; 
    } 

    //This is for the app creation i think 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     usbManager = (UsbManager) getSystemService(this.USB_SERVICE); 
     tempButton = (Button) findViewById(R.id.buttontemp); 
    } 

    public void onClickTemp(View view) { //This is the command to print data 
     gettemp(); 
     tvAppend(textView, "\n Measured temperature \n" + adata); 
    } 

    private void tvAppend(TextView tv, CharSequence text) { 
     final TextView ftv = tv; 
     final CharSequence ftext = text; 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       ftv.append(ftext); 
      } 
     }); 
    } 
} 

tvAppend - это метод, который печатает строку в текстовом виде на экране. Я получил библиотеку из https://github.com/felHR85/UsbSerial, и он говорит просто ссылаться на него с

serial.read (mcallback), я попробовал команду, но я получаю «измеренное temperaturenull», то измерение будет печататься после, который из метод onReceivedData. Любые предложения были бы очень благодарны. Если я не знаю, дайте мне знать, я попытаюсь разобраться в чем-то еще.

Редактировать: Я добавил свой метод tvAppend, определил поле текстового поля и кнопку. Я также указываю, что у меня нет всей включенной программы, я следил за реализацией всех схем http://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/ Еще раз спасибо за отзыв

КОММЕНТАРИЙ О редактировании: когда код изменен на то, как он выше. адаты не отображаются, только «Измеренная температура».

+0

Попробуйте удалить '' String' из строковых данных = ' –

+0

Кроме того, вы, кажется, с отсутствующим полная часть создания [mcve]. Вам не хватает как переменной textView, так и метода tvAppend –

+0

@ cricket_007 Спасибо, что сообщили мне о том, что вы недостаточно ясны. Я также попытался удалить String из данных String = – robman

ответ

0

Я думаю, вы сбиваете с толку поток данных здесь.

  1. Вы нажимаете кнопку на приложение
  2. Он призывает pushcmd к Arduino
  3. На платформе Arduino посылает некоторые данные обратно в какой-то неизвестной точке в будущем
  4. Читаешь, что данные и обновить TextView

Теперь, с этой логикой, код может быть структурирован так. (Не стесняйтесь реорганизовывать обратно в свое приложение, как вы хотите).

public void onClickTemp(View view) { 
    gettemp(); 
    // No value of "adata" or "data" is guaranteed here 
} 

public void gettemp() { 
    pushcmd("T\n"); 
    serial.read(mCallback); // asynchronous callback 
    // No value of "adata" or "data" is guaranteed here, either 
} 

UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { 
    @Override 
    public void onReceivedData(byte[] arg0) { 
     try { 
      // Here, you are guaranteed some data 
      String data = new String(arg0, "UTF-8"); 
      tvAppend(textView, "\n Measured temperature \n" + data); 
     } catch (UnsupportedEncodingException e) { 
      e.getStackTrace(); 
     } 
    } 
}; 

Или, если вы хотите сбросить, что все в один метод, то

public void onClickTemp(View view) { 
    pushcmd("T\n"); 

    serial.read(new UsbSerialInterface.UsbReadCallback() { 
     @Override 
     public void onReceivedData(byte[] arg0) { 
      try { 
       // Here, you are guaranteed some data 
       String data = new String(arg0, "UTF-8"); 
       tvAppend(textView, "\n Measured temperature \n" + data); 
      } catch (UnsupportedEncodingException e) { 
       e.getStackTrace(); 
      } 
     } 
    }); 
} 
Смежные вопросы