Новичок. Вопросы и помощь.

MaxuBo
Offline
Зарегистрирован: 14.02.2018

Всем привет, я новичок и полный ноль в программировании.

В голове есть проект, а вот программную реализацию не осилю без помощи.

Есть устройство на ардуинке, которое читает шину данных автомобиля. Задача устройства отслеживать нужные сообщения. В данном случае температуру ОЖ.

По шине бегает куча сообщений от разных блоков управления. Нужно отфильтровать нужные, и из них выделить искомые значения.

 

Пример сообщения

xx yy zz ** ## ck, где

xx отправитель, 

yy получатель, 

zz длина пакета, 

** ## само сообщение,

ck чек сумма.

 

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

С аппаратной частью вопросов нет, а вот с программой без помощи не разберусь.

 

 

Ну и может посоветуете, что почитать для начала программирования. Учебник или что-нибудь подобное.

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Сверху справа есть такое поле написано "Пользовательский поиск" вот там набираете "arduino can" и читаете, там даже скетчи готовые есть которые сосканят шину и выведут в удобном виде останется тоьлко отфильтровать, а если почитать еще подольше то можно найти и отфильтровку.

vk007
Offline
Зарегистрирован: 16.06.2015

У меня вопрос к ТСу и ему подобным? Что за странная манера называть подобным образом темы? Это все-равно, что назвать свою книгу "Молодой автор. Книга для чтения". Ну напрягите извилины. Неужели вашей буйной фантазии не хватает, чтобы дать теме осмысленное название, хоть немного связанное с ее содержанием? Не можете связать три слова вместе - ну тогда хоть в качестве названия просто перечислите ключевые слова.

MaxuBo
Offline
Зарегистрирован: 14.02.2018

Спасибо за направление поиска в поиске. Пока не разобрался, можно ли менять заголовок. Почитаю про can, переосмыслю заголовок.

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Всем доброго дня ! Вопрос есть такой : возможно ли запрограммировать на Ардуино выполнение определенного действия при помощи двух кнопок ?  А именно: нажали одну кнопку , удерживая ее , нажимаем на вторую и только после этого выполняется та или иная команда . 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

unlceRoma пишет:

Всем доброго дня ! Вопрос есть такой : возможно ли запрограммировать на Ардуино выполнение определенного действия при помощи двух кнопок ?  А именно: нажали одну кнопку , удерживая ее , нажимаем на вторую и только после этого выполняется та или иная команда . 

Возможно.

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Хорошо ,спасибо ! А оператор regim подходит для этого ?

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Если другой  более подходит , подскажите , пожалуйста.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

unlceRoma пишет:

Хорошо ,спасибо ! А оператор regim подходит для этого ?

Можно ссылку или описание, про "оператор regim" ?

Откуда вы это вытаскиваете-то ?

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Про оператор regim прочитал здесь на этом форуме . Хотя там приводится пример про запуск действия от долгого нажатия кнопки. (http://arduino.ru/forum/programmirovanie/zapusk-funktsii-pri-dolgom-zazh...). Про двух кнопок ничего не могу найти . 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

аааа вот оно что, тады я думаю вам лучше подойдет оператор button_long_state.

он памяти меньше занимает и работает быстрее.

unlceRoma
Offline
Зарегистрирован: 25.08.2016

xDriver пишет:

аааа вот оно что, тады я думаю вам лучше подойдет оператор button_long_state.

он памяти меньше занимает и работает быстрее.

Спасибо ,xDrive ! Но там команды выполняет одна и та же кнопка . Разница только во времени ее удержания .

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну конечно, надо будеть подумать и поработать головой и руками, 

ну думаю там все просто, добавляем оператор на вторую кнопку btnPress2 и он автоматом начинает отслеживать нажатие первой и только после этого когда нажата вторая выполняет команду DoPressBtn2 (эту команду тоже надо добавить).

unlceRoma
Offline
Зарегистрирован: 25.08.2016

xDriver пишет:

ну конечно, надо будеть подумать и поработать головой и руками, 

ну думаю там все просто, добавляем оператор на вторую кнопку btnPress2 и он автоматом начинает отслеживать нажатие первой и только после этого когда нажата вторая выполняет команду DoPressBtn2 (эту команду тоже надо добавить).

Спасибо за подсказку ! Постараюсь понять и воплотить .)))

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Удачи, напишите о результатах.

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Хорошо ! Если вопросы возникнут , сюда и буду обращаться . В теме " работа с кнопками " какая-то революция происходит ... Раньше там общался . 

