Симферопольский Форум: Нужна помощь по скетчу - Симферопольский Форум

Перейти к содержимому

Внимание! Для всех новых пользователей введена премодерация сообщений и тем.
  • (5 Страниц)
  • +
  • 1
  • 2
  • 3
  • 4
  • 5
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Нужна помощь по скетчу arduino

#41 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 25 марта 2017 - 21:15

Массив заполнится, чай не бассейн с трубами :)
Т.е. изначально устанавливаем итог в true, и если вдруг в массиве находится значение "0" - итог=0.
Попробую, спасибо.

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#42 Пользователь офлайн   CIBAS 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 4 119
  • Регистрация: 07 июля 15
  • ГородСимферополь
  • Страна:  

Отправлено 25 марта 2017 - 21:16

Универсальный вариант - это в любом случае
анализ всех элементов текущей строки.
Тогда такой вариант в терминах C
для строки i массива array[N][M]

result=1;
for j=0;j<M;j++)
{
if(array[i][j] == 0) {result=0; break;}
}

Т.е цикл просмотра строки прекращается при появлении
первого же элемента false, в противном случае цикл проходит
всю строку и результат остаётся true.

Вариант, предлагаемый ранее, работать будет только если гарантированно
заполняется весь массив и его анализ производится только после заполнения.
Зато не нужно дополнительных проходов по строкам.

Сообщение отредактировал CIBAS: 25 марта 2017 - 21:19


Поблагодарили: 1

#43 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 25 марта 2017 - 21:30

Спасибо. Настрою аппаратную часть и вывод в serial, посмотрю, как работать будет.
for (activeChannel = 0; activeChannel < channels; activeChannel ++)  //выбираем канал
        {
         CLOSE[activeChannel][checks] = 1;                                  //предварительно устанавливаем итог в TRUE
         for  (int check = 0; check <= (checks-1); check++)                     //начинаем измерять
          {           
           Measure(activeChannel);
           CLOSE[activeChannel][check] = distance[activeChannel]<RANGE1 && distance[activeChannel]>1;
           if (CLOSE[activeChannel][check] == 0)                            //при получении первого значения FALSE 
            {
           CLOSE[activeChannel][checks] = 0;                                //устанавливаем итог в FALSE
           break;                                                           //и прекращаем измерения до следующего цикла 
            }
          }          
        }

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#44 Пользователь офлайн   SlavaD 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Технический администратор
  • Сообщений: 1 372
  • Регистрация: 16 сентября 10
  • Страна:  

Отправлено 30 марта 2017 - 21:47

А зачем вообще двумерный массив ? Сделать его одномерным и упростить код.

for (activeChannel = 1; activeChannel <= channels; activeChannel ++)
{
         CLOSE[activeChannel] = 1;
         for  (int check = 1; check <= checks; check++)
         { 
            Measure(activeChannel);
            if (distance[activeChannel]<RANGE1 && distance[activeChannel]<=1)
            {
               CLOSE[activeChannel] = 0;
               break;
            }
         }
}


#45 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 02 апреля 2017 - 11:58

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

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#46 Пользователь офлайн   SlavaD 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Технический администратор
  • Сообщений: 1 372
  • Регистрация: 16 сентября 10
  • Страна:  

Отправлено 03 апреля 2017 - 15:08

Ну тут на живую проще, если нужна помощь, можете закинуть изделие, попробую скетч сделать под задачу.


#47 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 03 апреля 2017 - 16:19

Спасибо, предыдущий вариант вполне удовлетворяет.
Хотел попробовать новым путем, да с возможностью легкого масштабирования.
Залил "боевой" скетч, собрал коробку уже не на макетке, все работает.
Через время добавлю еще пару функций.
Жаль, толковых дальномеров с ценой не 100$ на 6 метров не добыть. Сонар в коридоре с мебелью косячит сильно.

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#48 Пользователь офлайн   CIBAS 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 4 119
  • Регистрация: 07 июля 15
  • ГородСимферополь
  • Страна:  

Отправлено 03 апреля 2017 - 16:55

Лазерные дальномеры (в виде готового изделия) на 20-60 м с точностью 2 мм - 20 - 40 $


#49 Пользователь офлайн   SlavaD 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Технический администратор
  • Сообщений: 1 372
  • Регистрация: 16 сентября 10
  • Страна:  

Отправлено 03 апреля 2017 - 17:04

Ну или всетаки допиливать скетч, для фильтрации или пробовать другие датчики, например взять за основу ИК.

https://hz.ru.aliexp...208.8.29.SkWxt0

Или такой:
https://hz.ru.aliexp...208.8.59.SkWxt0


#50 Пользователь офлайн   CIBAS 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 4 119
  • Регистрация: 07 июля 15
  • ГородСимферополь
  • Страна:  

Отправлено 03 апреля 2017 - 17:08

Допплеровский сенсор на таких расстояниях вполне прилично работает (есть на 2.7 ГГц и на 5.8 ГГц).
Что касается простейшего ультразвукового - просто нужно применять самописный алгоритм обработки
и калибровку (достаточно простейшей по 2 точкам).


#51 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 03 апреля 2017 - 18:43

Просмотр сообщенияCIBAS сказал:

Лазерные дальномеры (в виде готового изделия)

Готовые изделия курочить, извлекать собственно модуль, разбираться в протоколе передачи данных - не, не настолько надо.
Сейчас на одном канале трудится HC-SR501 в связке с HC-SR04, на втором - один HC-SR04. + датчик освещенности на ардуине.
Исполнитель - 4-канальное реле, 2 канала нагружены ночной подсветкой разных зон коридора, 2 канала свободны.
На один думаю повесить свет в чулан, на второй - вентиляцию в ванной.

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#52 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 03 апреля 2017 - 18:44

Просмотр сообщенияCIBAS сказал:

Допплеровский сенсор на таких расстояниях вполне прилично работает

Тут нужен будет именно дальномер, ибо дистанция содержит 3 разных изолированных зоны срабатывания.

"самописный алгоритм обработки" не изменит факта сложного эха от стен и мебели.
В "паспортных" условиях HC-SR04 до 4 метров меряет, мне бы одного хватило, но геометрия помещения вносит свои поправки.

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#53 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 03 апреля 2017 - 18:48

SlavaD, скетч допилен в целом, просто хотел "красоту" навести.
По рабочим характеристикам корявый оказался надежнее элегантного.
Скрытый текст

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#54 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 31 июля 2018 - 22:25

Доброго времени, кому не спится.
Новая задача.
Имеем два массива: названия кнопок/команд и коды этих команд (ИК пульты)
Задача - найти в массиве поступившие данные, выдать нагорА адрес ячейки, во втором массиве найти соответствующее значение и передать в терминал/ик-излучатель.
char* codeNames[]={"Vol_Up","Vol_Down","Mute","PC/Aux","Opt/Cox"};
char* codes[]={"1E70807F","1E7040BF","1E70906F","1E7000FF","1E70C03F"};

Как пример. Коды есть возможность пересчитать в любой кодировке.
Через switch(results.value){ case ....} делать муторно - 3 пульта, почти сотня кнопок.

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#55 Пользователь офлайн   Neinsager 

  • –· ·– ···· ··– ·––– ··––··
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Модераторы
  • Сообщений: 21 481
  • Регистрация: 15 сентября 10

Отправлено 01 августа 2018 - 00:42

MedicusAmicus
Ну циклом, думаю, проще всего будет:

char* codeNames[]={"Vol_Up","Vol_Down","Mute","PC/Aux","Opt/Cox"};
char* codes[]={"1E70807F","1E7040BF","1E70906F","1E7000FF","1E70C03F"};

#define ArrSize(arg) ((unsigned int) (sizeof (arg) / sizeof (arg[0])))

for (i = 0; i < ArrSize(codeNames)-1; i++) {
  if ( input_code == codeNames[i]) {
    // как-то передаём в терминал значение элемента codes[i] 
   }
}


Поблагодарили: 1

#56 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 01 августа 2018 - 06:02

Попробую, спасибо.

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#57 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 01 августа 2018 - 07:28

Не знаю, в каком формате он принимает данные, но по значению кода искать отказывается напрочь, сволочь такая.
Буду через свитч делать.

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

#58 Пользователь офлайн   CIBAS 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 4 119
  • Регистрация: 07 июля 15
  • ГородСимферополь
  • Страна:  

Отправлено 01 августа 2018 - 08:24

Не будет так искать по коденамес !
У Вас элементы массива - строки,
нельзя сравнивать в IF две строки - (можно только переменные типа char - 1 байт).
Для сравнения строк в стандартном (ANSI C) есть специальная функция strcmp,
вот и копайте в этом направлении ...


#59 Пользователь офлайн   Iverton 

  • Живу здесь
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 1 280
  • Регистрация: 15 сентября 10
  • Страна:  

Отправлено 01 августа 2018 - 10:18

или может такая муть сработает ))) не вкурсе просто что там на скетче работает )
const  char* codeNames[]={"Vol_Up","Vol_Down","Mute","PC/Aux","Opt/Cox","\0"};
const  char* codeHex[]={"1E70807F","1E7040BF","1E70906F","1E7000FF","1E70C03F","\0"};

int getHexPosition( gainCode[] ) {  //подразумевается char gainCode[] 

int i = 0;
	while ( !strcmp(codeNames[i], "\0" )) {
    	strcmp( receiveCode, codeNames[i]) ? i++ : return i;
	}
return -1;
}



//в мейне или где там цикл основной вызываем примерно так
const char hexSignal[] = codeHex[getHexPosition( gainCode[])]); 


#60 Пользователь офлайн   MedicusAmicus 

  • Добрый Э-эх
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 2 336
  • Регистрация: 14 сентября 10
  • Страна:  

Отправлено 01 августа 2018 - 10:35

Этот вариант пробовал, не хочет.
Пилю универсальный пульт из ардуины.
Этот скетч должен получить код ик-пульта, найти соответствие в базе, выдать в терминал название команды.
Потом из него переделаю на отправку последовательности через ик-диод по поступившей команде.
Возможно, даже на 8266 сделаю. Если памяти хватит.
Вероятнее всего, буду что-то подобное лепить:
switch ( results.value ) {
    case 0xFFA857:
        serial.println ("Vol_Up");
        break;
    case 0xFFE01F:
        serial.println ("Vol_Down");
        break;
    }    

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

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…
и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Поделиться темой:


  • (5 Страниц)
  • +
  • 1
  • 2
  • 3
  • 4
  • 5
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей