Что нового

[Автоматизация] Датчик статуса. Циклы

Irlandec

Новичок
Сообщения
21
Репутация
0
Вопрос такой, наделал кучу датчиков для окружающей среды(например речь идет о боте, хотя код служит примером), насколько я понимаю SELECT проверяет лишь предыдущую строчку, а если мне надо чтобы обе строки Pixelsearch были проверены? может быть между ними поставить AND ?
Программист я никакой и просто не могу понять в каких ситуациях, какой цикл лучше применять. или на самом деле это не имеет никакой разницы?

Посмотрите пожалуйста на код и скажите, может быть я слишком его усложнил? Вопрос не в работоспособности, он работает, просто теперь я думаю как связать эту кучу датчиков, через какие циклы и т.д.

И повторю основной вопрос, можно ли ка кто прикрутить здесь проверку сразу 2 пикселей? насколько я знаю SELECT проверят лишь верность предыдущей строки?

Может быть сделать что-то типа

Pixelsearch(1,1,0x10239) + pixelsearch(1,1,0x47474) = 2
ведь пиксельсерч возвращает 1 в правильном случае?)) должно получиться 1+1=2 :smile:) или это бред?)
Код:
Func c_target()
While $c_target <= 5
  Sleep(50)
  PixelSearch(1594, 220, 1596, 222, 0xFFFFFF)
  PixelSearch(1594, 220, 1596, 222, 0xFFFFF1) 
   Select
	  Case NOT @error
		 $c_target = $c_target + 1
			ToolTip("Проверка пройдена, цель захвачена" & @CRLF & "Ok" & @CRLF & "$c_target = " & $c_target,25,35,"Датчик Захвата Цели",1,4)
			   sleep(500)
	  Case @error
		 $c_target = $c_target + 0
			ToolTip("Проверка НЕ пройдена, цель НЕ захвачена" & @CRLF & @CRLF & "$c_target = " & $c_target,25,35,"Датчик Захвата Цели",1,4)
			   sleep(500)
	  Case Else
		 $c_target = $c_target -1
			ToolTip("У Нас проблемы с системой целеуказания" & @CRLF  & @CRLF & "$c_target = " & $c_target,25,35,"Датчик Захвата Цели",1,4)
			   sleep(500)
   EndSelect
 sleep(2000)
 WEnd
EndFunc


И второй вопрос

А реально ли прикрутить какую то логику для кода, то есть идет например опрос датчиков, и по результатам этого опроса делаются соответствующие выводы, с помощью какого цикла лучше сделать опросник датчиков и вызов функций в соответствии с результатом опроса, может быть кто-то писал что-то подобное?

P.S. знаю что вопрос широкий, просто надеялся на пример хорошего кода логики "опрос-вычисление-действие" от постояльцев форума.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
1. Select проверяет не предыдущую строчку (в общем) а условие указанное в Case. в твоем случае, действительно, проверяется значение макро @error, а его установил последний PixelSearch, но если ты хочешь проверять оба условия на ошибки, то приравняй значения @error после каждого PixelSearch каким нибудь переменным и проверяй их значения внутри Case.
2. @error и Not @error - это два взаимоисключающих событий, поэтому один всегда сработает. стало быть условие которое в Case Else никогда не сработает. так, на заметку, если в той ветке выполняется что-то важное.
 
Автор
I

Irlandec

Новичок
Сообщения
21
Репутация
0
Kaster сказал(а):
1. Select проверяет не предыдущую строчку (в общем) а условие указанное в Case. в твоем случае, действительно, проверяется значение макро @error, а его установил последний PixelSearch, но если ты хочешь проверять оба условия на ошибки, то приравняй значения @error после каждого PixelSearch каким нибудь переменным и проверяй их значения внутри Case.
2. @error и Not @error - это два взаимоисключающих событий, поэтому один всегда сработает. стало быть условие которое в Case Else никогда не сработает. так, на заметку, если в той ветке выполняется что-то важное.
Else влеплен просто для других как бы результатов переменной, просто как задел на будущее.

На счет case не совсем понял..вроде)) то есть мне в Case тупо впихнуть

Код:
$1 = PixelSearch(1594, 220, 1596, 222, 0xFFFFFF)
$2 = PixelSearch(1594, 220, 1596, 222, 0xFFFFF1)
select
Case  $1 AND $2
msgbox("qwe")
endselect


Видимо так?

А есть возможность проверять например 10 датчиков одновременно? или это касается многопоточности, которая как я понял не поддерживается Autoit? Под одновременно я имею ввиду что... например чтобы запустилось 10 функций одновременно?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Irlandec [?]
то есть мне в Case тупо впихнуть
да, примерно так.
А есть возможность проверять например 10 датчиков одновременно?
конечно есть. таким же образом проверяешь 10 условий, а не 2.
или это касается многопоточности
нет, многопоточность тут не причем, и да, AutoIt ее не поддерживает (или нет, AutoIt ее не поддерживает? :scratch:), ну в общем ты понял.
например чтобы запустилось 10 функций одновременно?
как следствие вышесказанного, в AutoIt нельзя (без лишнего геморроя имеется в виду) запустить даже две функции одновременно. всегда одна функция за раз.
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
Irlandec [?]
пиксельсерч возвращает 1 в правильном случае?
Есть же справка - откройте и прочитайте.

Нет, не так. PixelSearch() возвращает массив или устанавливает @error. Варианты:
Код:
; Вариант 1
$1 = PixelSearch(1594, 220, 1596, 222, 0xFFFFFF)
$2 = PixelSearch(1594, 220, 1596, 222, 0xFFFFF1)
Select
  Case IsArray($1) And IsArray($2)
    MsgBox(0, "", "qwe")
EndSelect

; Вариант 2
PixelSearch(1594, 220, 1596, 222, 0xFFFFFF)
$error1 = @error
PixelSearch(1594, 220, 1596, 222, 0xFFFFF1)
$error2 = @error
Select
  Case Not ($error1 Or $error2)
    MsgBox(0, "", "qwe")
EndSelect
 
Автор
I

Irlandec

Новичок
Сообщения
21
Репутация
0
Kaster сказал(а):
например чтобы запустилось 10 функций одновременно?
как следствие вышесказанного, в AutoIt нельзя (без лишнего геморроя имеется в виду) запустить даже две функции одновременно. всегда одна функция за раз.
[/quote]
Спасибо за ответы.

InnI сказал(а):
Есть же справка - откройте и прочитайте.
Спасибо что про массив подсказали, потом бы опять сидел голову ломал, на счет справки, и того что pixelsearch возвращает 1, спутал с чем то наверное, посмотрел все переменные связанные с пикселями, ни одно вроде 1 не возвращает в случае успеха)), наверное я хотел спросить про саму конструкцию.

Вообщем спасибо, много вопросов отпало в ходе попытки задать вопросы ;D :rofl: :rofl: почему то когда пытаешься выложить нерабочий код на форум, и перед этим проверяешь в autoit он внезапно начинает работать :rofl: :stars:
 
Верх