#1 2018-03-23 20:27:23

Aleksandr15
Учасник
Зареєстрований: 2018-03-23
Повідомлень: 8

infrared detector 4 channel

Всем доброго вечера. Помогите  пожайлуста с написания скетча для 4 канального инфракрасного датчика расстояния. Cуть задачи состоит в том, что бы присвоить значения "No_barrier"-когда не один датчик не срабатывает и "Yes_barrier"-когда хотя бы один из датчиков определил препятствия(16 вариантов событий). Датчики подключены к Аналоговым входам Arduino UNO R3. Расстояния выводим с помощью логической 1 и 0. Вот не правильный пример для наглядности(наброски)
int IR1 = A0;
int IR2 = A1;
int IR3 = A2;
int IR4 = A3;
int No_barrier; // задаем значения когда нет припятствия
int Yes_barrier; // задаем значения когда  припятствия
switch (No_barrier)
{
  case  IR1=1 && IR2=1 && IR3=1 && IR4=1 :
  break;
}
switch (Yes_barrier)
{
  case IR1=0 && IR2=0 && IR3=0 && IR4=0 : // варианты развития событий
  case IR1=0 && IR2=0 && IR3=0 && IR4=1 : // варианты развития событий
  case IR1=0 && IR2=0 && IR3=1 && IR4=1 : // варианты развития событий
  case IR1=0 && IR2=1 && IR3=1 && IR4=1 : // варианты развития событий
  case IR1=1 && IR2=0 && IR3=0 && IR4=0 : // варианты развития событий
  case IR1=1 && IR2=1 && IR3=0 && IR4=0 : // варианты развития событий
  case IR1=1 && IR2=1 && IR3=1 && IR4=0 : // варианты развития событий
  case IR1=1 && IR2=0 && IR3=0 && IR4=1 : // варианты развития событий
  case IR1=0 && IR2=1 && IR3=1 && IR4=0 : // варианты развития событий
break;

 
}
Помогите пожайлуста присвоить значения "Yes_barrier" и "No_barrier" для дальнейшего приминения его в скетче.

Неактивний

#2 2018-03-24 00:04:39

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: infrared detector 4 channel

я бы немного подругому сделал с булеан

int IR1 = A0; 
int IR2 = A1;
int IR3 = A2;
int IR4 = A3; 
bool barrier; // задаем значения когда нет припятствия 

if(IR1==0 && IR2==0 && IR3==0 && IR4==0)
{
  barrier = false;
}
else if(IR1 == 1 || IR2 == 1 || IR3 ==1 || IR4 == 1)
{
  barrier =true;
}

Остання редакція Selen (2018-03-24 00:11:38)

Неактивний

#3 2018-03-24 11:02:19

Aleksandr15
Учасник
Зареєстрований: 2018-03-23
Повідомлень: 8

Re: infrared detector 4 channel

Мне нужно перебрать 16 вариантов развития  событий, когда на 4 датчиках будут логические 0 и 1

Неактивний

#4 2018-03-24 11:13:21

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: infrared detector 4 channel

uint8_t status = 0x01|0x04;
switch ( status )
{
case 0x0:
case 0x1:
case 0x2:
case 0x3:
.
.
.
case 0xF:
}

Неактивний

#5 2018-03-24 12:10:34

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

Aleksandr15 пише:

Cуть задачи состоит в том, что бы присвоить значения "No_barrier"-когда не один датчик не срабатывает и "Yes_barrier"-когда хотя бы один из датчиков определил препятствия(16 вариантов событий). Датчики подключены к Аналоговым входам Arduino UNO R3. Расстояния выводим с помощью логической 1 и 0.
...
int IR1 = A0;
int IR2 = A1;
int IR3 = A2;
int IR4 = A3;

int arr[] = { A3, A2, A1, A0 }, state = 0;
for( int i = 0; i < 4; i++ )
   state = ( state << 1 ) + arr[ i ];
boolean No_barrier = state = 0xf;
boolean Yes_barrier = !No_barrier;
switch( state ) { // здесь вам 16 вариантов развития событий
  case 0:            // IR1=0 && IR2=0 && IR3=0 && IR4=0
     // ...
     break;
  case 1:            // IR1=1 && IR2=0 && IR3=0 && IR4=0
     // ...
     break;
  // ... и так далее: 2, 3, ...  до 15  
  default:           // значение когда нет препятствия   
     // ...
}    
Aleksandr15 пише:

