Перейти к содержанию

Проверка Подключения Датчика


Гость KorPaEv

Рекомендуемые сообщения

Ага, всё так...

Поправочка - лучше перед циклом в переменную записать результат getDeviceCount()

и использовать в цикле её, что бы каждую итерацию цикла не выполнять лишнюю работу по получению количества датчиков...

ЗЫ. Ай эм сори - глянул в исходники библы, в принципе, getDeviceCount возвращает внутреннюю переменную devices,

которая инициализируется и заполняется при старте ( begin() ), и хранит количество датчиков до следующего старта МК, а потому особого смысла в отдельной переменной для этого нет, ну, разве что для экономии пары тактов процессорного времени.

Изменено пользователем DrZ
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Ага, всё так...

Поправочка - лучше перед циклом в переменную записать результат getDeviceCount()

и использовать в цикле её, что бы каждую итерацию цикла не выполнять лишнюю работу по получению количества датчиков...

ЗЫ. Ай эм сори - глянул в исходники библы, в принципе, getDeviceCount возвращает внутреннюю переменную devices,

которая инициализируется и заполняется при старте ( begin() ), и хранит количество датчиков до следующего старта МК, а потому особого смысла в отдельной переменной для этого нет, ну, разве что для экономии пары тактов процессорного времени.

спасибо еще раз за советы...

но все же остался один вопрос не знаю даже как записать...я писал очень давно по этому поводу..

не берем в расчет моего клиента.

Например, компилирую скетч, заливаю на девайс, запускаю монитор порта!

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Так вот при каждом запуске монитора порта

Монитор порта из Arduino IDE?

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

Я так понял - скомпилили, залили скетч, открыли монитор и всё сбросилось. Потом закрываете окно монитора и

открываете снова - опять всё сбрасывается. Так?

Попробуйте какой-нибудь другой монитор сериал-порта - будет аналогичная ситуация?

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Так вот при каждом запуске монитора порта

Монитор порта из Arduino IDE?

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

Я так понял - скомпилили, залили скетч, открыли монитор и всё сбросилось. Потом закрываете окно монитора и

открываете снова - опять всё сбрасывается. Так?

Попробуйте какой-нибудь другой монитор сериал-порта - будет аналогичная ситуация?

да, монитор порта из Ардуино. Все так как вы поняли.

Это я написал к тому, что аналогичная ситуация как раз происходит у меня в Visual Studio

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

Вот мой кусок кода - тут ничего особого не делается, но факт остается фактом - когда порт открывается, то видимо это аналогично запуску монитора порта в ide arduino

#region ПОДКЛЮЧЕНИЕ К АРДУИНО И ОБРАБОТКА ДАННЫХ
    SerialPort sp;
    /// <summary>
    /// Порт на котором висит ардуино
    /// </summary>
    private void OpenPort()
    {
	    sp = new SerialPort();
	    // Открываем порт, и задаем скорость в 9600 бод
	    sp.PortName = "COM3";
	    sp.BaudRate = 9600;
	    sp.DtrEnable = true;
	    sp.Open();
    }
....
...
...
...
...
....
....
...

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А релейные модули на каких пинах сидят?

Возможно, если они сидят на том же порту (PD), на котором и Rx/Tx, то при его инициализации "дёргается" весь порт.

Попробуйте на другой порт перевесить...

post-123682-0-13852700-1419334614_thumb.png

Ссылка на комментарий
Поделиться на другие сайты

А релейные модули на каких пинах сидят?

Возможно, если они сидят на том же порту (PD), на котором и Rx/Tx, то при его инициализации "дёргается" весь порт.

Попробуйте на другой порт перевесить...

post-123682-0-13852700-1419334614_thumb.png

модуль сидит на 30, 31 портах... у меня ардуино мега 2650

а датчики у меня сидят на 7м порту, но с ноименованием RX, TX, может как раз из за датчиков такая беда?

Ссылка на комментарий
Поделиться на другие сайты

Ну у вас же вывод переменной каждый "круг" идёт в монитор -

Serial.print(inputValRelayModule); 

Сразу после закрытия-запуска монитора что она выдаёт?

Если эта переменная не изменяется, то причина в другом.

Я ориентируюсь по коду из 23 сообщения - там у вас нет взаимосвязи релейных модулей с темодатчиками, температура выводится отдельно, реле управляются отдельно, командами по сериал порту.

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

post-123682-0-46217400-1419430783_thumb.png

Изменено пользователем DrZ
Ссылка на комментарий
Поделиться на другие сайты

Ну у вас же вывод переменной каждый "круг" идёт в монитор -

Serial.print(inputValRelayModule); 

Сразу после закрытия-запуска монитора что она выдаёт?

сразу после запуска (закрытия открытия) она у меня ничего не содержит, там пусто..

потому как она же просто объявлена вначале как char и ей ничего не присвоено, а при инициализации так же ничего с ней не делается.

Так вот не понятно - как только я заливаю скетч в таком варианте реле сразу щелкает на зымыкание и лампочки горят на нем, я открываю монитор порта, у меня идет такая строка 27;27 и реле пока открывается монитор щелкает (размыкается и замыкается заного)

затем шлю на чтение 1, ничего не меняется - реле же уже замкнуто, строка принимает вид 27;27;1....Тут могу его выключить, отправив 0 в консоль, оно размыкается, лампочки выключаются.

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

причем решил потестить, ввел строку

Serial.print(digitalRead(relPinOne));

по идеи должно вернуть состояние на пине реле, но у меня когда запускаю порт, реле включено а в мониторе 0..0..0...0...0...0..0...0

хотя реле включено, но почему пин считался как состояние 0??

ааааа понял...у меня же в дефайне все написано

#define ON 0

#define OFF 1

у реле все наоборот...0 это сомкнуто, 1 - разомкнуто, поэтому он мне 0 и вернул.

Но вопрос почему при запуске реле смыкается все же актуален.

Изменено пользователем KorPaEv
Ссылка на комментарий
Поделиться на другие сайты

Попробуйте изменить тип переменной с char на int и читайте не как символ '1' или '0', а как цифры - 1 или 0

Изменено пользователем DrZ
Ссылка на комментарий
Поделиться на другие сайты

Попробуйте изменить тип переменной с char на int и читайте не как символ '1' или '0', а как цифры - 1 или 0

спасибо, как дома буду, попробую и отпишусь, что получилось!!

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Попробуйте изменить тип переменной с char на int и читайте не как символ '1' или '0', а как цифры - 1 или 0

Спасибо большое все получилось, но я уже очень далеко двинулся вперед со своим умным домом...работаю уже с веб интерфейсами и передачей данных на sd карту

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

http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/web-server-read-switch-automatically-using-AJAX/

по этой ссылке читается POST запрос и сохраняется в переменную таким образом

if (client.available()) {   // client data available to read
		    char c = client.read(); // read 1 byte (character) from client
		    HTTP_req += c;  // save the HTTP request 1 char at a time

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

r2=on&r3=on&r4=on&postTemp=123

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

так вот когда я получил строку такого вида как ее распрарсить??

Причем строка может как вида полного когда все реле включены и температура не задана

r2=on&r3=on&r4=on&postTemp=

так и когда все реле выключены и ничего не задано

postTemp=

или когда задана температура но реле выключены

postTemp=123

как это лучше всего парсить?

я брал пример просто без порогового значения отсюда...там парсится чисто по символьно

http://zelectro.cc/Ethernet_shield_W5100

но для моей задачи теперь считаю что этот подход не верный - мне проще собрать сначала всю строку запроса а потом ее парсить и изменять массив состояния реле

Ссылка на комментарий
Поделиться на другие сайты

Варианты:

1. Парсить по позиции разделителя, в данном случае символа "=" с помощью позиции в строке String::substring(int from, int to)

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

только переносить стартовый индекс.

2. Регулярные выражения, библа в аттаче. Мощная и удобная штука для парсинга строк.

Regexp.zip

Ссылка на комментарий
Поделиться на другие сайты

Варианты:

1. Парсить по позиции разделителя, в данном случае символа "=" с помощью позиции в строке String::substring(int from, int to)

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

только переносить стартовый индекс.

2. Регулярные выражения, библа в аттаче. Мощная и удобная штука для парсинга строк.

Regexp.zip

Благодарю за регулярки..покопаюсь!

Ссылка на комментарий
Поделиться на другие сайты

Варианты:

2. Регулярные выражения, библа в аттаче. Мощная и удобная штука для парсинга строк.

Regexp.zip

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

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

2 - при использовании библиотеки на вход нужен указатель на строку символов, начал конвертировать String в char* и тут проблему я не допонимаю немного в чем именно трудность

void ParseRequestStr(String reqStr)
{
   MatchState ms; //Объявил объект
   unsigned int index = 0;
   String rStr = reqStr; //Вот моя входная строка
   char bufferReqStr[sizeof(rStr)]; //тут судя по примеру создаем буфер нужного размера входной строки
   rStr.toCharArray(bufferReqStr, sizeof(bufferReqStr)); //Конвертирую строку в массив символов
   char * str = rStr; //ВОТ ТУТ ПОЧЕМУ Я НЕ МОГУ СОЗДАТЬ УКАЗАТЕЛЬ НА МОЙ МАССИВ СИМВОЛОВ????
   ms.Target(str); //Далее по примеру передаю указатель на строку символов

   while (true)
   {
  //r0=on&r1=on&postTemp=123
  char result = ms.Match ("(%a+)(%d)=(%-?%a+)", index);
  if (result == REGEXP_MATCHED)
  {
    Serial.print ("Matched on: ");
    Serial.println (ms.GetMatch(bufferReqStr));
    Serial.println ("Captures:");
    for (int j = 0; j < ms.level; j++)
	   Serial.println (ms.GetCapture(bufferReqStr, j));
    index = ms.MatchStart + ms.MatchLength;
  }
  else
    break;
   }
   Serial.println(str);
}

как раз у меня проблема в конвертации chararray в char* почему явно не могу сказать указателю, что вот моя строка символов?

и еще с самой регуляркой вопрос

моя строка вида

r0=on&r1=on&postTemp=123

регулярка ее разберет из примера с форума вот так

"(%a+)(%d)=(%-?%a+)"

тут как я понял читаем сначала произвольное кол-во символов, далее идет цифра, все как у меня, потом =, а что дальше?? у меня может быть как on значение так и типа float (температура)....следовательно вот тут %-?%a+ читается только символы (прочитается on) а у меня помимо on может быть и значение температуры...

и еще так и не понял что значит -?

Ссылка на комментарий
Поделиться на другие сайты

разобрался...регулярка для порогового значения будет следующей

char result = ms.Match ("(%a+)(%d-)=([%a%d]+)", index);

вот результат, только если тип порога float то регулярка все равно округляет до int

Matched on: r0=on

Captures:

r

0

on

Matched on: r1=on

Captures:

r

1

on

Matched on: postTemp=12.3

Captures:

postTemp

12

r0=on&r1=on&postTemp=12.3

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • @Александр2, это у тебя в голове что-то с чем-то вступает в противоречие.  Я знаю, что ты ярый поклонник Ланзара. Поэтому пояснение для тебя того, почему симметричная на бумаге/на экране монитора схема, и спаянная на реальной плате с реальными комплектующими в отличии от неё за редким исключением вместо 0 на выходе зачастую имеет сдвиг напряжения величиной в +/- километр, думается мне излишняя трата времени.    
    • Верно подмечено. Вот их-то, КТ602ВМ и BD139 в ТО-126 в 1969-ом как раз-таки и не было. Не только у J. L. Hood-а, их вообще ещё не существовало. К тому же КТ602БМ  в корпусе КТ-27-2 (как и BD139 в TO-126) и КТ602А в корпусе КТЮ-3-9 - это совсем не близнецы-братья. Технология изготовления совершенно разная, а она при работе транзисторов динамическом режиме, как в случае с JLH-69, играет далеко не последнюю роль. Просто юноша в силу своего быстрого и раннего развития об этом ничего не знает. 
    • Садится разбираться в алгоритме работы и на микроконтроллере делать замену.  Попробуйте прогреть микросхему на зажигалке, когда-то читал о таком способе восстановления процессора от телевизора. Шансов мало, но вам нечего терять, а потом в панельку.
    • Я хочу попробовать разные способы победить эти шумы. Для начала собрать фильтр для блока питания. Корпус с блютуз антенной я пробовал убрать, ничего не изменилось, если фильтр для блока питания тоже не поможет, значит дело в самом усилителе. В Aiyima A3001, который выдает шум гораздо тише, на выходе стоят электролитические конденсаторы и фильтры, можно попробовать сделать также и на Aiyima A09, может таким образом удастся снизить шумы. Если нет, то буду искать еще варианты. Кроме шумов еще надо разобраться с щелчками в колонки при включении и выключении Brzhifi. Aiyima A09 выдает щелчок только при выключении сетевого фильтра, и слабый. А вот Brzhifi щелкает так, что аж диффузоры в колонках двигаются. Схема питания у них отличается, Brzhifi остается в режиме ожидания и питание не отключается, я хочу переделать его так, чтобы оно отключалось, как на Aiyima A09. Может там что сдохло. а может он так спроектирован. Либо что то делать с контроллером питания, либо найти в схеме где можно врезать выключатель и впихнуть его.
    • @CrazyDog34RU Понять, что изначально были неправы, и питание в вашей проблеме не виновато, например?
    • Неожиданный вопрос... При измерениях в любой точке вот этой части схемы "масса" осциллографа вот тут: При измерениях вот в этой части схемы - вот тут: У этой части схемы - вот в этой точке: Подключать "массу" к одной части схемы, а смотреть точки в другой - нельзя. Все эти три "общие" точки - совершенно разные точки. Между ними может быть вполне ощутимое напряжение. Вот тут это хорошо видно:
×
×
  • Создать...