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

永利yl23411|官方网站|欢迎您

永利yl23411|官方网站
专注电子产品研发外包服务 基于客户要求的个性化设计

021-51360000
产品详情
分享到:

扣压机开发

 
产品详情

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

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


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

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


无标题2.jpg




以下为部分代码

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();
}


Baidu
sogou