Немогу понять цикл и оператор for.
- Войдите на сайт для отправки комментариев
Вс, 14/12/2014 - 23:12
задачка по поиску среднего значения за несколько измерений.
Как из цикла вытащить значение переменной?
for (int i=0; i<20; i++)
{
int a = analogRead(A1);
int b = b+a;
}
serialPrint (b/20);
по каким-то непонятным причинам b остаётся равно 0... хотя если вставить сериалпринт в цикл, то оно растёт.
int b за пределы for вынесите.
И прочитайте про облать действия переменнных. http://arduino.ru/Reference/Scope
объявлял переменную и в сетапе и в лупе, почему-то не помогает. и даже перед сетапом...
for (int i=0; i<20; i++)
{
int a = analogRead(A1);
int b = b+a;
}
serialPrint (b/20);
Переменную нужно объявлять, глобально до лупов и сетапов или static или локально действуют для данной функции в твоем случае i и a объявлена обосновано. b объявлена локально и будет видна только в цикле for. Ещё b=b+a так b+=a по феньшую будет.
string2004, переменная b должна быть не int а float. (или результат задать как float) И само собой сбрасывайте её где-нибудь, а то будет геометрически расти)
а на кой она должны быть float ? предпосылок к использованию в виде float явно нет ... Тут явно не дробные числа... Лучше уж insigned int
В остальном все верно обьяснено. Весь код в можо увидеть.
спасибо, разобрался!
если кому надо...
float b = 0;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
//int b = 0;
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
for (int i=0; i<50; i++)
{
int a = analogRead(A0);
b = b+a;
// Serial.print (b);
// Serial.print (" ");
// Serial.println (i);
delay(3);
}
Serial.print (b/50);
b=0;
Serial.print (" ");
// print out the value you read:
Serial.println(sensorValue);
delay(500); // delay in between reads for stability
объявленная в цикле переменная видна только в этом цикле.
float потому что сумма 20и значений АЦП не всегда кратна 20
string2004, по идее если поставить (b/50.0) , то компилятор автоматически сочтёт выводимый результат как float. Тогда b можно оставить интом, но это уже как говорится "игра слов" :)