#java #android #sensors #gpio
#Ява #Android #датчики #gpio
Вопрос:
Как использовать операторы if между двумя действиями с намерением? У меня есть два разных вида деятельности по сбору данных с внешних датчиков. Я хотел бы управлять некоторыми выводами GPIO Activity1
на основе значений датчиков Activity2
.
Мероприятие 1
public class RealTimeData extends AppCompatActivity { private static final String TAG = "sensor_data"; private static final String FRAGMENT_DIALOG = "dialog"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_real_time_data); Resources res = getResources(); GetAllResources(); OpenSerialPort(); } // Used to load the 'native-lib' library on application startup. static { System.loadLibrary("native-lib"); } private void GetAllResources() { pressure1 = (TextView) findViewById(R.id.pressure); temp1 = (TextView) findViewById(R.id.temperature); co2ppm1 = (TextView) findViewById(R.id.co2); humidity1 = (TextView) findViewById(R.id.humidity); pressure1data = (TextView) findViewById(R.id.pressureData); temp1data = (TextView) findViewById(R.id.temperatureData); co2ppm1data = (TextView) findViewById(R.id.co2Data); humidity1data = (TextView) findViewById(R.id.humidityData); } private sensorDataApplication sensordata = new sensorDataApplication(); private UartApplication[] mSerialport = {null, null}; private void SetValues() { TextView tv =(TextView) findViewById(R.id.pressureData); tv.setText(String.valueOf(sensordata.get_pressure_value(0))); tv =(TextView) findViewById(R.id.temperatureData); tv.setText(String.valueOf(sensordata.get_temperature_value(0))); tv =(TextView) findViewById(R.id.co2Data); tv.setText(String.valueOf(sensordata.get_co2_value(0))); tv =(TextView) findViewById(R.id.humidityData); tv.setText(String.valueOf(sensordata.get_humidity_value(0))); } private void OpenSerialPort() { new sensorDataApplication(); try { int i =0; for(String devicePath : Configs.uartdevicePath) { mSerialport[i] = new UartApplication(new File(devicePath), mReaderCallback); i ; } } catch (SecurityException e) { ErrorMessage.newInstance(getString(R.string.error_serial)) .show(getFragmentManager(), FRAGMENT_DIALOG); } catch (IOException e) { ErrorMessage.newInstance(getString(R.string.error_unknown)) .show(getFragmentManager(), FRAGMENT_DIALOG); } catch (InvalidParameterException e) { ErrorMessage.newInstance(getString(R.string.error_uart_config)) .show(getFragmentManager(), FRAGMENT_DIALOG); } } private final UartApplication.ReaderCallback mReaderCallback= new UartApplication.ReaderCallback() { @Override public void onDataReceived(final byte[] buffer, final int size) { runOnUiThread(new Runnable() { public void run() { if (pressure1 != null) { String received_str = new String(buffer, 0, size); //uartRx.append(received_str); sensordata.parse_and_update_sensordata(received_str); SetValues(); Log.e(TAG,"received packet " received_str); } } }); } }; TextWatcher mUartTxCallback = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if(max(start,before) lt; s.length()) { String changedStr = s.toString().substring(max(start, before), s.length()); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable var1) { } }; private void CloseSerialPort(int idx) { mSerialport[idx].closeSerialPort(); } private void WriteSerialPort(String writeString, int idx) { mSerialport[idx].writeData(writeString); } private static byte[] hexStringToByteArray(String s) { int len = s.length(); s.toUpperCase(); byte[] data = new byte[len / 2]; for (int i = 0; i lt; len; i = 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) lt;lt; 4) Character.digit(s.charAt(i 1), 16)); } return data; } private static String toHexString(byte[] ba) { StringBuilder str = new StringBuilder(); for (int i = 0; i lt; ba.length; i ) str.append(String.format("x", ba[i])); return str.toString().toUpperCase(); } private TextView pressure1; private TextView temp1; private TextView co2ppm1; private TextView humidity1; private TextView pressure1data; private TextView temp1data; private TextView co2ppm1data; private TextView humidity1data; }
Мероприятие 2
public class ManualControl extends AppCompatActivity { static { System.loadLibrary("native-lib"); } Listlt;gpioApplicationgt; mGPIO = new ArrayListlt;gt;(); private static final String FRAGMENT_DIALOG = "dialog"; private int[] mGPIOList = null; private CheckBox[] cbGPIO; private final gpioApplication.InterruptCallback mGPIOCallback = new gpioApplication.InterruptCallback() { @Override public void onDataReceived(final int GPIOnum, final int value) { runOnUiThread(new Runnable() { public void run() { //Do Nothing CheckBox cbnGPIO = GetCheckBoxGpio(GPIOnum); cbnGPIO.setOnCheckedChangeListener(null); if (cbnGPIO != null) cbnGPIO.setChecked(value gt; 0 ? true : false); cbnGPIO.setOnCheckedChangeListener(mGPIOCheckBoxCallback); } }); } }; private final CompoundButton.OnCheckedChangeListener mGPIOCheckBoxCallback = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { //do stuff int gpioID = Integer.parseInt(buttonView.getHint().toString()); int GPIOValue = buttonView.isChecked() == true ? 1 : 0; if (gpioID lt; mGPIOList.length) { gpioApplication gpio = mGPIO.get(gpioID); gpio.GPIOWrite(GPIOValue); } } }; private CheckBox GetCheckBoxGpio(int GPIOnum) { if (GPIOnum lt; mGPIOList.length) return cbGPIO[GPIOnum]; return null; } private void GetAllResources() { cbGPIO = new CheckBox[20]; cbGPIO[9] = (CheckBox) findViewById(R.id.checkBox_GPIO92); cbGPIO[0] = (CheckBox) findViewById(R.id.checkBox_GPIO16); cbGPIO[1] = (CheckBox) findViewById(R.id.checkBox_GPIO17); cbGPIO[6] = (CheckBox) findViewById(R.id.checkBox_GPIO69); cbGPIO[2] = (CheckBox) findViewById(R.id.checkBox_GPIO23); for (int i = 0; i lt; mGPIOList.length; i ) { if (i == 9 || i == 0 || i == 1 || i == 6 || i == 2) { GetCheckBoxGpio(i).setText(Integer.toString(mGPIOList[i])); GetCheckBoxGpio(i).setEnabled(true); } } } private final CompoundButton.OnCheckedChangeListener mIntCheckBoxCallback = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { //do stuff int gpioID = Integer.parseInt(buttonView.getHint().toString()); boolean IntValue = buttonView.isChecked(); if (gpioID lt; mGPIOList.length) { /*Use IntValue Re-configure GPIO Interrupt Here*/ mGPIO.get(gpioID).ConfigureInterrupt(IntValue); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_manual_control); try { mGPIOList = gpio_list; GetAllResources(); for (int i = 0; i lt; mGPIOList.length; i ) { GPIOOpen(i); } ConfigureCallbacks(); GetAllResources(); } catch (Exception e) { ErrorMessage.newInstance(e.getLocalizedMessage()) .show(getFragmentManager(), FRAGMENT_DIALOG); } } private void ConfigureCallbacks() { ConfigureGPIOCheckboxCallback(); } private void ConfigureGPIOCheckboxCallback() { for (int i = 0; i lt; mGPIOList.length; i ) { if (i == 9 || i == 0 || i == 1 || i == 6 || i == 2) { cbGPIO[i].setOnCheckedChangeListener(mGPIOCheckBoxCallback); } } } private void GPIOOpen(int GPIOnum) { if (GPIOnum == 9 || GPIOnum == 0 || GPIOnum == 1 || GPIOnum == 6 || GPIOnum == 2) { mGPIO.add(new gpioApplication()); try { mGPIO.get(GPIOnum).GPIOOpen(GPIOnum, mGPIOList[GPIOnum], mGPIOCallback); } catch (SecurityException e) { ErrorMessage.newInstance(getString(R.string.error_gpio)) .show(getFragmentManager(), FRAGMENT_DIALOG); } catch (IOException e) { ErrorMessage.newInstance(getString(R.string.error_unknown)) .show(getFragmentManager(), FRAGMENT_DIALOG); } catch (InvalidParameterException e) { ErrorMessage.newInstance(getString(R.string.error_gpio_config)) .show(getFragmentManager(), FRAGMENT_DIALOG); } } else { mGPIO.add(null); } } }
В приведенных выше кодах контакты GPIO должны управляться значениями датчика co2ppm 1 (если значение датчика co2ppm 1 превышает 2000, он должен включить вывод GPIO 9).
Комментарии:
1. Там очень много кода! Я полагаю, что вы опустите то, что не имеет отношения к проблеме, возможно, добавьте некоторые комментарии в области кода, с которым у вас возникли проблемы: как он ведет себя сейчас, чего вы пытаетесь достичь.
2. Рассмотрите возможность передачи данных с помощью другого действия
intent.putExtra
.