Помогите, пожалуйста! Вот код. Он должен обрабатывать по методу наименьших квадратов показания датчика пульса(он показывает на шкале от 0 до 1023, причём не пропорционально) и выводить значения. При вводе значений вначале(там где измерить и ввести реальный пуль получается так: Я ввожу пульс, он пишет 56 или 57(как получится), в следующей строчке ввода пульса он просто не спрашивая вводит 55, 56 или 57, и так ещё 5 раз. Дальше всё он видимо считает из этих значений. Почему? Код (C++): int a_work; int b_work; int summa_x=0; int summa_y=0; int summa_x2=0; int summa_xy=0; int P_D=0; int x_work[9]; int y_work[9]; int y; int ggg; int ggj; void setup() { // put your setup code here, to run once: Serial.begin(9600); while(!Serial) ; MNK(); // int optimal_puls=0.7*((220-vozrast)-mem)+mem; } void loop() { int puls=(analogRead(A4)*a_work)+b_work; Serial.print(puls); Serial.print(" iz "); Serial.println(analogRead(A4)); delay(1000); } void MNK(){ for(ggj=0;ggj<=9;ggj++){ delay(10000); Serial.flush(); Serial.println("Izmerte i vvedite vash puls"); while(!(Serial.available())){} y_work[ggj]=Serial.read(); Serial.println(y_work[ggj]); for(ggg=0;ggg<=9;ggg++){ P_D=P_D+analogRead(A4);//P_D-показания датчика } P_D=P_D/5; x_work[ggj]=P_D; } for(ggj=0;ggj<=9;ggj++){ summa_xy=(x_work[ggj]*y_work[ggj])+summa_xy; } for(ggj=0;ggj<=9;ggj++){ summa_x=summa_x+x_work[ggj]; } for(ggj=0;ggj<=9;ggj++){ summa_y=summa_y+y_work[ggj]; } for(ggj=0;ggj<=9;ggj++){ summa_x2=summa_x2+(x_work[ggj]^2); } a_work=(10*summa_xy)-(summa_x*summa_y)/((10*summa_x2)-((summa_x)^2)); b_work=((10*summa_y)-(a_work*summa_x))/10; }
Функция MNK вызывается один раз при запуске. Дальше по кругу печатается показание аналогового пина и производной от него.
Спасибо большое за ответ! Просто я не понимаю, почему он пишет произведения, ведь он в цикле должен 10 раз писать то же, что я и ввожу. Разве нет?
Я не совсем понял что делает этот цикл, но он делает это один раз. А вам вроде бы надо постоянно или я что то путаю? Что вообще должно происходить?
В функции MNK должно внутри цикла фор 10 раз происходить такое: 1. Ожидание 10 секунд 2. Очистка сериал порта 3. Просьба ввести пульс 4. Ожидание, пока я что-то напишу 5. Он пишет то же, что я ему ввёл(должен писать) 6. Считывает показания датчика(5 раз, чтобы избежать шумов и затем их среднее арифметическое) 7. Рассчитывает методом наименьших квадратов(МНК)(см. картинку) а и в, при функции у=ах+в. МНК: По факту он после 4 действия, вместо 5-го, пишет либо 55, либо 56, либо 57, затем, даже не спрашивая меня, пишет то же самое. Так ещё 5 раз. Функция нужна для калибровки, поэтому запускается только 1 раз в сетапе. Затем он должен просто писать пульс и из каких показаний он его получил.