bwn
Offline
Зарегистрирован: 25.08.2014

unlceRoma пишет:

Хорошо ! Если вопросы возникнут , сюда и буду обращаться . В теме " работа с кнопками " какая-то революция происходит ... Раньше там общался . 

"Я их в дверь, они в окно"(с). Рома и подобные, у вас за открытие своей темы с осмысленным названием и возникшими вопросами, денег что ли спрашивают? Открыли тему, с названием указывающим на проблему, а не "поможите хто могет", выложили скетч, описали что не так и что предпринимали для исправления. Если вопрос не идиотский, то ответят, если первое, то поглумятся всласть.

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Доброго дня суток ! 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);

}    

 

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Прицел работает , т.е. пока удерживаю кнопку L1 горит индикатор , отпускаю -гаснет . Но к сожалению серво работает сама по себе , а хотелось бы , чтобы она сработала только в паре от нажатия кнопки L1 .

sadman41
Offline
Зарегистрирован: 19.10.2016

unlceRoma пишет:

Прицел работает , т.е. пока удерживаю кнопку L1 горит индикатор , отпускаю -гаснет . Но к сожалению серво работает сама по себе , а хотелось бы , чтобы она сработала только в паре от нажатия кнопки L1 .

Так проверяйте признак нажатия для двух кнопок перед командованием сервой...

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Добрый день ! Понимаю, что с flag ом надо поработать . Только не могу на практике (((

sadman41
Offline
Зарегистрирован: 19.10.2016

Не обязательно. В условия "Прицела" вложите дополнительно условия "Выстрела". Или что там у вас серва делает.

unlceRoma
Offline
Зарегистрирован: 25.08.2016

Всё получилось ! Спасибо всем , кто помогал .

croan
Offline
Зарегистрирован: 21.02.2018
Здравствуйте. 

Сейчас переделываю скетч домофонного замка под свои условия и столкнулся с проблемой нехватки памяти.

"Скетч использует 9364 байт (29%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 3649 байт (178%) динамической памяти, оставляя -1601 байт для локальных переменных. Максимум: 2048 байт.
Недостаточно памяти; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size
Ошибка компиляции для платы Arduino/Genuino Uno."
 

Меток 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="";
    }
    
}

}
 
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

можно не строками хранить, а числом. 

инвариантную часть "2504948485"  отбрасываем (или не отбрасываем, по желанию), число влазит в  uint64_t. 

 В EEPROM можно 128 ключей хранить.  

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

P.S. Скажы, что у тебя за модуль RFID, который SoftwareSerial прикидываеца?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

P.S. Скажы, что у тебя за модуль RFID, который SoftwareSerial прикидываеца?

https://ru.aliexpress.com/af/rdm6300.html?d=y&origin=n&blanktest=0&jump=...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

DIYMan, спасибо.  Так и думал, что на 125 кГц.  Не пайдеть. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

DIYMan, спасибо.  Так и думал, что на 125 кГц.  Не пайдеть. 

Чо так? Удобная штука, кста - не надо геморроя, чем тебе 125 кГц не угодили? :)

croan
Offline
Зарегистрирован: 21.02.2018

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;
 }
}

 

croan
Offline
Зарегистрирован: 21.02.2018

и не могу найти инфу по uint8_t. может кто сталкивался с более менее подробным описанием ?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

croan пишет:

и не могу найти инфу по uint8_t. может кто сталкивался с более менее подробным описанием ?

это unsigned char тривиальный.

bwn
Offline
Зарегистрирован: 25.08.2014

DIYMan пишет:

croan пишет:

и не могу найти инфу по uint8_t. может кто сталкивался с более менее подробным описанием ?

это unsigned char тривиальный.

типа byte, на Ардуиновском.)))

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

croan пишет:

