Как поменять коефициенты из под меню?

Igoreck
Offline
Зарегистрирован: 01.03.2017

Здравствуйте форумчане.

#include <PID_v1.h>
double Setpoint, Input, Output;
double Kp = 1, Ki = 0.5, Kd = 0; //Хочу менять эти значения.
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

Хочу менять значения коефициентов из под меню, в реальном времени.

Как реализовать, помогите!

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Тебе срочно нужны двое из ларца.  И не забудь ношкой топнуть

renoshnik
Offline
Зарегистрирован: 11.04.2013

"из под меню" не получится ПОД менём месту нету, мозно папробавать из НАД меню минять кафицеты.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Igoreck пишет:

Как реализовать, помогите!

А как Вы пытались?

Для этого в библиотеке есть два метода.

void PID::SetTunings(double Kp, double Ki, double Kd)

и

void PID::SetTunings(double Kp, double Ki, double Kd, int POn)

С ними что-то не так? Давайте Ваш код.

Igoreck
Offline
Зарегистрирован: 01.03.2017
#include <EEPROM.h>

#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 1);
extern uint8_t SmallFont[];

//+++++++++++++++++++++++++++++++++++++++++++
#define CLK 5
#define DT 6
#define SW 4
#include "GyverEncoder.h"
#define PRECISE_ALGORITHM
Encoder enc1(CLK, DT, SW, TYPE1);

/*********************************/
#include <PID_v1.h>
double Setpoint, Input, Output;
//double Kp = 1, Ki = 0.5, Kd = 0;

PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void PID::SetTunings(double Kp, double Ki, double Kd);

void setup() {
 myPID.SetMode(AUTOMATIC);
 myPID.SetOutputLimits(0, 4095);

  Serial.begin (9600);
  myOLED.begin();
  myOLED.clrScr();
  myOLED.setFont(SmallFont);
}

void loop() {
enc1.tick();
  
 myPID.Compute();

 myOLED.clrScr();
    Kp = EEPROM.read(2);
    myOLED.print("coefficient_p", CENTER, 15);
    myOLED.printNumI(Kp, CENTER, 40);
    if (enc1.isRight()) Kp++;
    if (enc1.isLeft()) Kp--;      
    EEPROM.write(2, Kp);
  myOLED.update();          
  

}

 

Igoreck
Offline
Зарегистрирован: 01.03.2017

пишет что: 'Kp' was not declared in this scope

sadman41
Offline
Зарегистрирован: 19.10.2016

Бедный EEPROM.

Igoreck
Offline
Зарегистрирован: 01.03.2017

почему?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Igoreck пишет:

пишет что: 'Kp' was not declared in this scope

видима, из-за 18 строчки

Igoreck
Offline
Зарегистрирован: 01.03.2017

Дык если они будут статичными, как мне их менять в "меню"?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

они у тебя что, константами обьявлены?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Igoreck,

языка программирования не знаете от слова "ваще"? Пытаетесь методом тыка? 100% не получится, даже не тратьте время. То, что Вы сейчас написали - полный бред. Никакие подсказки Вам сейчас не помогут, Вам надо чтобы кто-то просто написал код за Вас.

Так что у Вас два варианта: начать изучать язык или заказать код за деньги. Ну, есть третий вариант, протянуть руку и просить "Христа ради", но вероятность успеха не велика.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Igoreck пишет:

почему?

Потому, что Вы херачите в него в строке №44 при каждом прохождении loop. Контроллера Вам хватит примерно на 0,1 секунды, после чего он тихо скончается. Ну, если особо тренированный попадётся, то, может, полсекунды проживёт.

Igoreck
Offline
Зарегистрирован: 01.03.2017

Это набросок всего то.
Понятное дело что будет по другому!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Igoreck пишет:
Это набросок всего то. Понятное дело что будет по другому!
Ну, Вам-то оно, может, и понятно, а мы непонятливые - видим тот код, что нам показывают :-(

nik182
Онлайн
Зарегистрирован: 04.05.2015

Хрустальный шар намекает, что ТС хочет странного - в меню поменять цифру так, что бы коэффициент стал новый и ПИД работал с новым. Типа ввести его в программу руками. Или опять шар испортился? 

Igoreck
Offline
Зарегистрирован: 01.03.2017

nik182 пишет:

Хрустальный шар намекает, что ТС хочет странного - в меню поменять цифру так, что бы коэффициент стал новый и ПИД работал с новым. Типа ввести его в программу руками. Или опять шар испортился? 

Все верно!

nik182
Онлайн
Зарегистрирован: 04.05.2015

А меню то какое ? Как называется?