마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

외부에서 받은 값을 안드로이드 내에서 정수값으로 추출

0 추천

현재 아두이노라는 장치를 이용하여 압력센서를 연결한후 안드로이드에서 그 값을 받아 정수값으로 추출하는 작업을 하고있습니다.

 

현재 아두이노 코딩으로는

 

void setup(){
Serial.begin(9600);
}
 
void loop(){
int val;
int vol;
val = analogRead(0);
vol = analogRead(0);
Serial.println(val.DEC);
Serial.println(vol.DEC);
delay(100);
}
 
이렇게 코딩을 하였습니다.
 
원리는 아두이노 코딩에서 Serial.println 되는 값을 받아 프린트하는것이더군요
 
아래 코딩은 안드로이드 코딩입니다.
 
AndroidCommunicatorActivity.java



public void onCreate(Bundle savedInstanceState) {

    UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

        UsbDevice usbDevice = null;

        HashMap<String, UsbDevice> usbDeviceList = usbManager.getDeviceList();

        Iterator<UsbDevice> deviceIterator = usbDeviceList.values().iterator();

        super.onCreate(savedInstanceState);

        IntentFilter filter = new IntentFilter();

        filter.addAction(ArduinoCommunicatorService.DATA_RECEIVED_INTENT);

        filter.addAction(ArduinoCommunicatorService.DATA_SENT_INTERNAL_INTENT);

        registerReceiver(mReceiver, filter);//Print Arduino Data on screen

       mDataAdapter = new ArrayAdapter<ByteArray>(this, android.R.layout.simple_list_item_1, mTransferedDataList);        setListAdapter(mDataAdapter);        findDevice();

       

    }

    //Receive Arduino Data

    BroadcastReceiver mReceiver = new BroadcastReceiver() {

        private void handleTransferedData(Intent intent, boolean receiving) {

            if (mIsReceiving == null || mIsReceiving != receiving) {

                mIsReceiving = receiving;

                mTransferedDataList.add(new ByteArray());

            }

            final byte[] newTransferedData = intent.getByteArrayExtra(ArduinoCommunicatorService.DATA_EXTRA);

            ByteArray transferedData = mTransferedDataList.get(mTransferedDataList.size() - 1);

            transferedData.add(newTransferedData);

            mTransferedDataList.set(mTransferedDataList.size() - 1, transferedData);

            mDataAdapter.notifyDataSetChanged();

        }

        @Override

        public void onReceive(Context context, Intent intent) {

            final String action = intent.getAction();

            if (ArduinoCommunicatorService.DATA_RECEIVED_INTENT.equals(action)) {

                handleTransferedData(intent, true);

            } else if (ArduinoCommunicatorService.DATA_SENT_INTERNAL_INTENT.equals(action)) {

                handleTransferedData(intent, false);

            }

        }

    };

}

이렇게 입니다.

그냥 봤을때는 setListAdapter(mDataAdapter); 이 코딩이 Display 에 Data 값을 뿌려주겠구나 해서 봤는데..

(프로그래밍 초보다보니...)

여기서 나오는 숫자들을 int 값으로 뽑아내는게 난감하더군요 ㅠㅠ(어째 배열값에 들어가있는것같아서)

꼭좀 부탁드립니다.

 

dnflrkwhr888 (130 포인트) 님이 2013년 9월 26일 질문

1개의 답변

0 추천
혹시 지금 출력되는건 Byte값으로 출력되지 않나요?

 

BroadcastReceiver 부분에 Byte로 받은부분을 형변환 해보세요..
AndroidPark (900 포인트) 님이 2013년 9월 27일 답변
답변해주셔서 정말 감사드립니다.

현재
ByteBuffer buff = ByteBuffer.allocate(4);
            buff = ByteBuffer.wrap(newTransferedData);
            buff.order(ByteOrder.BIG_ENDIAN);
            
            B=buff.getInt();
위 코딩을 추가해 봤는데
B=buff.getInt();
에러가 나고있습니다.

아무레도 int 형으로 불러올수 없는것같은데 이럴땐 어떻게 해야하나요?

최소한 ArduinoCommunicatorService.DATA_EXTRA 가 어떤형태로 불려오는지라도 알고싶습니다 ㅠㅠ
...