扣压机开发

控制器开发 · 2019/08/28 16:47
← 返回开发案例

此设计为客户委托开发,客户原来产品是传统的电器控制,为了跟上互联网时代,提出了用安卓来控制设备。首先是安卓负责系统的管理,将参数发送给单片机,单片机负责实时控制,并将当前设备状态返回给安卓屏。两者协同工作,确保了设备的正常。 由于QT和wince的逐步淘汰,安卓控制已经越来越被客户所采用。 但是安卓无法直接控制硬件,必须通过JNI接口来处理,JIN接口是安卓…

扣压机开发

此设计为客户委托开发,客户原来产品是传统的电器控制,为了跟上互联网时代,提出了用安卓来控制设备。首先是安卓负责系统的管理,将参数发送给单片机,单片机负责实时控制,并将当前设备状态返回给安卓屏。两者协同工作,确保了设备的正常。

由于QT和wince的逐步淘汰,安卓控制已经越来越被客户所采用。

但是安卓无法直接控制硬件,必须通过JNI接口来处理,JIN接口是安卓直接调用C++程序来

间接控制硬件,而C++程序是基于linux的应用程序。这里面有一套比较复杂的开发机制。

扣压机开发

以下为部分代码

package com.example.androidjnitest;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.ToggleButton;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class MainActivity extends AppCompatActivity {

TextView tv;

TextView bj;

TextView rcvdataDsp;//显示16进制数据

TextView mytext;//显示状态打印

Button motortest;

Button soundtest;

Button bjstate;

Button stm32temperature;

ToggleButton cameraPowerTest;

Button ledTest;

private Handler handler;

static public String mystr="aaa";

public SerialPortUtil mSerialPortUtil;

public DP5Test mDP5Test;

private int stm32temp;//stm32 温度

private boolean banji;

// Used to load the 'native-lib' library on application startup.

static {

System.loadLibrary("DP5Project");

}

public Handler getHandler(){

return this.handler;

}

@SuppressLint("HandlerLeak")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// Example of a call to a native method

initCserial();

test1();

rcvdataDsp=(TextView)findViewById(R.id.textView3);

tv = (TextView) findViewById(R.id.sample_text);

bj=(TextView)findViewById(R.id.textView2);

mytext=(TextView)findViewById(R.id.textView4);

bjstate=(Button) findViewById(R.id.button6);

motortest=(Button)findViewById(R.id.motorTest);

soundtest=(Button)findViewById(R.id.soundTest);

stm32temperature=(Button)findViewById(R.id.cputemperature);

cameraPowerTest=(ToggleButton) findViewById(R.id.campertest);

ledTest=(Button)findViewById(R.id.LEDarray) ;

// tv.setText(stringFromJNI());

// SerialPortUtil.ttt();

mSerialPortUtil = SerialPortUtil.getInstance();

mDP5Test=new DP5Test(this);

mDP5Test.SerialDp5(mSerialPortUtil);

mSerialPortUtil.setOnDataReceiveListener(new SerialPortUtil.OnDataReceiveListener() {

@Override

public void onDataReceive(final byte[] buffer, final int size) {

runOnUiThread(new Runnable() {

@Override

public void run() {

//将读取到的数据进行处理

rcvdataDsp.setText("读到了size:" + size + " \n\n " + bytes2String(buffer));

Toast.makeText(MainActivity.this,

"收到了size:" + size + "--" + new String(buffer) + "end",

Toast.LENGTH_LONG).show();

if((buffer[0]==(byte) 0xf6)&&(buffer[1]==(byte)0xfb))//扳机判断

{

if((buffer[2]==(byte)0x1)&&(buffer[3]==(byte)0x6)) {

if (buffer[6] == (byte) 0x1)

banji = true;

else

banji = false;

}

if((buffer[2]==(byte)0x1)&&(buffer[3]==(byte)0x7)) {

if (buffer[5] == (byte) 0x2)

{

stm32temp=buffer[6];

stm32temp<<=8;

stm32temp|=buffer[7];

mytext.setText("当前温度为:"+Double.toString(stm32temp/10.0));

}

}

}

if(banji==true)

bj.setText("扳机通");

else

bj.setText("扳机断开");

}

});

}

});

final Handler mHandler = new Handler(){

public void handleMessage(Message msg) {

tv.setText(mystr);

}

};

Thread displayreceiveData = new Thread(new Runnable() {

public void run() {

while(true) {

Message message = new Message();

mHandler.sendMessage(message);

try {

Thread.sleep(100);

}

catch (Exception e){};

}

}

});

displayreceiveData.start();

//声音测试

soundtest.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

mystr="sound test";

try {

mDP5Test.soundTestF();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

});

motortest.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

mystr="motor test";

try {

mDP5Test.motorTestF();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

});

//摄像头通断测试

cameraPowerTest.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

if(cameraPowerTest.isChecked()==true)

mystr="testing camera on/off";

else

mystr="";

try {

mDP5Test.sendTest_Camera();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

});

ledTest.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

mystr="testing LED";

try {

mDP5Test.LEDtestF();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

});

bjstate.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

mDP5Test.GetbajiStatus();

}

});

stm32temperature.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

mDP5Test.GetStm32Temperature();

}

});

}

public String bytes2String(byte[] data){

String getString = "";

for(int i = 0; i < data.length; i++){

getString += String.format("%02X", data[i]);

}

return getString;

}

public native void initCserial();

public native String stringFromJNI();

public native void test1();

}

联系工程师咨询此方案 ↗