и не могу найти инфу по uint8_t. может кто сталкивался с более менее подробным описанием ?

https://ru.wikipedia.org/wiki/Stdint.h

http://avr-libc.narod.ru/group__avr__stdint.html

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

croan пишет:

"Скетч использует 9364 байт (29%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 3649 байт (178%) динамической памяти, оставляя -1601 байт для локальных переменных. Максимум: 2048 байт.
Недостаточно памяти; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size
Ошибка компиляции для платы Arduino/Genuino Uno."
 

Меток rfid около 100 штук номера у всех разные.

Купил не перезаписываемые по глупости, теперь мучаюсь)

Можно ли как-то изменить скетч чтобы можно было использовать все существующие метки ?

1. Перенести в PROGMEM, после чего сразу освободится 2700 байт оперативной памяти. В принципе этого достаточно. И даже достаточно для того, чтобы добавить еще 500 меток.

2. Если все-таки хочется большего, воспользоваться советом DetSimen, только в uint64_t использовать не двоичное, а двоично-десятичное представление, чтобы из одного байта сразу извлекать 2 цифры вместо очень длительных операций многократного деления uint64_t на степени десятки.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

andriano, а эта бибка номер ключа только текстом отдавать умеет штоли? 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DetSimen пишет:

andriano, а эта бибка номер ключа только текстом отдавать умеет штоли? 

Я понятия не имею, о какой библиотеке речь. В обсуждаемом исходнике фигурирует только SoftwareSerial.

Но когда не хватает памяти для размещения статических данных, возникает два предложения:

1. Поместить данные в более объемное хранилище (возможно, внешнее).

2. Сжать данные.

Ваш ответ был посвящен исключительно 2 способу. Я упомянул, что существует также первый.

Ну и, непосредственно не Ваш вопрос: можно хранить в сжатом виде, а отдавать "только текстом".

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

спасибо.  просто я тоже с такими модулями не работал, вот и спросил.  

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

andriano, а эта бибка номер ключа только текстом отдавать умеет штоли? 

Ага - этот RFID-reader при поднесении ключа пхает его данные в виде строки в UART. На самом деле - крайне удобно, кода - мизер.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Thanx a lot. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

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/

croan
Offline
Зарегистрирован: 21.02.2018

const PROGMEM uint64_t Str[] = { 65253555453653 , 46654545166503 , 64853535451653 };

вроде бы так закидывается в PROGEM ?

а вот как это дело извлекать ?

if (s==pgm_read_uint64_t(Str[i])){
    digitalWrite(yes, HIGH);
   delay(4000);
   digitalWrite(yes, LOW);
   s="";
     }
такая конструкция не работает((
 
"только в uint64_t использовать не двоичное, а двоично-десятичное представление, чтобы из одного байта сразу извлекать 2 цифры вместо очень длительных операций многократного деления uint64_t на степени десятки" - примерно понятно о чем идет речь, но как это реализовать - ума не приложу. можете хотя бы кусочек кода подкинуть чтобы понять в какую сторону копать ? эти моменты для меня пока сложноваты - в голове каша...слишком много информации для новичка)
croan
Offline
Зарегистрирован: 21.02.2018

const PROGMEM uint64_t Str[] = { 65253555453653 , 46654545166503 , 64853535451653 };

по вашему совету откинул инвариативную часть - помогло, спасибо. кстати, в полном виде все цифры не влезали почему-то. или я что-то не так делаю?)

 

Lin-air
Offline
Зарегистрирован: 22.02.2018

Всем привет! Ищу помощи профи поэтому сюда и пришел. Помогите в сборке такой штуки как на фото, но хочется добавить прибору автономности и запитать от небольшой монокристаллической солнечной батареи. Сам я ничего в этом не секу, только паять умею)

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Lin-air пишет:

Всем привет! Ищу помощи профи поэтому сюда и пришел. Помогите в сборке такой штуки как на фото, но хочется добавить прибору автономности и запитать от небольшой монокристаллической солнечной батареи. Сам я ничего в этом не секу, только паять умею)

Вам очень повезло, что я решил ответить первым. Ибо подобные комментарии и просьбы мгновенно огребают тонны ненависти.

Чем Вам помочь? Точнее, какую именно помощь Вы хотите получить? На фото, как я понимаю метеостанция. Вы хотите такую же? Начните с того, что почитайте про метеостанции на ардуино. Таких проектов в интернете тысячи. Прямо так и наберите в гугле "метеостанция ардуино". Здесь Вам обязательно помогут, но с какими-то более конкретными вопросами. Или Вы хотите, чтобы Вам нарисовали схему подключения и написали код? Тоже вроде здесь практикуется, но этим в платном разделе люди занимаются.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Lin-air, сотни ненависти тебе в карму от мня ... Открой тему и огребай там. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А DIYMan в карму одни ништяки. :) 

croan
Offline
Зарегистрирован: 21.02.2018

поиски по теме в сети дали следующий результат, который, к слову, не работает)

пытаюсь вывести в монитор порта значение buffer , но почему-то после надписи "ye" ("s" отсутствует) пишется квадрат и несколько пробелов.

#include <SoftwareSerial.h>
#include <avr/pgmspace.h>
 
// Подключаем сам ридер
SoftwareSerial RfidReader(8, 9);
String s; 
String data1;
bool ok = false;
bool reads = false;
// активируемый порт при считывании валидной карты
int yes = 6;
// активируемый порт при считывании карты не из списка
int no = 7;
 
// Массив с номерами карт. Для увеличения валидных карт просто добавьте еще один массив внутрь
// String Str[] = {
const uint64_t PROGMEM  Str[] = { 65253555453653 , 46654545166503 , 64853535451653 };
 
char newtag[] = {"00000000000000000000000000"}; 
 
void setup(){
 RfidReader.begin(9600);
 Serial.begin(9600); 
 pinMode(yes, OUTPUT); 
 pinMode(no, OUTPUT);
}
 
 
void loop(){
  char buffer[10];
 
 // если карта поднесена
 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 < 10 ; i++){
// следующая строка вызывает вопросы. при подставлении вместо word uint64_t компилятор ругается. не нашел в сети что туда можно было бы прописать
      strcpy_P(buffer, (PGM_P)pgm_read_word(&(Str[i])));
      Serial.println(buffer);
    if (s==buffer){
    digitalWrite(yes, HIGH);
   delay(4000);
   digitalWrite(yes, LOW);
   s="";
     }
    }
    }
  
    else {
    Serial.println(s);
    s="";
    }
    
}
 
}
 
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

del

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

del

Lin-air
Offline
Зарегистрирован: 22.02.2018

Не совсем понятна причина такой агрессии, ну да ладно. 

Итак исходя из всего что я прочитал и увидел в интернете, я понял что точно нужна помощь или совет профессионала по части электроники, поэтому в кратце что хочется получить - это два блока внешний и внутренний.

Внешний блок для измерения температуры, влажности(сухо, дождь), давления, уровня освещенности(солнечно, пасмурно, ночь), скорости(анемометр)и направления ветра (флюгер?), передачи информации на внутренний блок по wifi, вопрос с питанием - возможно ли запитать от солнечной панели внешний блок или нет и каковы будут габариты панели если возможно.

Анемометр - как я понимаю необходимы оптический датчик? Вал крутится, окошко открывается и закрывается, исходя из частоты происходит анализ. Ну это как я себе представляю.

Флюгер - тут мне пока не ясно, может что то посоветуете?

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

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

Заранее благодарен.

bwn
Offline
Зарегистрирован: 25.08.2014

Lin-air пишет:

Не совсем понятна причина такой агрессии, ну да ладно. 

Итак исходя из всего что я прочитал и увидел в интернете, я понял что точно нужна помощь или совет профессионала по части электроники, поэтому в кратце что хочется получить - это два блока внешний и внутренний.

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

Заранее благодарен.

Листаете для начала хотя бы этот форум. Были разные темы по заданным вопросам. Подбираете подходящее оборудование, создаете схему, выкладываете, там возможно пойдет диалог и советы. Программирование тоже придется изучить, либо повезет и найдете единомышленника, что вряд ли. Если хотите готовое, то в "Ищу исполнителя". Это ФОРУМ АРДУИНО.РУ
Ну не делают здесь хотелки, не делают.