не работает PID
- Войдите на сайт для отправки комментариев
Втр, 07/02/2017 - 20:22
Здравствуйте, столкнулся с проблемкой. Arduino занимаюсь около месяца, не судите строго за вопрос.
плата mega 2560 R3. Не удаётся запустить PID.
Скетч:
#include <PID_v1.h>
#include <UTFT.h>
UTFT myGLCD(ILI9341_16, 38,39,40,41);
double Setpoint, Input, Output;
PID myPID(&Input, &Output, &Setpoint,1,4,3, DIRECT);
extern uint8_t SevenSegNumFont[];
double Thermister (int RawADC)
{double Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15;
return Temp;}
void setup()
{
Setpoint = 27;
myPID.SetMode(AUTOMATIC);
}
void loop()
{
myGLCD.clrScr();
delay (10000);
myGLCD.fillScr (255, 0, 0);
delay (10000);
Input = (Thermister (analogRead(0)));
myPID.Compute();
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor (255, 255, 255);
myGLCD.setFont (SevenSegNumFont);
myGLCD.printNumI (Output, 217, 5, 8, '0');
}
Он не только не выводит значение Output, но даже не меняет цвет фона, хотя компилируется без ошибок и заливается.
1. Обязательно - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Ну, раз уж Вы этого не сделали, то читайте как получится:
Скорее всего она всё выводит. Просто в строке №ХЗ Вы зачем-то стираете экран ("myGLCD.clrScr();") и показываете его чистым в течение 10 секунд. Затем, в строке №ХЗ Вы выводите на экран свой Output ("myGLCD.printNumI (Output, 217, 5, 8, '0');") и не подождав ни одной миллисекунды, заканчиваете loop, чтобы тут же начать его сначала и ... стереть только что выведенную информацию, а потом снова показывать пустой экран в течение 10 сек.
По ходу вы где-то брали код и там подключается экран - может с подключением проблема?
Можете подключить порт и посмотреть что выдаёт монитор порта:
}
Да точно - наш гуру вам уже ответил.
Спасибо за ответ, но экран уже протестирован, и написан небольшой проектик с регулированием по порогам. Сейчас планировал прикрутить ПИД т.к. привода с аналоговым управлением.
Ошибку нашёл, она заключалась в том, что я забыл про инициализацию экрана, типа:
myGLCD.InitLCD();
Ещё раз спасибо за ответ.
Если интересно, такой код работает.