Вставить переменную в новый цикл из старого
- Войдите на сайт для отправки комментариев
Чт, 26/02/2015 - 10:08
Есть необходимость расчитать ряд формул в таком порядке:
1 a=u/t;
2 b=a*100;
3 y=b-100;
4 y=y+(a);
Вопрос в следующем: как получить переменную (а) в каждом новом цикле из предыдущего?
О каком цикле речь? Так и получайте по имени "a"
в первой строке "float c". В сетапе добавляем строку c=u/t; Строку "y=y+a" меняем на "y=y+c; c=a;"
Зачем считать в цикле а если оно потом всё равно не используется.
в таком виде, как сейчас ни приращения, ни убывания переменной у не происходит.
Вы понимаете что у Вас никакого приращения и убывания и не будет пока у Вас y локально объявлена?
Как я понял алгоритм работы скетча, сетап выполняется только при первом включении, а дальше выполняются только условия, описанные в лупе. Или я неправильно понял?
Сделайте объявление переходящих переменных вне процеду/функций/команд. Тогда они будут доступны из всей программы. Только учитывайте что такие переменные постоянно поедают память и нужно делать правильный баланс чтобы избежать переполнения RAM.
Мне всего лишь нужно одну переменную "а" из каждого предыдущего цикла вставлять в новый цикл или новый loop, как понятней не знаю. Неужели такие сложности запомнить одну переменную и вставить её значение в следующий цикл работы программы?
3е сообщение прочитайте
#include <OneWire.h> OneWire ds(10); void setup() { Serial.begin(9600); float c; float u; float t; c=u/t; } void loop() { //инициализация уставки температуры: float u = analogRead(0); u = map(u, 0, 1023, 0, 40); float c; float a; float b; float t=26; float y; a= u/t; b=a*100; y=b-100; y=y+c; c=a; Serial.println(y); Serial.println(u); Serial.println(t); Serial.println(" "); delay (3000); }Вот такой вид принял код. Вроде всделал, как вы сказали, но результат нулевой.
вы снова переназначили float в лупе,зачем вы делаете эту глупость,из-за этого при каждом проходе цикла ваши переменные обнуляются...вместо
floatu = analogRead(0); нужно писать простоu = analogRead(0); и тд...удалите строки с 15 по 26 вообще,вместо 19 напишите просто t = 29;...все,хеппи енд..вижу у вас там есть еще заморочка с "с",понимаю так что вы пытались сохранять через нее прошлое значение "а"...не могу вам помочь больше,так как не совсем понял суть происходящего в скетче вообще,что вы хотите от него,ну в смысле зачем вам те цифры которые вы получаете в расчете=)Советую прочитать про "Область видимости переменных C++", если даже после этого понимание не придет - то нанять репититора который сможет "на пальцах" обьяснить что это такое. И как правильно это использовать.
попробуйте так
#include <OneWire.h> OneWire ds(10); float c; float u; float t; float a; float b; float y; void setup() { Serial.begin(9600); c=u/t; } void loop() { //инициализация уставки температуры: float u = analogRead(0); u = map(u, 0, 1023, 0, 40); t=26; a= u/t; b=a*100; y=b-100; y=y+c; c=a; Serial.println(y); Serial.println(u); Serial.println(t); Serial.println(" "); delay (3000); }тут можно/нужно либо удалить строку 4,либо подправить 16..
да, 16ую можно поправить, но смысл вроде как остается....
Переменная а=u/t, это разность показаний между уставкой и действительной температурой. u соответственно уставка температуры, а t её действительное значение в этом цикле работы программы. Это вырезка из программы, я не стал для вопроса вписывать инициализацию датчика температуры. y- выходная мощность регулятора. А с должна стать поправочным коэффицентом для регулятора, который должен стремиться привести регулятор к 0 выходной мощности. Это обычный регулятор температуры.
ну так сделайте переменные глобальными....
Опять за рыбу деньги, вы код вам предложенный попробовали?
Пробовал. В том виде, как его предложили компилятор ругается. Как можно в сетапе написать формулу с переменными, которые ещё не объявлены? Я так понял поэтому он и не компилирует.
нет,не поэтому...переменным которым не назначено значение,компилятор по-умолчанию присваивает 0..
вот я тупо скопировал код выше и скомпилировал...
всё объявленное выше лупа, сетапа, процедур-подпрограмм - видно всегда и всем....
Как можно в сетапе написать формулу с переменными, которые ещё не объявлены?
они объявлены ВЫШЕ и видны в сетапе
Я так понял поэтому он и не компилирует.
пришлите текст сообщения, а не что вы поняли.... если код урезанный, то инициализируйте все объявленные переменные чем-нибуть, хоть с потолка...
зачем вам среда IDE версии 1.6.0,у вас есть плата ардуино due??смените на версию пониже,мне кажется еще и отсюда ноги растут..
Я думаю всё дело в контерстрайке :)
только Steam,только по-чесному=)))IDE больше вообще не пользуюсь,как видите юзаю Visual Studio,нарадоваться не могу...
float c; float u; float t; void setup() { Serial.begin(9600); u = 30; t = 24; c=u/t; } void loop() { t++; float a = u/t; float b =a*100; float y = b-100; y=y+c; c=a; Serial.println(y); Serial.println(c); delay (3000); }Вот немного поправлено то что писал msng. Заданная температура 30, начальная с термометра 24. На каждом цикле температура с термометра увеличивается на 1. y расчитывается с использование значения a полученного на предыдущем цикле вычисления. В монитор выводится y и значение c которое будет использовано в следующем цикле.