Мне нужно перебрать 16 вариантов развития  событий, когда на 4 датчиках будут логические 0 и 1

Здесь все ваши 16 вариантов развития событий - раздельно.

Остання редакція Olej (2018-03-24 12:13:46)

Неактивний

#6 2018-03-24 12:28:05

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

Olej пише:
int arr[] = { A3, A2, A1, A0 }, state = 0;
for( int i = 0; i < 4; i++ )
   state = ( state << 1 ) + arr[ i ];
...

А можете сформировать state и проще, но менее наглядно:

int state = ( ( ( A3 << 1 ) + A2 ) << 1 + A1 ) << 1 + A0;

(единственно, нужно будет отладкой проверить значение, убедиться с приоритетами операций << и + , и, возможно, расставить скобки)

Неактивний

#7 2018-03-24 19:48:11

Aleksandr15
Учасник
Зареєстрований: 2018-03-23
Повідомлень: 8

Re: infrared detector 4 channel

Извините за глупый вопрос, но куда вписовать IR1=0 && IR2=0 && IR3=0 && IR4=0? вместо "0" и "1".

Неактивний

#8 2018-03-25 01:07:15

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

Aleksandr15 пише:

Извините за глупый вопрос, но куда вписовать IR1=0 && IR2=0 && IR3=0 && IR4=0? вместо "0" и "1".

Это к кому глупый вопрос адресован?

Кого на ком не стояло?

© М.Булгаков.

Если к моему предложению, относительно state ... то state - это побитовое отображение ваших IR1, IR2, IR3, IR4 ... только вывернутых наоборот IR4, IR3, IR2, IR1 ... хотя можете вывернуть в любом порядке. Ничего никуда не "вписывать"!
state => ...
0 => IR1=0 && IR2=0 && IR3=0 && IR4=0
1 => IR1=1 && IR2=0 && IR3=0 && IR4=0
2 => IR1=0 && IR2=1 && IR3=0 && IR4=0
3 => IR1=1 && IR2=1 && IR3=0 && IR4=0
4 => IR1=0 && IR2=0 && IR3=1 && IR4=0
5 => IR1=1 && IR2=0 && IR3=1 && IR4=0
6 => IR1=0 && IR2=1 && IR3=1 && IR4=0
7 => IR1=1 && IR2=1 && IR3=1 && IR4=0
8 => IR1=0 && IR2=0 && IR3=0 && IR4=1
... ну и так далее ... до:
15 => IR1=1 && IR2=1 && IR3=1 && IR4=1 - это когда нет препятствия вообще.

Остання редакція Olej (2018-03-25 01:08:32)

Неактивний

#9 2018-03-25 11:16:34

Aleksandr15
Учасник
Зареєстрований: 2018-03-23
Повідомлень: 8

Re: infrared detector 4 channel

Спасибо Вам большое за помощь

Неактивний

#10 2018-03-25 11:25:21

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

Aleksandr15 пише:

Спасибо Вам большое за помощь

Пожалуйста ... обращайтесь ещё. big_smile
Получилось?

Неактивний

#11 2018-03-26 19:17:44

Aleksandr15
Учасник
Зареєстрований: 2018-03-23
Повідомлень: 8

Re: infrared detector 4 channel

Если честно то нет, выдает ошибку. Когда новый скетч создаешь то в "case" ошибку выдает, если вставляешь в свой то в "For". Либо выдает другие ошибки в уже существующем скетче где не было ошибок.

int IR1 = A0; 
int IR2 = A1;
int IR3 = A2;
int IR4 = A3;
int arr[] = { A3, A2, A1, A0 }, state = 0;
void setup() {
  // put your setup code here, to run once:

}

void loop() {


for( int i = 0; i < 4; i++ ){
   state = ( state << 1 ) + arr[ i ];
boolean No_barrier = state = 0xf;
boolean Yes_barrier = !No_barrier;
switch( state ) { // здесь вам 16 вариантов развития событий
  case 0 
  IR1=0 && IR2=0 && IR3=0 && IR4=0:      
     
     break;
     
     case 1 
     IR1=1 && IR2=0 && IR3=0 && IR4=0:      
     
     break;
     case 2 
     IR1=0 && IR2=1 && IR3=0 && IR4=0:      
     
     break;
     case 3 
     IR1=1 && IR2=1 && IR3=0 && IR4=0:      
     
     break;
     case 4 
     IR1=0 && IR2=0 && IR3=1 && IR4=0:      
     
     break;
     case 5 
     IR1=1 && IR2=0 && IR3=1 && IR4=0:      
    
     break; 
     case 6 
     IR1=0 && IR2=1 && IR3=1 && IR4=0:      
     
     break; 
     case 7 
     IR1=1 && IR2=1 && IR3=1 && IR4=0:      

     break; 
     case 8 
     IR1=0 && IR2=0 && IR3=0 && IR4=1:      
     
     break;
      default 
    IR1=1 && IR2=1 && IR3=1 && IR4=1 :
}


}

Остання редакція Aleksandr15 (2018-03-26 19:38:35)

Неактивний

#12 2018-03-26 19:57:18

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: infrared detector 4 channel

Да Olej... Сразу чувствуется "специалист". Зато гонору, понтов, постов... Такой насоветует. Ну, ППЦ!

Неактивний

#13 2018-03-26 20:21:04

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: infrared detector 4 channel

Green пише:

Да Olej... Сразу чувствуется "специалист". Зато гонору, понтов, постов... Такой насоветует. Ну, ППЦ!

самое смешное  что он практические код прописал )
осталось дописать что б  собиралось
и имя переменной логичнее выбрал )

я рад что Olej  по непоянтным мне причинам на форум аодуинщилков приперся ) , наверное иследование проводит ) либо издевается )

Неактивний

#14 2018-03-26 21:16:18

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

Aleksandr15 пише:

Если честно то нет, выдает ошибку. Когда новый скетч создаешь то в "case" ошибку выдает
...

switch( state ) { // здесь вам 16 вариантов развития событий
  case 0 
  IR1=0 && IR2=0 && IR3=0 && IR4=0:      
     
     break;
     
     case 1 
     IR1=1 && IR2=0 && IR3=0 && IR4=0:      
     
     break;

Я вам принцип нарисовал, который проще не бывает ... а не код, который тупо нужно вставить в свой.
Что это у вас в case за ужас?

     IR1=1 && IR2=0 && IR3=0 && IR4=0:  

Я вам написал это комментарием, ещё и выделил синтаксически ограничителями комментария, чтобы показать, что значение 1 в case соответствует сочетанию ваших условий: IR1=1 && IR2=0 && IR3=0 && IR4=0.
А оставить вам нужно только:

switch( state ) { // здесь вам 16 вариантов развития событий
  case 0 
     // здесь пишете то что нужно делать при IR1=0 && IR2=0 && IR3=0 && IR4=0:      
     // ...
     break;
...

Неактивний

#15 2018-03-26 21:27:02

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

NoName пише:

по непоянтным мне причинам на форум аодуинщилков приперся )

Я в другой совсем теме здесь рядом написал по какой причине - Доброго дня допоможіть скнопкою:

Меня лично Arduino интересует только как инструмент быстрого и простого в использовании интерфейса стандартного компьютера под управлением Linux к внешнему миру (это одно из удачных применений, которые я называл выше).

Неактивний

#16 2018-03-26 21:44:48

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

NoName пише:

подарите проект Aleksandr15,  работы там - всего ничего ) , он не справится, не его это разработка, а "девайсина" наверное очень нужна )

Я уже показал, дальше сам справится.

Неактивний

#17 2018-03-27 10:22:23

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

Olej пише:
NoName пише:

по непоянтным мне причинам на форум аодуинщилков приперся )

Я в другой совсем теме здесь рядом написал по какой причине - Доброго дня допоможіть скнопкою:

Меня лично Arduino интересует только как инструмент быстрого и простого в использовании интерфейса стандартного компьютера под управлением Linux к внешнему миру (это одно из удачных применений, которые я называл выше).

И вот ещё что: GPIO в Linux.
Я ещё когда отвечал вам не формулировал себе отчётливо, но ... "нюх - не пропьёшь!" big_smile : уже после написания сообщений в тему ко мне обратились из очень серьёзной конторы на тему "поговорить" smile о их проблемах и задачах в очень пересекающейся области.

Неактивний

#18 2018-03-27 11:26:38

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: infrared detector 4 channel

Olej пише:
Olej пише:
NoName пише:

по непоянтным мне причинам на форум аодуинщилков приперся )

Я в другой совсем теме здесь рядом написал по какой причине - Доброго дня допоможіть скнопкою:

Меня лично Arduino интересует только как инструмент быстрого и простого в использовании интерфейса стандартного компьютера под управлением Linux к внешнему миру (это одно из удачных применений, которые я называл выше).

И вот ещё что: GPIO в Linux.
Я ещё когда отвечал вам не формулировал себе отчётливо, но ... "нюх - не пропьёшь!" big_smile : уже после написания сообщений в тему ко мне обратились из очень серьёзной конторы на тему "поговорить" smile о их проблемах и задачах в очень пересекающейся области.

сами http://www.linuxfoundation.org/  обратились за помошью ? big_smile

Неактивний

#19 2018-03-27 12:45:58

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: infrared detector 4 channel

относительно GPIO в Linux, это просто великолепно когда народ начинет думать и творить ) или просто творить, но для себя )
Aleksandr15, Вам нужна помощь в завершении  проекта?

Неактивний

#20 2018-03-27 15:53:09

Aleksandr15
Учасник
Зареєстрований: 2018-03-23
Повідомлень: 8

Re: infrared detector 4 channel

Да, я просто новичек в этом, сам пока еще не разобрался.

Неактивний

#21 2018-03-27 16:15:08

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

NoName пише:

сами http://www.linuxfoundation.org/  обратились за помошью ? big_smile

А это вы к чему написали? Да ещё с URL ... как большой знаток в этом деле. big_smile

Неактивний

#22 2018-03-27 16:23:46

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: infrared detector 4 channel

Olej, помогите  Aleksandr15, Вы много всякого написали ) но в ардуино основная фича - завершенный проект, то что написали подтверждает уровень ваших знаний - но без финиша в проекте - это ничтожно.

Вы отлично имя переменной подобрали,  неплохо оформили -
покажите клас, допишите проект, и опубликуйте плс.

Olej  я с никсами не очень, избегаю их , был любопытный шибко, много оборудования в детстве сломал )

Неактивний

#23 2018-03-27 16:42:50

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: infrared detector 4 channel

Aleksandr15 пише:

Да, я просто новичек в этом, сам пока еще не разобрался.

Да какая ж вам ещё помощь нужна?

switch( state ) { // здесь вам 16 вариантов развития событий
  case 0 : 
     // здесь вписываете то, что происходит при срабатывании A3, A2, A1, A0 (4 шт.)
     break;     
  case 1 : 
     // здесь вписываете то, что происходит при срабатывании A3, A2, A1 (3 шт.)
     break;
  case 2 :
     // здесь вписываете то, что происходит при срабатывании A3, A2, A0 (3 шт.)
     break;
  case 3 :
     // здесь вписываете то, что происходит при срабатывании A3, A2 (2 шт.)
     break;
  case 4 :
     // здесь вписываете то, что происходит при срабатывании A3, A1, A0 (3 шт.)
     break;
  case 5 :
     // здесь вписываете то, что происходит при срабатывании A3, A1 (2 шт.)
     // ...
     // ну и так далее - до 14
  case 14 :
     // здесь вписываете то, что происходит при срабатывании только A0 (1 шт.)
     break; 
  default : // а это для state == 15  
     // сюда вы попадёте если ничто не сработало!
}

Вы о двоичном представлении чисел знаете? имеете представление?
Вот возьмите, на листочке в клеточку, выпишете двоичные представления всех чисел от 0 до 15, и всё вам станет наглядно и понятно.
Вот так:

         A3 A2 A1 A0
 0 => 0   0   0   0
 1 => 0   0   0   1
 2 => 0   0   1   0
...
13 => 1   1   0   1
14 => 1   1   1   0
15 => 1   1   1   1 

Там где стоит 0 - это ваш сработавший датчик.

Остання редакція Olej (2018-03-27 16:44:16)

Неактивний

#24 2018-03-27 20:34:39

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: infrared detector 4 channel

Aleksandr15, какой датчик используете?

Неактивний

#25 2018-03-28 15:57:26

Aleksandr15
Учасник
Зареєстрований: 2018-03-23
Повідомлень: 8

Re: infrared detector 4 channel

Датчик обхода препятствий (четырёхканальный)
Infrared-Detector-4-Channel.jpg

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму