помогите понять смысл куска скетча
- Войдите на сайт для отправки комментариев
Чт, 02/02/2017 - 13:49
Есть вот такой кусок скетча:
float getVPP()
{
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(sensorTA12);
// see if you have a new maxValue
if (readValue > maxValue)
{
/*record the maximum sensor value*/
maxValue = readValue;
}
}
// Convert the digital data to a voltage
result = (maxValue * 5.0)/1024.0;
return result;
}
Правильно ли я понимаю, что здесь происходит вычисление float getVPP() ? И всё, что после этой записи находится в скобках{} лишь расчёт?
запоминается время затем в течении секунды относительно этого времени измеряется уровень сигнала и запоминается самый большой. затем он (самый большой) пересчитывается и возвращается в основную программу вольтах судя по формуле
Максимальное напряжение на входе sensorTA12 за 1 секунду. Тоесть в течении 1 сек он измеряет находя максимум, потом расчитывает напряжение.
))) все же в комментариях написано, только сейчас прочитал их))) тс мог бы хоть переводчиком перевести
И хранится это максимальное значение в float getVPP() ?
Комментарии я перевел и они мне понятны. Но мне ен совсем понятен этот заковыристый язык программирования.
Говоря по-русски, float getVPP() = всё остальное, что замкнуто в скобки после эхтой строки?
Или точнее float getVPP() = float result; а float result; = всё остальное, что ниже этой строки?
что внутри float getVPP() в скобках { в начале и } в конце это кусок программы завернутый в функцию с названием float getVPP(). в программе проще разобраться если разбить на функции, а также есть какой то кусок может повторятся несколько или много раз в коде
функция объявляется (function это название, может быть любым, но оригинальным):
void function() просто функция что то сделает
void function(int i) функция в которую еще передается какой то параметр, исходя из которого функция может по разному работать. параметров может быть несколько
float function() функция которая что то делает и должна вернуть значение. может быть не только float а любой размерности, например byte/ пример millis() если ее вызвать он возвращает количество миллисекунд
float function(int i) тоже самое но в нее еще передается какой то параметр
С функцией float getVPP() более или менее понятно. Она возвращает значение float result. А вот millis() не совсем понял как и куда она возвращает миллисекунды?
time=millis();
millis пересчитывает текущее время и возвращает его значение из функции, затем оно записывается в time. может так понятнее
float getVPP() делает тоже самое. что то делает и возвращает число туда откуда вызывали функцию
Комментарии я перевел и они мне понятны. Но мне ен совсем понятен этот заковыристый язык программирования.
назовите тот, который вам понятен. ;)
я готов переписать код на понятном вам языке. ;)
С функцией float getVPP() более или менее понятно. Она возвращает значение float result. А вот millis() не совсем понял как и куда она возвращает миллисекунды?
она наращивается, цикл продолжается пока разница меньше предшествующей миллис одна секунда
Так стало понятнее?
Вы зачем вообще полезли разбирать код, не зная программирования? Мотивация какая? Вам будет очень трудно. Ведь в этой области даже "букварь" для Вас непонятен. Может не стоит оно того?
FBD, если можно.
Я и не особо хочу лезть сюда. Но блок для FBD делается на текстовом языке. Никто тот блок, который мне нужен делать пока не собирается. Поэтому приходится самому, по немногу, с помощью хороших и знающих людей, реализовывать его. Так что извините за мою безграмотность в данном вопросе.
Или точнее float getVPP() = float result; а float result; = всё остальное, что ниже этой строки?
Да, прочтите уже хоть какую-нибудь книжку по языку С, ну сколько ж можно ...
Или точнее float getVPP() = float result; а float result; = всё остальное, что ниже этой строки?
Да, прочтите уже хоть какую-нибудь книжку по языку С, ну сколько ж можно ...
тут думаю с бэйсика надо начинать )))
Помнится я на первом курсе сдавал экзамены и один из вопросов был вопрос о различии формальных и фактических параметров функции и я сел в лужу, если не ошибаюсь, получил трояк с натяжкой. Зато на третьем был отмечен оценкой отлично автоматом по программированию :) так что "лиха беда начало". Я не говорю, что из ТС что то получится, просто всяко бывает.
Так очень понятно. Премного благодарен!
FBD, если можно.
Выё...ваемся? Некрасиво это...
FBD - не получится, картинки мне не в чем рисовать.
Но текстовый вид - это ST, например. Думаю, что Вам подойдет. Другой раз думать станете, перед тем как пальцы гнуть.
могут быть мелкие ошибки... этой чухней я уже лет 20 не пользовался.
Чтобы впредь не возникало таких недорозумений, дам всю информацию по этой теме. Я слесарь КИПиА. Работаю наладчиком автоматики. Появилась у меня идея сделать датчик переменного тока для определения работоспособности разного рода эл. моторов и пр. С текстовыми языками у меня туго. Пробовал изучать паскаль, вроде нравится, но времени на это катастрофически не хватает. А тут наткнулся на программу flprog. Там можно программировать ардуину на языке FBD. Этот язык мне более чем знаком. Так как схемы я читаю на отлично. Но среда программирования молодая и функциональных блоков маловато. Необходимого мне тоже не нашлось. Ждать его можно долго. А тут разработчик реализовал возможность создания блоков текстовыми языками. Я решил попробовать. Нашел на просторах интерента скетч для измерительного трансформатора TA12-100 и на его основе пытаюсь сделать бок на FBD для дальнейшего его использования. Надеюсь теперь всё понятно. А вот исходный код и автор сего творения :
Бедный человек!
Ты в самом деле представляешь себе работу автоматики только в этих адовых картинках?
----
Уж прости, сам рисовать не стану, это непедагогично, но объясню в терминах это жуткой мути - flprog - как тебе нарисовать нужное.
ИТАК:
1. добавляешь аналоговый вход.
2. добавляешь две переменные, одну float, другую int. Float - для результата, int - для промежуточного максимума.
3. millis() в этой поделке недоступна. Как будем поступать? Нет ничего проще! Делаешь генератор на период (тут важно не зырываться, потому, что эта херня ничего не проверяет на реальность) допустим 1 мс или 500 мкс, не меньше. И счетчик.
4. делаешь 1000 измерений, для генератора 1 мс или 2000 для 500 мкс. Тут есть хитрость. Импульс генератора - он как синхроимпульс для фиксации измерения. Сумеешь такое сам нарисовать?
5. В каждом измерении сравниваешь вход и переменную для максимума и записываешь в нее MAX. Тут понятно?
6. арифметикой вычисляешь из полученного "макса" значение в вольтах и записываешь его в результирующую переменную, или просто на выход отправляешь, смотря, что тебе нужно.
--------------------
еще раз: понятно ли как обойти отсутствие millis() в flProg? Генератором и счетчиком, таймером не выйдет, тебе импульс EN нужен столько раз, сколько измерений тебе нужно сделать.
------
и еще раз: понятно ли, зачем делать много измерений и искать максимум? Для получения АМПЛИТУДНОГО значения, из которого, потом, можно посчитать действующее.
Синхронный мультивибратор. На вход генератора подается измеряемая величина (датчик тока). В зависимости от мощности сигнала количество импульсов на выходе генератора будет разное. Количество импульсов считается счётчиком и выдается в виде числа int. Наверное не то. Потому как я не могу понять как отделить разные измерения?
Не получилось у меня пока. Что значит генератор на период 1мс? И какой выход должен быть у этого генератора, в каких еденицах? 4 пункт тоже боюсь неправильно понял. Как я понимаю в момент импульса генератора должно фиксироватся текущее значение измерения с аналогового входа? Чем оно должно фиксироватся и куда записыватся? И чем можно сравнить максимальное значение измерения и текущее, чтобы на выходе сравнения получилась int переменная?
Вот это занимает 100 микросекунд, для нахождения максимума нужно сделать более 200 измерений, у коде их 1000,
это не работает?
ТС нужно все нарисовать в FBD, он не умеет программировать иначе.
Проверьте пожалуйста, всё ли в этом коде правильно?
Он вроде работает, но может здесь что не так? Яведь с текстом не осободружен.
все хорошо, если работает, ничего не нужно трогать. Много лишних переменных, но о них пусть компилятор позаботится.