Ви не увійшли.
Всем доброго вечера. Помогите пожайлуста с написания скетча для 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" для дальнейшего приминения его в скетче.
Неактивний
я бы немного подругому сделал с булеан
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)
Неактивний
Мне нужно перебрать 16 вариантов развития событий, когда на 4 датчиках будут логические 0 и 1
Неактивний
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: // значение когда нет препятствия
// ...
}
Мне нужно перебрать 16 вариантов развития событий, когда на 4 датчиках будут логические 0 и 1
Здесь все ваши 16 вариантов развития событий - раздельно.
Остання редакція Olej (2018-03-24 12:13:46)
Неактивний
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;
(единственно, нужно будет отладкой проверить значение, убедиться с приоритетами операций << и + , и, возможно, расставить скобки)
Неактивний
Извините за глупый вопрос, но куда вписовать IR1=0 && IR2=0 && IR3=0 && IR4=0? вместо "0" и "1".
Неактивний
Извините за глупый вопрос, но куда вписовать 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)
Неактивний
Спасибо Вам большое за помощь
Неактивний
Если честно то нет, выдает ошибку. Когда новый скетч создаешь то в "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)
Неактивний
Да Olej... Сразу чувствуется "специалист". Зато гонору, понтов, постов... Такой насоветует. Ну, ППЦ!
самое смешное что он практические код прописал )
осталось дописать что б собиралось
и имя переменной логичнее выбрал )
я рад что Olej по непоянтным мне причинам на форум аодуинщилков приперся ) , наверное иследование проводит ) либо издевается )
Неактивний
Если честно то нет, выдает ошибку. Когда новый скетч создаешь то в "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;
...
Неактивний
по непоянтным мне причинам на форум аодуинщилков приперся )
Я в другой совсем теме здесь рядом написал по какой причине - Доброго дня допоможіть скнопкою:
Меня лично Arduino интересует только как инструмент быстрого и простого в использовании интерфейса стандартного компьютера под управлением Linux к внешнему миру (это одно из удачных применений, которые я называл выше).
Неактивний
подарите проект Aleksandr15, работы там - всего ничего ) , он не справится, не его это разработка, а "девайсина" наверное очень нужна )
Я уже показал, дальше сам справится.
Неактивний
NoName пише:по непоянтным мне причинам на форум аодуинщилков приперся )
Я в другой совсем теме здесь рядом написал по какой причине - Доброго дня допоможіть скнопкою:
Меня лично Arduino интересует только как инструмент быстрого и простого в использовании интерфейса стандартного компьютера под управлением Linux к внешнему миру (это одно из удачных применений, которые я называл выше).
И вот ещё что: GPIO в Linux.
Я ещё когда отвечал вам не формулировал себе отчётливо, но ... "нюх - не пропьёшь!" : уже после написания сообщений в тему ко мне обратились из очень серьёзной конторы на тему "поговорить" о их проблемах и задачах в очень пересекающейся области.
Неактивний
Olej пише:NoName пише:по непоянтным мне причинам на форум аодуинщилков приперся )
Я в другой совсем теме здесь рядом написал по какой причине - Доброго дня допоможіть скнопкою:
Меня лично Arduino интересует только как инструмент быстрого и простого в использовании интерфейса стандартного компьютера под управлением Linux к внешнему миру (это одно из удачных применений, которые я называл выше).
И вот ещё что: GPIO в Linux.
Я ещё когда отвечал вам не формулировал себе отчётливо, но ... "нюх - не пропьёшь!" : уже после написания сообщений в тему ко мне обратились из очень серьёзной конторы на тему "поговорить" о их проблемах и задачах в очень пересекающейся области.
сами http://www.linuxfoundation.org/ обратились за помошью ?
Неактивний
Да, я просто новичек в этом, сам пока еще не разобрался.
Неактивний
Olej, помогите Aleksandr15, Вы много всякого написали ) но в ардуино основная фича - завершенный проект, то что написали подтверждает уровень ваших знаний - но без финиша в проекте - это ничтожно.
Вы отлично имя переменной подобрали, неплохо оформили -
покажите клас, допишите проект, и опубликуйте плс.
Olej я с никсами не очень, избегаю их , был любопытный шибко, много оборудования в детстве сломал )
Неактивний
Да, я просто новичек в этом, сам пока еще не разобрался.
Да какая ж вам ещё помощь нужна?
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)
Неактивний
Датчик обхода препятствий (четырёхканальный)
Неактивний