Создать пользовательский блок

Вопросы от новичков
Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#1

Сообщение ykamerton » 26.07.2019{, 11:08}

А кто сможет с библиотеки вырезать нужный кусок и создать блок .

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создать пользовательский блок

#2

Сообщение Dryundel » 26.07.2019{, 11:36}

ykamerton писал(а):
26.07.2019{, 11:08}
А кто сможет с библиотеки вырезать нужный кусок и создать блок .
Это сможет тот, кто знаком с программированием контроллеров не только на C+ , но и на низкоуровневых языках.

(Каков вопрос - таков ответ. :) )

А есть смысл кромсать библиотеку? В чем прикол? Не проще воспользоваться нужной функцией данной бибки?
Последний раз редактировалось Dryundel 26.07.2019{, 11:52}, всего редактировалось 1 раз.

Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#3

Сообщение ykamerton » 26.07.2019{, 11:51}

Поставим вопрос по другому.
Кто может в скетче IDE c используемой библиотекой вырезать нужный кусок и создать из него блок
с входом и выходом в флпрог.

Отправлено спустя 2 минуты 29 секунд:
Не поясняю не выкладываю скетч чтоб не засорять напрасно эфир, вдруг не кто не может.

Отправлено спустя 1 минуту 2 секунды:
Хотя для спецов плевое дело,

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создать пользовательский блок

#4

Сообщение Dryundel » 26.07.2019{, 11:59}

ykamerton писал(а):
26.07.2019{, 11:51}
Поставим вопрос по другому.
Кто может в скетче IDE c используемой библиотекой вырезать нужный кусок и создать из него блок
с входом и выходом в флпрог.
Те же яйца, только пасхальные. Но уже теплее.
ykamerton писал(а):
26.07.2019{, 11:55}
Не поясняю не выкладываю скетч чтоб не засорять напрасно эфир, вдруг не кто не может.
Уточните пожалуйста, это секретная библиотека от NASA ? Вы ее как то сперли и не хотите светить? А блок который Вы хотите написать должен послать Ардуину к альфа Центавры? Секретность с пометкой особо?
ykamerton писал(а):
26.07.2019{, 11:55}
Хотя для спецов плевое дело,
Ну тогда может сразу к спецам?
Оф сайт NASA

Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#5

Сообщение ykamerton » 26.07.2019{, 12:12}

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

Отправлено спустя 20 минут 33 секунды:
Dryundel писал(а):
26.07.2019{, 11:59}
Оф сайт NASA
Тут не занимаются скетчами подобных.... не нашел услуги.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Создать пользовательский блок

#6

Сообщение aidar_i » 26.07.2019{, 12:37}

Выложите исходники, может и поможем,и если не очень сложно. Тут многие могут. А то зачем в ступе воду толочь?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создать пользовательский блок

#7

Сообщение Dryundel » 26.07.2019{, 12:43}

ykamerton писал(а):
26.07.2019{, 12:33}
Чо так грубо, я спросил сначала думал побьют.вдруг ни кто не согласен зачем сыр бор, но все равно получил по лбу...спс.
Извини, не хотел обидеть.
Зря Вы так думаете. За конструктивный спрос никто бы не возмутился. А так, теоретический вопрос без конкретики. Автоматом ругательства и стёб на язык сыплются.
Если действительно нужно - выкладывай исходники и хотелки. Есть большая вероятность что обязательно помогут.

Отправлено спустя 57 секунд:
Опоздал с ответом. :)

Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#8

Сообщение ykamerton » 26.07.2019{, 12:53}

aidar_i писал(а):
26.07.2019{, 12:37}
Выложите исходники, может и поможем
Вот спс.
В этом скетче нужно убрать весь мусор(свет диоды и прочие) оставить лишь один LC генератор
и сделать блок с входом на катушку и выходом на пин.
СпойлерПоказать
#include <analogComp.h>

// программа - Измеритель-толщины покрытия.
// идея отсюда: https://github.com/sae/Arduino-LCQmeter ... LC-gen.ino
/*
simplest LC-generator on arduino
can be used as lc-meter
(C)SAE762 07.feb.2015 @home
circuit diagramm D2---R(100...1000)---D6---LC---GND; D7---GND
*/

#include <EEPROM.h> // библиотека чтения-записи eeprom
#include "analogComp.h" // библиотека, скчана с гитхаба

/* проверка работы eeprom
*/
//***************** ФУНКЦИИ***********
//This function will write a 2 byte integer to the eeprom at the specified address and address + 1
// эта функия записывает двухбайтовое целое число в РППЗУ по указанному адресу

void EEPROMWriteInt(int p_address, int p_value)

{
byte lowByte = ((p_value >> 0) & 0xFF);
byte highByte = ((p_value >> 8) & 0xFF);

EEPROM.write(p_address, lowByte);
EEPROM.write(p_address + 1, highByte);
}

//This function will read a 2 byte integer from the eeprom at the specified address and address + 1
// эта функия считывает двухбайтовое целое число в РППЗУ по указанному адресу

unsigned int EEPROMReadInt(int p_address)
{
byte lowByte = EEPROM.read(p_address);
byte highByte = EEPROM.read(p_address + 1);

return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}
//********конец объявления фунций************
//обявление переменных
int ctl=2 ; // нога для накачки энергии в контур
int led=13; // нога светодиода

int rise=0; // счетчик переходов через 0
int fall=0; // такой же стетчик
int summ; //накопительный счетчик
int tchk=300; // время измерения
int zero=11625; //отладка
int delta=0; //разница между содержимым eeprom и результатом измерения

//присвоим номера пинов светодиодов
int vbat=0; //напряжение батареи
int vbatpin=6; // аналог вход 6
int mredled=3; // красный светодиод -
int mblueled=4; //синий светодиод -
int mwhiteled=5;//белый светодиод -
int greenled=8;//зеленый светодиод
int pwhiteled=9;//белый светодиод +
int pblueled=10; //синий +
int predled=11; //красный +
// присвоим границы
//++++++++++++++++++++++++++++++++
// тут придется внести ВАШИ значения!!!!
//===============================
int pgreen=25; // граница ОК в плюс
int mgreen=-10;// в минус
int pwhite=55; // граница подозрительно в +
int mwhite=-30;// подозрительно в -
int pblue=100; // крашено
int mblue=-60; // шлифовано
//int pred=130; // шпаклевка
//int mred=-60;//металл



void setup() {
// put your setup code here, to run once:
summ=0;// инициализация накопителя
Serial.begin(9600); // настроим порт УБРАТЬ ПОСЛЕ ОТЛАДКИ
pinMode(led, OUTPUT); //
pinMode(ctl, OUTPUT); // инициализация выхода накачки
//настроим выхода под светодиоды
pinMode(mredled, OUTPUT);
digitalWrite(mredled, HIGH);
pinMode(mblueled, OUTPUT);
digitalWrite(mblueled, HIGH);
pinMode(mwhiteled, OUTPUT);
digitalWrite(mwhiteled, HIGH);
pinMode(greenled, OUTPUT);
digitalWrite(greenled, HIGH);
pinMode(pwhiteled, OUTPUT);
digitalWrite(pwhiteled, HIGH);
pinMode(pblueled, OUTPUT);
digitalWrite(pblueled, HIGH);
pinMode(predled, OUTPUT);
digitalWrite(predled, HIGH);

// тут можно дорожку сделать для индикации светодиодов, если очень хочется
// инициализация компаратора и прерываний
digitalWrite(ctl, LOW);
analogComparator.setOn(AIN0, AIN1);//D6+,D7-
analogComparator.enableInterrupt(comparatorInt,CHANGE);
// проверка режима работа/установка 0
vbat = analogRead(vbatpin); // считываем значение
if (vbat>50) { // если напруга больше 0 запускаем установку 0
rise=0;
// индикация разряженной батареи, но установка 0 продолжается
if (vbat < 700) {digitalWrite(mredled, LOW);digitalWrite(predled, LOW);}
//if no pulses, make a start impulse
if (rise==0) {
pulse();
}
// первый проход
summ=0;
digitalWrite(led, LOW);
rise=0;
fall=0;
delay(tchk); // wait for a second
//Serial.println(rise); // вывод на псолед порт, убрать после отладки
summ=summ+rise;
// второй проход
rise=0;
fall=0;
delay(tchk); // wait for a second
summ=summ+rise;
//третий проход
rise=0;
fall=0;
delay(tchk); // wait for a second
summ=summ+rise-15; // -15 странный костыль видимо недосчет во время обработки прерывания
// Serial.print(summ); // убрать после отладки
//вычислим среднее
summ=summ/3; // вот это и есть измренное значение по результатам трех проходов
// это условная толщина покрытия в попугаях
// зная ее, можно с помомощью нехитрых арифметических действий, определить реальную толщину покрытия
//то есть померить калиброванную пленку разной толщины, записать результаты, а потом подобрать коэффициенты.

digitalWrite(led, HIGH);
EEPROMWriteInt(0,summ); //занесем в eeprom
digitalWrite(greenled, LOW); // зажжем зелененький
while (1); // застопорить нахрен после установки 0 !!!!!!!
}
}
// конец процедуры установки
// тут переход к процедуре измерения
//!!!!!Главный цикл!!!
void loop() {
// тут процедура измерения
rise=0;
//Serial.println(EEPROMReadInt(0)); // выводим полученное значение
//if no pulses, make a start impulse
if (rise==0) {
pulse();
}
// первый проход
summ=0;
digitalWrite(led, LOW);
rise=0;
fall=0;
delay(tchk); // wait for a second
summ=summ+rise;
// второй проход
rise=0;
fall=0;
delay(tchk); // wait for a second
summ=summ+rise;
//третий проход
rise=0;
fall=0;
delay(tchk); // wait for a second
summ=summ+rise;
// Serial.print(rise);
//вычислим среднее
summ=summ/3;
delta=summ-EEPROMReadInt(0);
Serial.print(EEPROMReadInt(0)); // из памяти
Serial.print(";");
Serial.print(delta);
Serial.println(" pulses/tchk");
digitalWrite(led, HIGH);
if (delta >= mgreen && delta <= pgreen ) {digitalWrite(greenled, LOW);}
if (delta < mblue) digitalWrite(mredled, LOW);
if (delta >= mblue && delta < mwhite ) digitalWrite(mblueled, LOW);
if (delta >= mwhite && delta < mgreen) digitalWrite(mwhiteled, LOW);
if (delta > pblue) digitalWrite (predled,LOW);
if (delta > pwhite && delta <= pblue) digitalWrite (pblueled,LOW);
if (delta > pgreen && delta <= pwhite) digitalWrite (pwhiteled,LOW);
while (1); /// тормоза. измерение окончено
delay(1000); // wait for a second


}





/**
not so clear "magic" with interrupt
we need to block int's when make a power impulse
comparator is connected directly to capacitor
*/
boolean waitforRise=false;

//this function is called when comparator change status
//as set in ACSR register
void comparatorInt() {

if (waitforRise) { //if we waiting for rise
ACSR &= ~(1<<ACIS0);//set interrupt for falling
ACSR |= (1<<ACIS1);
waitforRise=false;
rise++;
} else { //if we waiting for fall
ACSR &= ~(1<<ACIE); //disable interrupt
//impulse to support an oscillations
pulse();
ACSR |= (1<<ACIE); //enable interrupt
ACSR |= ((1<<ACIS1) | (1<<ACIS0)); //set interrupt for rising
waitforRise=true;
}
}

//send power impulse to LC
void pulse() {
pinMode(ctl, OUTPUT);
digitalWrite(ctl, HIGH);
rise++;//make something useless )
//digitalWrite(ctl, LOW);
pinMode(ctl, INPUT);
}
СпойлерПоказать
Безымянный1.jpg
https://volt-index.ru/high-tech/arduino ... duino.html
Вложения
thickmeter.ino
(9.03 КБ) 48 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создать пользовательский блок

#9

Сообщение Dryundel » 26.07.2019{, 13:28}

ykamerton писал(а):
26.07.2019{, 12:53}
Вот спс.
В этом скетче нужно убрать весь мусор(свет диоды и прочие) оставить лишь один LC генератор
и сделать блок с входом на катушку и выходом на пин.
Ок. Видимо без наводящих вопросов никак.
Итак. Имеем бытовой измеритель толщины лакокрасочного покрытия. Который сигнализирует - Норм, подозрительно, слишком толсто, слишком тонко.
Что хотим получить в итоге? Вместо индикаторов реальную толщину покрытия в цифровом формате? Или что то вообще иное?
ОфтопПоказать
А вот с вырезанием куска из библиотеки ваши хотелки ну уж точно никак не связаны. :)

seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 22
Откуда: Кременчуг
Имя: Сергей

Создать пользовательский блок

#10

Сообщение seri0shka » 26.07.2019{, 16:11}

ykamerton, не путайте входы/выходы контроллера (ардуино) и входы/выходы блока. В данном случае блок предположительно будет иметь только один выход, на который выдаётся переменная, обозначающая толщину покрытия в условных попугаях. Но физически будет задействовано три пина Ардуино, которые при этом не являются ни входами, ни выходами блока.

Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#11

Сообщение ykamerton » 26.07.2019{, 19:42}

Вот сделал Чел, только открыть не могу.
СпойлерПоказать
Безымянный11.jpg
Вложения
компаратор(пины_D6_,D7-)_(CODE).zip
(1.23 КБ) 48 скачиваний

Аватара пользователя
nikmotorin60
Рядовой
Сообщения: 35
Зарегистрирован: 29.04.2016{, 09:54}
Репутация: 2

Создать пользовательский блок

#12

Сообщение nikmotorin60 » 26.07.2019{, 20:41}

Кто бы объяснил, зачем вывод D7 в схеме толщиномера соединен с GND&

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создать пользовательский блок

#13

Сообщение Dryundel » 26.07.2019{, 20:46}

ykamerton писал(а):
26.07.2019{, 19:42}
Вот сделал Чел, только открыть не могу.
Ну так может у Чела спросить в чем дело?
У меня тоже не открылся.
А что за компаратор? Для чего? Поделитесь идеей.

Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#14

Сообщение ykamerton » 26.07.2019{, 23:22}

LC генератор , заглючил у него Flprog переписал блок еще не проверял, описание в блоке.
как и грил два входа на катушку и выход частоты.

Отправлено спустя 1 минуту 10 секунд:
блок с той же библией.
Вложения
компаратор_(CODE).zip
(2.3 КБ) 54 скачивания

Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#15

Сообщение ykamerton » 27.07.2019{, 13:46}

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

Отправлено спустя 40 секунд:
Нужно самому кумекать.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создать пользовательский блок

#16

Сообщение Dryundel » 27.07.2019{, 14:06}

ykamerton писал(а):
27.07.2019{, 13:47}
Ничего у меня не запускается, импульс проходит и все. нет ни какой генерации фуфло это все....

Отправлено спустя 40 секунд:
Нужно самому кумекать.
Поделитесь затеей. Что в итоге должно получиться? Возможно есть готовое решение.

Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#17

Сообщение ykamerton » 27.07.2019{, 15:35}

Мне нужен LC генератор всего лишь, подключить к пинам катушку чтоб она загенерила своей частотой
а эту частоту уже пустить на обработку. - типа простой металдетектор.
СпойлерПоказать
Безымянный3333.jpg
MetFM.GIF
MetFM.GIF (9.05 КБ) 1049 просмотров

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создать пользовательский блок

#18

Сообщение Dryundel » 27.07.2019{, 17:05}

Как вариант: берем сигнал с LC контура пропускаем через триггер Шмитта и сажаем его на пин с прерыванием. Скоростным счетчиком измеряем импульсы, получаем частоту.

Аватара пользователя
ykamerton
Сержант
Сообщения: 292
Зарегистрирован: 03.09.2017{, 00:31}
Репутация: 3
Откуда: Воронеж ykamerton@yandex.ru

Создать пользовательский блок

#19

Сообщение ykamerton » 27.07.2019{, 18:32}

Dryundel писал(а):
27.07.2019{, 17:05}
Как вариант: берем сигнал с LC контура пропускаем через триггер Шмитта и сажаем его на пин с прерыванием. Скоростным счетчиком измеряем импульсы, получаем частоту.
Собираю на отдельной микре генератор, пускаю на вход скоростного - это понятно
но как сделать внутренний генератор не цеплять отдельно микросхему.
Вот это мне и нужно. Не ужеле никто не делал на 328 меге, есть включают генераторы на тиньке13 даже.
не могу понять куда они цепляют эту катушку с кондерами.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создать пользовательский блок

#20

Сообщение Dryundel » 27.07.2019{, 18:46}

ykamerton писал(а):
27.07.2019{, 18:32}
но как сделать внутренний генератор не цеплять отдельно микросхему.
Вот это мне и нужно.
Так Вам генератор нужен, а не измеритель LC контура?

Ответить

Вернуться в «Начинающим»