Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. int WindowSize = 5000;
  2. unsigned long windowStartTime;
  3. double KettleSetpoint, KettleInput, KettleOutput;
  4. PID _kettlePID = PID(&KettleInput, &KettleOutput, &KettleSetpoint, 1, 1, 1, DIRECT);
  5.  
  6. PID_ATune aTune(&KettleInput, &KettleOutput);
  7. double aTuneStep = 5000, aTuneNoise = 1, aTuneStartValue = 0;
  8. unsigned int aTuneLookBack = 20;
  9. byte ATuneModeRemember = 2;
  10. double kp = 2, ki = 0.5, kd = 2;
  11.  
  12. ...
  13.  
  14. void KettleHeaterService::StartPID(double kp, double ki, double kd)
  15. {
  16. _kettlePID.SetTunings(kp, ki, kd);
  17. _kettlePID.SetOutputLimits(0, WindowSize);
  18. windowStartTime = millis();
  19. _kettlePID.SetMode(AUTOMATIC);
  20. }
  21.  
  22. void KettleHeaterService::StartAutoTune()
  23. {
  24. KettleOutput = aTuneStartValue;
  25. aTune.SetNoiseBand(aTuneNoise);
  26. aTune.SetOutputStep(aTuneStep);
  27. aTune.SetLookbackSec((int)aTuneLookBack);
  28. ATuneModeRemember = _kettlePID.GetMode();
  29. }
  30.  
  31. void KettleHeaterService::Compute()
  32. {
  33. KettleInput = _activeStatus->Temperature;
  34. KettleSetpoint = _activeStatus->TargetTemperature;
  35.  
  36. if (_activeStatus->PIDTuning)
  37. {
  38. Serial.println("tuning..");
  39. if (aTune.Runtime() != 0)
  40. {
  41. _activeStatus->PIDTuning = false;
  42. _activeStatus->BrewStarted = false;
  43. _activeStatus->StartTime = 0;
  44. _activeStatus->EndTime = 0;
  45. _brewSettingsService->KP = aTune.GetKp();
  46. _brewSettingsService->KI = aTune.GetKi();
  47. _brewSettingsService->KD = aTune.GetKd();
  48. _brewSettingsService->writeToFS();
  49. _kettlePID.SetMode(ATuneModeRemember);
  50. _kettlePID.SetTunings(_brewSettingsService->KP, _brewSettingsService->KI, _brewSettingsService->KD);
  51. }
  52. }
  53. else
  54. _kettlePID.Compute();
  55.  
  56. Serial.print("OUTPUT: ");
  57. Serial.println(KettleOutput);
  58.  
  59. unsigned long now = millis();
  60. if (now - windowStartTime > WindowSize)
  61. {
  62. windowStartTime += WindowSize;
  63. Serial.println("time to shift the Relay Window");
  64. }
  65.  
  66. if (KettleOutput > now - windowStartTime)
  67. {
  68. digitalWrite(HEATER_BUS, HIGH);
  69. _activeStatus->PWM = 1023;
  70. Serial.println("on");
  71. }
  72. else
  73. {
  74. digitalWrite(HEATER_BUS, LOW);
  75. _activeStatus->PWM = 0;
  76. Serial.println("off");
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement