Округление среднего числа
- Войдите на сайт для отправки комментариев
Я немного не пойму почему не работает код, из-за округления , кажется всё правильно делаю, а в реальности как программа доходит до округления зависает. вот на этой строчке
sensorValue[pos]= int((val2+val1)/2);
и не пойму почему максимальное не находит, всё кажется очень элементарно.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
int max_v = 0;
int angel = 0;
int step1 = 1;
int sensorPin = A0; // select the input pin for the potentiometer
int total=180;
int val2=0;
int val1=0;
int sensorValue[180]; // variable to store the value coming from the sensor
void setup() {
// declare the ledPin as an OUTPUT:
myservo.attach(9);
Serial.begin(9600);
}
void loop() {
for(pos = 0; pos < total; pos += step1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(10); // waits 15ms for the servo to reach the position
sensorValue[pos] = analogRead(sensorPin);
}
for(pos = total; pos>=step1; pos-=step1)
{
myservo.write(pos);
delay(10);
val2 = analogRead(sensorPin);
val2 = sensorValue[pos];
// sensorValue[pos]= int((val2+val1)/2);
if(sensorValue[pos]>max_v)
{
max_v=sensorValue[pos];
angel=pos;
}
}
Serial.println("New");
Serial.println(max_v);
Serial.println(pos);
//delay(3000);
}
Посмотрите как текст скетча в форум вставлять.
Во втором цикле sensorValue[pos] выходит за пределы в первой итерации, так как pos = 180.
В массиве у Вас 180 элементов, от 0 до 179
Я немного не пойму почему не работает код, из-за округления
sensorValue[pos]= int((val2+val1)/2);
Ну, во-первых результат (2+3)/2 - строго говоря, вовсе не инт (особенно, если для себя делать).
Во-вторых, усреднять имеет смысл за период, или, например, за десяток измерений: сначала их все складываем, а потом, в конце цикла - один раз делим.
Смысл Вашего усреднения при непрерывно меняющейся позиции сервы, честно говоря, от меня ускользнул.
А еще предлагаю внмательно посмотреть на эти две строки из вашео кода: