#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup(){
    for (int i = 0 ; i <= 1024 ; i++){ // konfiguracja i zerowanie wykresu
     graph [i] = 0;
     }
      kp = 0 ;
      ki = 0 ;
      kd = 0 ;


     arduino.connect("COM5");// uwaga! ustaw odpowiedni port
     ofAddListener(arduino.EInitialized, this, &testApp::arduinoSetup);
     isArduinoSet = false;// ta flaga ma wartość false, dopóki konfigurowane jest Arduino


now = 0 ;
Setpoint = 127;
Setpoint1 = 137;
PWM = 0;
pvar = false;
ivar = false;
dvar = false;
zero = false;
PIDon = false;
DEAD = false;
Pause = true;
OnOffctr =false;
point = 0;
ofBackground (50,50,50);
ofTrueTypeFont::setGlobalDpi(72);
	verdana14.loadFont("verdana.ttf", 9, true, true);
	verdana14.setLineHeight(18.0f);
	verdana14.setLetterSpacing(1.037);
	    verdana14.drawString("Przykład czcionki, wpisz tekst na klawiaturze", 30, 35);


isready = false ;
}

//--------------------------------------------------------------
void testApp::update(){

    sprintf(T1Str, "Czas: %G", now);
    sprintf(dtStr, "dt: %G", (double)(timeChange));
    sprintf(KpStr, "Kp: %G", kp);
    sprintf(KiStr, "Ki: %G", ki);
    sprintf(KdStr, "Kd: %G", kd);
    sprintf(SetStr, "Wartość zadana: %i", (int)(Setpoint));
    sprintf(PWMStr, "PWM: %i", (int)(PWM));
    sprintf(PWMoutStr, "Wyjście: %i", (int)(Fout));
    sprintf(EpStr, "Ep: %i", (int)(Ep));
    sprintf(EiStr, "Ei: %i", (int)(errSum));
    sprintf(EdStr, "Ed: %i", (int)(Ed));
    sprintf(ErrStr, "Błąd: %i", (int)(error));
  if (Pause){
  arduino.update();
    if (isArduinoSet){ // nie uruchamiaj tego kodu, dopóki nie zacznie działać Arduino
        //if (OnOffctr)
          //   testApp::arduinoLoop();// wykonanie kodu w stylu Arduino
        if (PIDon ||OnOffctr || DEAD)
         testApp::arduinoLoop(); // wykonanie kodu w stylu Arduino
        else{

           arduino.sendPwm(3,PWM);
           Input = (arduino.getAnalog(0)/4.0);
     }



setpoint = 266 - Setpoint;
setpoint1 = 266 - Setpoint1;

 graph [point] =  Input;//- serial.readByte();
 flushline = 10+ point ;

 point++;
 if (point == 1024 )
        point = 0;
        output = 0;

}
}
}

void testApp::arduinoSetup(const int & version) {
  ofRemoveListener(arduino.EInitialized, this, &testApp::arduinoSetup);

  arduino.sendAnalogPinReporting(0, ARD_ANALOG);// włącz wyjście analogowe pin0
  arduino.sendDigitalPinMode(3, ARD_PWM);
  arduino.sendPwm(3,0);
  lastTime = 0 ;
  error = 0;
  dErr = 0;
  errSum = 0 ;
  lastErr = 0;//arduino.getAnalog(0)/4.0;
  isArduinoSet = true;// poinformuj pozostały kod, że Arduino jest gotowe
}//end void testApp::arduinoSetup(



void testApp::reset(){

      kp = 0 ;
      ki = 0 ;
      kd = 0;
      pvar = false;
      Setpoint = 127;
      ivar = false;
      dvar = false;
      point= 0;
      zero1();
      }
      void testApp::appClear(){
    for (int i = 0 ; i <= 1024 ; i++){

     graph [i] = 0;
     }

point= 0;
      }
void testApp::zero1(){
  Output = 0;
  timeChange = 0;
  lastTime =0 ;
  lastErr =0;
  now= 0;
  t1.tv_usec =0;
  arduino.sendPwm(3,0);
  PWM=0;
   lastTime = 0 ;
  errSum = 0 ;
  lastErr = arduino.getAnalog(0)/4.0;
 appClear();
  point= 0;
//  sleep (1);
}
