Как правильно составить цикл с разной паузой для команды ?
Добавлено: 29 авг 2015, 20:10
Мне нужно при нажатии кнопки, допустим button1 и button2 выполнять следующее:
При нажатии на button1
Отправлять следующие команды:
[syntax=java]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 сек[/syntax]
А при нажатии на кнопку button2 должны отправятся вот эти команды только в обратном порядке
[syntax=java]addCRC(new byte[]{1, 0x5, 0, 1 ,0, 0});
addCRC(new byte[]{1, 0x5, 1, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 2, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 3, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 4, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 5, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 6, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 7, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 8, 1 ,0, 0}); //5сек[/syntax]
С 9 по 1 с задержками
Вот рабочий пример при нажатии на кнопку который отправляет одну команду:
[syntax=java]bytesToSend = addCRC(new byte[]{0x1, 0x3, 0x0, 0x0 ,0x0, 0x0});
mPhysicaloid.write(bytesToSend, bytesToSend.length);[/syntax]
Как мне через [syntax=java]mPhysicaloid.write[/syntax] отправлять команды с задержкой после каждой команды (Время задержки указаны в комментариях) ?
И как можно это все красиво переделать чтобы не получался такой громоздкий и тупой код ?
Я думаю что это должно быть как то так:
[syntax=java]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 = addCRC(new byte[]{1, 0x5, 1, 5 ,0, 0});
// Тут как я догоняю должно быть то - что в зависимости от значение "i"
// будет присваивать новое значение таймеру TimeOut
mPhysicaloid.write(MyListComands, MyListComands.length);
}
} catch (InterruptedException ex) {
// тут хз что ;(
}
}
}.start();
}[/syntax]
Но эта работать не будет, а как сделать правильно и чтобы работало я так и не догнал ?
Хотя есть чувство что должно быть так: [syntax=java]public byte[][] MyListComands = new byte[11][8];[/syntax], а не так как сейчас
При нажатии на button1
Отправлять следующие команды:
[syntax=java]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 сек[/syntax]
А при нажатии на кнопку button2 должны отправятся вот эти команды только в обратном порядке
[syntax=java]addCRC(new byte[]{1, 0x5, 0, 1 ,0, 0});
addCRC(new byte[]{1, 0x5, 1, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 2, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 3, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 4, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 5, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 6, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 7, 1 ,0, 0}); //5сек
addCRC(new byte[]{1, 0x5, 8, 1 ,0, 0}); //5сек[/syntax]
С 9 по 1 с задержками
Вот рабочий пример при нажатии на кнопку который отправляет одну команду:
[syntax=java]bytesToSend = addCRC(new byte[]{0x1, 0x3, 0x0, 0x0 ,0x0, 0x0});
mPhysicaloid.write(bytesToSend, bytesToSend.length);[/syntax]
Как мне через [syntax=java]mPhysicaloid.write[/syntax] отправлять команды с задержкой после каждой команды (Время задержки указаны в комментариях) ?
И как можно это все красиво переделать чтобы не получался такой громоздкий и тупой код ?
Я думаю что это должно быть как то так:
[syntax=java]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 = addCRC(new byte[]{1, 0x5, 1, 5 ,0, 0});
// Тут как я догоняю должно быть то - что в зависимости от значение "i"
// будет присваивать новое значение таймеру TimeOut
mPhysicaloid.write(MyListComands, MyListComands.length);
}
} catch (InterruptedException ex) {
// тут хз что ;(
}
}
}.start();
}[/syntax]
Но эта работать не будет, а как сделать правильно и чтобы работало я так и не догнал ?
Хотя есть чувство что должно быть так: [syntax=java]public byte[][] MyListComands = new byte[11][8];[/syntax], а не так как сейчас