Задать вопрос

Как написать цикл с разной временной паузой для каждой команды — Android?

Есть кнопка при нажатии которой отправляется всего одна команда:
bytesToSend = addCRC(new byte[]{0x1, 0x3, 0x0, 0x0 ,0x0, 0x0}); // Команда статус
mPhysicaloid.write(bytesToSend, bytesToSend.length);
Не могу понять как мне написать цикл который будет отправлять все вот эти команды:
addCRC(new byte[]{1, 0x5, 11, 5 ,0, 0});    //10 сек
addCRC(new byte[]{1, 0x5, 11, 1 ,0, 0});    //0 сек
addCRC(new byte[]{1, 0x5, 0, 5 ,0, 0});      //30 сек
addCRC(new byte[]{1, 0x5, 1, 5 ,0, 0});      //5 сек
addCRC(new byte[]{1, 0x5, 2, 5 ,0, 0});      //5 сек
addCRC(new byte[]{1, 0x5, 3, 5 ,0, 0});      //5 сек
addCRC(new byte[]{1, 0x5, 4, 5 ,0, 0});      //5 сек
addCRC(new byte[]{1, 0x5, 5, 5 ,0, 0});      //5 сек
addCRC(new byte[]{1, 0x5, 6, 5 ,0, 0});      //5 сек
addCRC(new byte[]{1, 0x5, 7, 5 ,0, 0});      //5 сек
addCRC(new byte[]{1, 0x5, 8, 5 ,0, 0});      //5 сек

После каждой команды должна быть пауза (В комментариях указано), значение паузы для каждой команды будет хранится в переменой int

UPD: что то я совсем запутался с этими байтами и циклами:
Должно получатся типа как то так:
public byte[] MyListComands = new byte[11];

    public void onClickWrite(View v) { 
        new Thread() {
            @Override
            public void run() {
                int TimeOut = 0;
                try {
                    for (int i = 0; i <= 11;  i++, Thread.sleep(TimeOut)) {
                        MyListComands[i] = addCRC(new byte[]{1, 0x5, 1, 5 ,0, 0});
                        // Тут как я догоняю должно быть то - что в зависимости от значение "i"
                        // будет присваивать новое значение таймеру TimeOut
                        mPhysicaloid.write(MyListComands[i], MyListComands[i].length);
                    }
                } catch (InterruptedException ex) {
                // тут хз что ;(
                }
            }

        }.start();
    }
Но эта работать не будет, но как же всетаки это сделать ?
  • Вопрос задан
  • 308 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
enq3
@enq3
Android engineer at #ITX5
Как такой вариант? В коде могут быть ошибки - пишу с планшета.
byte[] mls = new byte[11];
mls[0] = addCRC(new byte[]{1, 0x5, 11, 5 ,0, 0});    //10 сек
mls[1] = addCRC(new byte[]{1, 0x5, 11, 1 ,0, 0});    //0 сек
mls[2] = addCRC(new byte[]{1, 0x5, 0, 5 ,0, 0});      //30 сек
mls[3] = addCRC(new byte[]{1, 0x5, 1, 5 ,0, 0});      //5 сек
mls[4] = addCRC(new byte[]{1, 0x5, 2, 5 ,0, 0});      //5 сек
mls[5] = addCRC(new byte[]{1, 0x5, 3, 5 ,0, 0});      //5 сек
mls[6] = addCRC(new byte[]{1, 0x5, 4, 5 ,0, 0});      //5 сек
mls[7] = addCRC(new byte[]{1, 0x5, 5, 5 ,0, 0});      //5 сек
mls[8] = addCRC(new byte[]{1, 0x5, 6, 5 ,0, 0});      //5 сек
mls[9] = addCRC(new byte[]{1, 0x5, 7, 5 ,0, 0});      //5 сек
mls[10] = addCRC(new byte[]{1, 0x5, 8, 5 ,0, 0});      //5 сек

public int[] delays = new int[11]{10,0,30,5,5,5,5,5,5,5,5};
int shift;
public void onClickWrite(View v) { 
    int len = mls.length;
    for (int i = 0; i < len;  i++) {
        shift += delays[i];
        new Handler(Looper.getMainLooper()).postDelayed( new Runnable() {
            public void run(){
                byte b = mls[i];
                mPhysicaloid.write(b, b.length);
            }
        }, shift);
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы