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

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

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

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

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

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

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

Да не надо мудрить-как было первоначально предложено, так и оставить,
просто вместо сравнениия input_code == codeNames[i]
поставить вызов strcmp, в соответствии с её реализацией в Вашей системе.


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

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

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

strcmp ругается на несоответствие типов.
Массив типа char - двухмерный, итоговый указатель - одно значение. Не разобрался, что ему скормить, чтобы удовлетворить.

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

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

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

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

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

минутку, посмотрю хелп

if(strcmp(input_code, codeNames[i]) == 0) { действия по совпадению }

может быть потребуется &input_code

просто я не пользуюсь ардуиной и скетчами-всё самописное,
без RTOS и прочего-могут быть нюансы в функциях


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

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

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

#include "IRremote.h"

IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
#define Led 4   //визуальный контроль сигнала 
decode_results results;

void setup() {  
  Serial.begin(9600); // выставляем скорость COM порта
  pinMode (Led, OUTPUT);
  irrecv.enableIRIn(); // запускаем прием
}

void loop() {
  if ( irrecv.decode( &results )) { // если данные пришли
    digitalWrite (Led, &results);
    delay (1);
    digitalWrite (Led,0);
      switch ( results.value ) 
      {
        case 0x1E70807F: Serial.println("Vol_Up"); break;
        case 0x1E7040BF: Serial.println("Vol_Down"); break;
        case 0x1E70906F: Serial.println("Mute"); break;
        case 0x1E7000FF: Serial.println("PC/Aux"); break;
        case 0x1E70C03F: Serial.println("Opt/Cox"); break;
      }    
    }
  Serial.println(results.value, HEX);
  
    irrecv.resume(); // принимаем следующую команду
  }

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

Сообщение отредактировал MedicusAmicus: 01 августа 2018 - 11:40

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

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

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

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

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

На минуточку поржать. Коды кнопок пульта кондиционера.
//кондей
        case 0x1090060A	: Serial.println("	Mode Auto On	");	break;
        case 0x2030040A	: Serial.println("	Mode Heat Off	");	break;
        case 0x3030060A	: Serial.println("	Mode Heat On	");	break;
        case 0x4890040A	: Serial.println("	Mode Moist Off	");	break;
        case 0x5890060A	: Serial.println("	Mode Moist On	");	break;
        case 0x8800040A	: Serial.println("	Mode Cold Off	");	break;
      //  case 0x9000060A	: Serial.println("	Fan Auto	");	break;
      //  case 0x9000060A	: Serial.println("	Sleep Off	");	break;
      //  case 0x9000060A	: Serial.println("	Turbo Off	");	break;
        case 0x90000E0A	: Serial.println("	Turbo On	");	break;
        case 0x90040A	  : Serial.println("	Mode Auto Off	");	break;
        case 0x9100060A	: Serial.println("	Sleep On	");	break;
      //  case 0x9400060A	: Serial.println("	Fan Mid	");	break;
      //  case 0x9400060A	: Serial.println("	X-Fan Off	");	break;
      //  case 0x9400060A	: Serial.println("	Swing Up	");	break;
      //  case 0x9400060A	: Serial.println("	Swing Mid-up	");	break;
      //  case 0x9400060A	: Serial.println("	Swing Mid	");	break;
      //  case 0x9400060A	: Serial.println("	Swing Mid-down	");	break;
      //  case 0x9400060A	: Serial.println("	Swing Down	");	break;
      //  case 0x9400060A	: Serial.println("	Swing Off	");	break;
      //  case 0x9400060A	: Serial.println("	16	");	break;
        case 0x9400070A	: Serial.println("	X-Fan On	");	break;
        case 0x9410060A	: Serial.println("	24	");	break;
        case 0x9420060A	: Serial.println("	20	");	break;
        case 0x9430060A	: Serial.println("	28	");	break;
        case 0x9450060A	: Serial.println("	26	");	break;
        case 0x9460060A	: Serial.println("	22	");	break;
        case 0x9470020A	: Serial.println("	Light Off	");	break;
      //  case 0x9470060A	: Serial.println("	30	");	break;
      //  case 0x9470060A	: Serial.println("	Light On	");	break;
      
      //  case 0x9480060A	: Serial.println("	17	");	break;
      //  case 0x9480060A	: Serial.println("	18	");	break;
        case 0x9490060A	: Serial.println("	25	");	break;
        case 0x94A0060A	: Serial.println("	21	");	break;
        case 0x94B0060A	: Serial.println("	29	");	break;
        case 0x94C0060A	: Serial.println("	19	");	break;
        case 0x94D0060A	: Serial.println("	27	");	break;
        case 0x94E0060A	: Serial.println("	23	");	break;
      //  case 0x9600060A	: Serial.println("	Swing Mov Down	");	break;
      //  case 0x9600060A	: Serial.println("	Swing Mov Mid	");	break;
      //  case 0x9600060A	: Serial.println("	Swing Mov Up	");	break;
      //  case 0x9800060A	: Serial.println("	Mode Cold On	");	break;
      //  case 0x9800060A	: Serial.println("	Fan Low	");	break;
        case 0x9C00060A	: Serial.println("	Fan High	");	break;
        case 0xC4E0040A	: Serial.println("	Mode Vent Off	");	break;
        case 0xD4E0060A	: Serial.println("	Mode Vent On	");	break;

Закоментированные строки.
И как эту хрень различать?
Надо будет попробовать слать эти команды и смотреть на результат. Похоже, пульт хитрожелтый.

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

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

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

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

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

Вот держу в руках пульт кондиционера.
К примеру имеется одна кнопка Fan Speed - скорость вращения вентилятора.
Но скоростей 5, они перебираются последовательно, циклически, а код команды один и тот же.
Та же картина с клавишей положения заслонки - код один, а положений несколько.
Именно это и имелось в виду.


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

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

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

Добавлю по распознаванию кодов:

у многих кодов одинаковое тело и окончание - можно проанализировать и,
возможно, достаточно будет сравнивать один байт, а не всю строку.


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

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

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

CIBAS, внимательно посмотрите на коды. Шторка - даихусей.
А вот температура 30 градусов и световой индикатор, переключение на охлаждение/свинг/и малая скорость потока - несколько наводят на мысли.
Где-то что упущено.
Похоже, реакция на код зависит от текущего режима кондиционера и еще какой-нибудь фазы 4 луны Юпитера.
Позабавили отдельные коды на выключение из разных режимов.

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

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

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

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

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

Коды из документации или сами раскодировали?


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

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

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

Сам, через IRremote
Документации нет.

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

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

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

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

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

Понятно, надо взглянуть осциллограммы и сравнить с кодами, бывает
всякое - импульсы не очень красивые или декодер не совсем честный ....


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

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

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

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

Этот вариант пробовал, не хочет.

Хотелось более подробное что - то, почему бы не поставить софт https://habr.com/post/149773/ и не смотреть хотябы в нем на работоспособность, народ же накидывает примерный алгоритм малоли где какие указатели и ссылки надо накнопать )))

IDE написало бы ошибку так как нужно подключить #include <cstring> для работы strcmp, а что там в ардуино хз..

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

strcmp ругается на несоответствие типов.
это один тип char* codes[]={"1E70807F",

и это другой results.value который 0x1E70807F

разные типы, поэтому изначально неправильно задача поставлена сравнивать массивы char.

Нужно посмотреть что за тип results.value, создать такой же массив. Предполагаю что будет массив типов decode_results, посмотреть что там внутри может уже все сделано давно..


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

if(strcmp(input_code, codeNames[i]) == 0) { действия по совпадению } может быть потребуется &input_code


или так

char* currentCode = *( codeNames + i++ );
strcmp( receiveCode, currentCode )


хотя уже наверное неважно т.к. не те типы используются


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

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

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

Iverton, вариант с массивами я уже отставил, немного "автоматизации" в excell решило проблему однотипных выражений.
CIBAS, осциллографа нет, городить его из аудиокарты пока не хочется. Соберу макетку на передачу, буду тестировать на пациенте.
В худшем случае - откажусь от некоторых функций, если остальные будут нормально работать.
Для удаленного включения реально нужны 3-4 команды.

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

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

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

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

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

Понятно. Если 3-4 команды, то можно сгородить не разбираясь в деталях.
Ежели завтра не забуду из дома прихватить ИК датчик и его удастся запустить,
то на работе посмотрю, что пульт выдаёт.


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

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

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

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

вариант с массивами я уже отставил, немного "автоматизации" в excell решило проблему однотипных выражений.

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

Все равно конечно непонятно приходит хекс 0x1E70807F , а отправлять надо строку Vol_Up, это все принимает и отправляет одно и то же устройство ?


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

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

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

Неизвестно, что именно приходит. Отображается хексом, а raw data я хз. Можно, конечно, заморочиться, но если так заработает, усложнять не хочу.
В "боевом" варианте будет наоборот - придет команда типа "Tv_Vol_Up", a дуинка отправит irsendNEC (0x1E70807F) через диод.

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

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

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

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

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

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

Если 3-4 команды, то можно сгородить не разбираясь в деталях.

К сожалению, это только для кондиционера.
К счастью, остальные 140 кодов вполне уникальны.

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

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

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

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

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

Итак.
Коды кондиционера распознаны неверно,скетч их даже не шлет, буду разбираться с ними отдельно. Остальные при пересылке
irsend.sendNEC(0x20DF10EF, 32);
работают вполне адекватно.
Буду колхозить "альфу" пульта.

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

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

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

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

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

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

Неизвестно, что именно приходит. Отображается хексом, а raw data я хз. Можно, конечно, заморочиться, но если так заработает, усложнять не хочу. В "боевом" варианте будет наоборот - придет команда типа "Tv_Vol_Up", a дуинка отправит irsendNEC (0x1E70807F) через диод
Это я так для общего понимания интересуюсь ) там наверно драйвера какие все это конвертируют и видно только символы разные, а летает одно и тоже.


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

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

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

Авотхрен.
"Свитчу" надо скармливать целое число, как аргумент. Воспринимать текстовые команды напрочь отказывается.

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

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

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


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

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