Новичок. Вопросы и помощь.
- Войдите на сайт для отправки комментариев
Всем привет, я новичок и полный ноль в программировании.
В голове есть проект, а вот программную реализацию не осилю без помощи.
Есть устройство на ардуинке, которое читает шину данных автомобиля. Задача устройства отслеживать нужные сообщения. В данном случае температуру ОЖ.
По шине бегает куча сообщений от разных блоков управления. Нужно отфильтровать нужные, и из них выделить искомые значения.
Пример сообщения
xx yy zz ** ## ck, где
xx отправитель,
yy получатель,
zz длина пакета,
** ## само сообщение,
ck чек сумма.
Нужно вы делить данные этого сообщения и преобразовать в удобоваримый вид, например строку .
С аппаратной частью вопросов нет, а вот с программой без помощи не разберусь.
Ну и может посоветуете, что почитать для начала программирования. Учебник или что-нибудь подобное.
Сверху справа есть такое поле написано "Пользовательский поиск" вот там набираете "arduino can" и читаете, там даже скетчи готовые есть которые сосканят шину и выведут в удобном виде останется тоьлко отфильтровать, а если почитать еще подольше то можно найти и отфильтровку.
У меня вопрос к ТСу и ему подобным? Что за странная манера называть подобным образом темы? Это все-равно, что назвать свою книгу "Молодой автор. Книга для чтения". Ну напрягите извилины. Неужели вашей буйной фантазии не хватает, чтобы дать теме осмысленное название, хоть немного связанное с ее содержанием? Не можете связать три слова вместе - ну тогда хоть в качестве названия просто перечислите ключевые слова.
Спасибо за направление поиска в поиске. Пока не разобрался, можно ли менять заголовок. Почитаю про can, переосмыслю заголовок.
Всем доброго дня ! Вопрос есть такой : возможно ли запрограммировать на Ардуино выполнение определенного действия при помощи двух кнопок ? А именно: нажали одну кнопку , удерживая ее , нажимаем на вторую и только после этого выполняется та или иная команда .
Всем доброго дня ! Вопрос есть такой : возможно ли запрограммировать на Ардуино выполнение определенного действия при помощи двух кнопок ? А именно: нажали одну кнопку , удерживая ее , нажимаем на вторую и только после этого выполняется та или иная команда .
Возможно.
Хорошо ,спасибо ! А оператор regim подходит для этого ?
Если другой более подходит , подскажите , пожалуйста.
Хорошо ,спасибо ! А оператор regim подходит для этого ?
Можно ссылку или описание, про "оператор regim" ?
Откуда вы это вытаскиваете-то ?
Про оператор regim прочитал здесь на этом форуме . Хотя там приводится пример про запуск действия от долгого нажатия кнопки. (http://arduino.ru/forum/programmirovanie/zapusk-funktsii-pri-dolgom-zazh...). Про двух кнопок ничего не могу найти .
аааа вот оно что, тады я думаю вам лучше подойдет оператор button_long_state.
он памяти меньше занимает и работает быстрее.
аааа вот оно что, тады я думаю вам лучше подойдет оператор button_long_state.
он памяти меньше занимает и работает быстрее.
Спасибо ,xDrive ! Но там команды выполняет одна и та же кнопка . Разница только во времени ее удержания .
ну конечно, надо будеть подумать и поработать головой и руками,
ну думаю там все просто, добавляем оператор на вторую кнопку btnPress2 и он автоматом начинает отслеживать нажатие первой и только после этого когда нажата вторая выполняет команду DoPressBtn2 (эту команду тоже надо добавить).
ну конечно, надо будеть подумать и поработать головой и руками,
ну думаю там все просто, добавляем оператор на вторую кнопку btnPress2 и он автоматом начинает отслеживать нажатие первой и только после этого когда нажата вторая выполняет команду DoPressBtn2 (эту команду тоже надо добавить).
Спасибо за подсказку ! Постараюсь понять и воплотить .)))
Удачи, напишите о результатах.
Хорошо ! Если вопросы возникнут , сюда и буду обращаться . В теме " работа с кнопками " какая-то революция происходит ... Раньше там общался .
Хорошо ! Если вопросы возникнут , сюда и буду обращаться . В теме " работа с кнопками " какая-то революция происходит ... Раньше там общался .
"Я их в дверь, они в окно"(с). Рома и подобные, у вас за открытие своей темы с осмысленным названием и возникшими вопросами, денег что ли спрашивают? Открыли тему, с названием указывающим на проблему, а не "поможите хто могет", выложили скетч, описали что не так и что предпринимали для исправления. Если вопрос не идиотский, то ответят, если первое, то поглумятся всласть.
Доброго дня суток ! xDriver, не совсем пошло , как хотелось бы ...
#include <PS2X_lib.h> //for v1.6 #include <Servo.h> #define ps2PinDat 12 // Константа - пин Arduino для Playstation joystick линия Data 17 #define ps2PinCmd 11 // Константа - пин Arduino для Playstation joystick линия Command 15 #define ps2PinSel 10 // Константа - пин Arduino для Playstation joystick линия Sel(Attention) 16 #define ps2PinClk 9 // Константа - пин Arduino для Playstation joystick линия Clock 14 PS2X ps2x; int error = 0; // Переменная хранящая наличие ошибок для Playstation joystick Servo Shoot; //Выстрел void setup(){ Shoot.attach(7); error = ps2x.config_gamepad(ps2PinClk, ps2PinCmd, ps2PinSel, ps2PinDat, false, false); //Настройка выводов: (clock (5.6kOm), command (5.6 kOm), attention, data, true, true) pinMode(13, OUTPUT); // Прицел } void loop(){ ps2x.read_gamepad(false, 0); // Включение и выключение прицела при нажатии и отпускании кнопки L1 if(ps2x.ButtonPressed(PSB_L1)) { digitalWrite(13,HIGH)); } else if(ps2x.ButtonReleased(PSB_L1)) { digitalWrite(13,LOW); } // Выстрел if(ps2x.ButtonPressed(PSB_R1)) { Shoot.write(75); } else if(ps2x.ButtonReleased(PSB_R1)) { Shoot.write(5); } delay(50); }Прицел работает , т.е. пока удерживаю кнопку L1 горит индикатор , отпускаю -гаснет . Но к сожалению серво работает сама по себе , а хотелось бы , чтобы она сработала только в паре от нажатия кнопки L1 .
Прицел работает , т.е. пока удерживаю кнопку L1 горит индикатор , отпускаю -гаснет . Но к сожалению серво работает сама по себе , а хотелось бы , чтобы она сработала только в паре от нажатия кнопки L1 .
Так проверяйте признак нажатия для двух кнопок перед командованием сервой...
Добрый день ! Понимаю, что с flag ом надо поработать . Только не могу на практике (((
Не обязательно. В условия "Прицела" вложите дополнительно условия "Выстрела". Или что там у вас серва делает.
Всё получилось ! Спасибо всем , кто помогал .
Сейчас переделываю скетч домофонного замка под свои условия и столкнулся с проблемой нехватки памяти.
Меток rfid около 100 штук номера у всех разные.
Купил не перезаписываемые по глупости, теперь мучаюсь)
Можно ли как-то изменить скетч чтобы можно было использовать все существующие метки ?
И еще вопрос: при работе скетча с двумя - тремя метками почему-то отрабатывается двойное считывание метки. Точнее не двойное, а по два раза прописывается номер метки и происходит слабый щелчек в реле. Его еле слышно, но он есть при втором отображении номера метки. После завершения процедуры происходит полноценный щелчок и реле отключается.
#include <SoftwareSerial.h> // Подключаем сам ридер SoftwareSerial RfidReader(8, 9); String s; String data1; bool ok = false; bool reads = false; // активируемый порт при считывании валидной карты int yes = 6; // активируемый порт при считывании карты не из списка int no = 7; // Массив с номерами карт. Для увеличения валидных карт просто добавьте еще один массив внутрь String Str[] = { "25049484852565253555453653", "25049484852546654545166503", "25049484852564853535451653", "25049484852546654545166503", "25049484852546652515269553", "25049484852557049576648673", "25049484852555467704870653", "25049484852665548665065563", "25049484852565267486950663", "25049484852555168485153563", "25049484852565253535655523", "25049484852565152555250573", "25049484852556766705153693", "25049484852545151696966653", "25049484853486757485666483", "25049484852555665495470653", "25049484852546856505757543", "25049484853484856535650493", "25049484853485552696669693", "25049484852565155535148683", "25049484852565270545452483", "25049484853484853545049543", "25049484852555651555257493", "25049484852564954686665523", "25049484852545057665270653", "25049484852556953705655663", "25049484852557067536967523", "25049484852555654515768573", "25049484852555267505748513", "25049484852555757705048683", "25049484852537054526968673", "25049484853486554556765663", "25049484852564950576569493", "25049484852544953706556563", "25049484852565253555453653", "25049484852556568684949653", "25049484852556648665754703", "25049484852674951665767553", "25049484852556650515269483", "25049484852666855535569653", "25049484852555449684868553", "25049484852665668555357503", "25049484852545454655565543", "25049484852537068555169653", "25049484852556855706952703", "25049484852555657684851703", "25049484852544850505352483", "25049484852555568495548673", "25049484852666649495667513", "25049484852564853535451653", "25049484852546555705151513", "25049484852556657515269663", "25049484852554966535550653", "25049484852565155576767503", "25049484852556654546766673", "25049484852564953676966503", "25049484853486548706950703", "25049484852555766566955513", "25049484852555368485251703", "25049484852556769676954543", "25049484852545653526965673", "25049484852544848526750663", "25049484853484850515552523", "25049484853484954565569483", "25049484853485451656766693", "25049484852556965505165703", "25049484852665348517048533", "25049484852555149495052533", "25049484852546665705750523", "25049484852565155655170683", "25049484852546556536957493", "25049484853485170545550573", "25049484852555065515355573", "25049484852556553577053673", "25049484852545254574866493", "25049484852556552517070683", "25049484853484868565370573", "25049484852555170496952553", "25049484852555768686750553", "25049484852555754665752573", "25049484852565356565466553", "25049484852544849486854663", "25049484852545554666965703", "25049484852547055685552553", "25049484852565165685056493", "25049484852666853705652553", "25049484852546752515457533", "25049484852566966525567533", "25049484852545565526653543", "25049484852545648696648673", "25049484852545449675267503", "25049484852555252485250543", "25049484852555066577068503", "25049484852545453496749693", "25049484852665356576965673", "25049484853485048505255533", "25049484852555348566766653", "25049484852555567535152573", "25049484852557067705654503", "25049484852575170514954543", "25049484852565649706949543", "25049484852536967575349683", "25049484852565454655265663" }; char newtag[] = {"00000000000000000000000000"}; void setup(){ RfidReader.begin(9600); Serial.begin(9600); pinMode(yes, OUTPUT); pinMode(no, OUTPUT); } // данная функция сравнивает по очереди все 14 символов // массива из базового массива, и только что считанного массива void loop(){ //reads = ok = false; // если карта поднесена if (RfidReader.available() > 0) { // создаем массив с данными поднесенной карты for (int x = 0 ; x < 14 ; x++){ data1 = RfidReader.read(); s+=data1; while (RfidReader.available()) break; } if (s.length()==26) { // выводим данные Serial.println("yes"); while (RfidReader.read() > 0) {}; for (int i = 0 ; i < 4 ; i++){ if (s==Str[i]){ digitalWrite(yes, HIGH); delay(4000); digitalWrite(yes, LOW); s=""; } } } else { Serial.println(s); s=""; } } }можно не строками хранить, а числом.
инвариантную часть "2504948485" отбрасываем (или не отбрасываем, по желанию), число влазит в uint64_t.
В EEPROM можно 128 ключей хранить.
Можно и строками оперировать, но хранить тогда их 32-разрядный хэш. тогда еще больше ключей влезеть.
P.S. Скажы, что у тебя за модуль RFID, который SoftwareSerial прикидываеца?
P.S. Скажы, что у тебя за модуль RFID, который SoftwareSerial прикидываеца?
https://ru.aliexpress.com/af/rdm6300.html?d=y&origin=n&blanktest=0&jump=...
DIYMan, спасибо. Так и думал, что на 125 кГц. Не пайдеть.
DIYMan, спасибо. Так и думал, что на 125 кГц. Не пайдеть.
Чо так? Удобная штука, кста - не надо геморроя, чем тебе 125 кГц не угодили? :)
125Мгц метки. а модуль 6300 кажись - тот что с квадратной рамкой-антенной с алиэкспресс.
в оригинале скетча использовался вот такой код - где и было прописано uint64_t . но этот кусок кода ,насколько я понял из пояснений, отвечает за сравнение 14 чисел массивов прочтенного ключа и внесенного в базу. хотя я не понимаю каким образом система понимает что было прочтено, а что берется из базы. вариант оригинального скетча не устроил по причине трудоемкости разделения запятыми при внесении в список валидных ключей в таком количестве.
#include <SoftwareSerial.h> // Подключаем сам ридер SoftwareSerial RfidReader(8, 9); int data1 = 0; bool ok = false; bool reads = false; // активируемый порт при считывании валидной карты int yes = 6; // активируемый порт при считывании карты не из списка int no = 7; // Массив с номерами карт. Для увеличения валидных карт просто добавьте еще один массив внутрь int tags[][14] = { {2, 50, 49, 48, 48, 53, 48, 48, 56, 53, 56, 50, 49, 3 }, {25049484853484856535650493 } // просто добавьте сюда еще строки - например {2, 49, 54, 48, 48, 49, 69, 55, 50, 56, 55, 70, 68, 3 } }; int newtag[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; void setup(){ RfidReader.begin(9600); Serial.begin(9600); pinMode(yes, OUTPUT); pinMode(no, OUTPUT); } // данная функция сравнивает по очереди все 14 символов // массива из базового массива, и только что считанного массива uint8_t compare(int str1[], int str2[]) { for(uint8_t i = 0; i < 14; i++) { if(str1[i] != str2[i]) return 0; } return 1; } void loop(){ reads = ok = false; // если карта поднесена if (RfidReader.available() > 0) { delay(100); // создаем массив с данными поднесенной карты for (int x = 0 ; x < 14 ; x++){ data1 = RfidReader.read(); newtag[x] = data1; } //пока еще какая-то карта доступна while (RfidReader.available()) // все непустые байты считываем вникуда (всё что надо, считали выше)))) while (RfidReader.read() > 0) {}; reads = true; // по очереди сравниваем данные карты с валидным массивом for(int i = 0; i < sizeof(tags) ; i++){ if (compare(newtag, tags[i]) == true){ ok = true; break; } } } // если произошло считывание if(reads){ // если карта есть в списке валидных if (ok){ digitalWrite(yes, HIGH); delay(2000); digitalWrite(yes, LOW); } // если карт нету в списке валидных else { digitalWrite(no, HIGH); delay(2000); digitalWrite(no, LOW); } ok = false; } }и не могу найти инфу по uint8_t. может кто сталкивался с более менее подробным описанием ?
и не могу найти инфу по uint8_t. может кто сталкивался с более менее подробным описанием ?
это unsigned char тривиальный.
и не могу найти инфу по uint8_t. может кто сталкивался с более менее подробным описанием ?
это unsigned char тривиальный.
типа byte, на Ардуиновском.)))
и не могу найти инфу по uint8_t. может кто сталкивался с более менее подробным описанием ?
https://ru.wikipedia.org/wiki/Stdint.h
http://avr-libc.narod.ru/group__avr__stdint.html
Меток rfid около 100 штук номера у всех разные.
Купил не перезаписываемые по глупости, теперь мучаюсь)
Можно ли как-то изменить скетч чтобы можно было использовать все существующие метки ?
1. Перенести в PROGMEM, после чего сразу освободится 2700 байт оперативной памяти. В принципе этого достаточно. И даже достаточно для того, чтобы добавить еще 500 меток.
2. Если все-таки хочется большего, воспользоваться советом DetSimen, только в uint64_t использовать не двоичное, а двоично-десятичное представление, чтобы из одного байта сразу извлекать 2 цифры вместо очень длительных операций многократного деления uint64_t на степени десятки.
andriano, а эта бибка номер ключа только текстом отдавать умеет штоли?
andriano, а эта бибка номер ключа только текстом отдавать умеет штоли?
Я понятия не имею, о какой библиотеке речь. В обсуждаемом исходнике фигурирует только SoftwareSerial.
Но когда не хватает памяти для размещения статических данных, возникает два предложения:
1. Поместить данные в более объемное хранилище (возможно, внешнее).
2. Сжать данные.
Ваш ответ был посвящен исключительно 2 способу. Я упомянул, что существует также первый.
Ну и, непосредственно не Ваш вопрос: можно хранить в сжатом виде, а отдавать "только текстом".
спасибо. просто я тоже с такими модулями не работал, вот и спросил.
andriano, а эта бибка номер ключа только текстом отдавать умеет штоли?
Ага - этот RFID-reader при поднесении ключа пхает его данные в виде строки в UART. На самом деле - крайне удобно, кода - мизер.
Thanx a lot.
Thanx a lot.
Слу, я соврамши: там он не в виде строки пихает, а пакеты по N байт приходят постоянно, если метка приложена. Короче, ещё удобней :) Я и подзабыл уже, давно его юзал, щас поднял код - я его сам для теста в виде строки в Serial выводил, но код метки - в байтах приходит.
RDM6800 так шлёт: ftp://imall.iteadstudio.com/Modules/IM131218001/DS_IM131218001.pdf
Каждый пакет - заканчивается переводом строки, т.е. читать можно до \r\n - и усё: ключ приложен. Там ишшо есть и прерывание на ноге - если ключ приложен, на 10 ms на ноге импульс.
Но учти: есть разные модули, и по разному шлют инфу в UART. Вот этот, например, по-другому: http://wiki.seeed.cc/125Khz_RFID_module-UART/
Во, нашёл свой древний код баловства с RDM6300 на амперке: http://forum.amperka.ru/threads/rfid-rdm6300.8816/
const PROGMEM uint64_t Str[] = { 65253555453653 , 46654545166503 , 64853535451653 };
вроде бы так закидывается в PROGEM ?
а вот как это дело извлекать ?
const PROGMEM uint64_t Str[] = { 65253555453653 , 46654545166503 , 64853535451653 };
по вашему совету откинул инвариативную часть - помогло, спасибо. кстати, в полном виде все цифры не влезали почему-то. или я что-то не так делаю?)
Всем привет! Ищу помощи профи поэтому сюда и пришел. Помогите в сборке такой штуки как на фото, но хочется добавить прибору автономности и запитать от небольшой монокристаллической солнечной батареи. Сам я ничего в этом не секу, только паять умею)
Вам очень повезло, что я решил ответить первым. Ибо подобные комментарии и просьбы мгновенно огребают тонны ненависти.
Чем Вам помочь? Точнее, какую именно помощь Вы хотите получить? На фото, как я понимаю метеостанция. Вы хотите такую же? Начните с того, что почитайте про метеостанции на ардуино. Таких проектов в интернете тысячи. Прямо так и наберите в гугле "метеостанция ардуино". Здесь Вам обязательно помогут, но с какими-то более конкретными вопросами. Или Вы хотите, чтобы Вам нарисовали схему подключения и написали код? Тоже вроде здесь практикуется, но этим в платном разделе люди занимаются.
Lin-air, сотни ненависти тебе в карму от мня ... Открой тему и огребай там.
А DIYMan в карму одни ништяки. :)
поиски по теме в сети дали следующий результат, который, к слову, не работает)
пытаюсь вывести в монитор порта значение buffer , но почему-то после надписи "ye" ("s" отсутствует) пишется квадрат и несколько пробелов.
del
del
Не совсем понятна причина такой агрессии, ну да ладно.
Итак исходя из всего что я прочитал и увидел в интернете, я понял что точно нужна помощь или совет профессионала по части электроники, поэтому в кратце что хочется получить - это два блока внешний и внутренний.
Внешний блок для измерения температуры, влажности(сухо, дождь), давления, уровня освещенности(солнечно, пасмурно, ночь), скорости(анемометр)и направления ветра (флюгер?), передачи информации на внутренний блок по wifi, вопрос с питанием - возможно ли запитать от солнечной панели внешний блок или нет и каковы будут габариты панели если возможно.
Анемометр - как я понимаю необходимы оптический датчик? Вал крутится, окошко открывается и закрывается, исходя из частоты происходит анализ. Ну это как я себе представляю.
Флюгер - тут мне пока не ясно, может что то посоветуете?
Внутренний блок измерение внутренней температуры и влажности, получение информации с внешнего блока по wifi, вывод информации на один большой дисплей, либо на отдельные маленькие дисплеи где каждый отображает данные одного датчика.
Я так понимаю все необходимые железки можно заказать с али, но какие именно? Как просчитать питание для системы? Какие инструменты понадобятся, что нужно изучить, с чего начать?
Заранее благодарен.
Не совсем понятна причина такой агрессии, ну да ладно.
Итак исходя из всего что я прочитал и увидел в интернете, я понял что точно нужна помощь или совет профессионала по части электроники, поэтому в кратце что хочется получить - это два блока внешний и внутренний.
Я так понимаю все необходимые железки можно заказать с али, но какие именно? Как просчитать питание для системы? Какие инструменты понадобятся, что нужно изучить, с чего начать?
Заранее благодарен.
Листаете для начала хотя бы этот форум. Были разные темы по заданным вопросам. Подбираете подходящее оборудование, создаете схему, выкладываете, там возможно пойдет диалог и советы. Программирование тоже придется изучить, либо повезет и найдете единомышленника, что вряд ли. Если хотите готовое, то в "Ищу исполнителя". Это ФОРУМ АРДУИНО.РУ
Ну не делают здесь хотелки, не делают.