//art100 20170529
...
#define PINRIGH1 8 // max
#define PINLEFT1 9 // min
..
int tempmin1 = 0;//
int tempmax1 =255;//
...
/...
pinMode(PINLEFT1,INPUT_PULLUP);//heater max
pinMode(PINRIGH1,INPUT_PULLUP);//heater max
..
SetSpeed1=EEPROM[0]*10; lcd.setCursor(11,0);lcd.print(SetSpeed1); //читаем из 1-ой ячейки ограничение 255
SetSpeed2=EEPROM[1]*10; lcd.setCursor(11,1);lcd.print(SetSpeed2); //читаем из 2-ой ячейки ограничение 255
...
//PID algoritm
myPID.SetMode(AUTOMATIC); // Включим PID и установим режим;
}
//===========================================================================================================================================================================
void loop(){
//button menu flag------------------------------------------------------------------------
switch( button1.Loop() ){
case MB_CLICK: flagstop1=1; // поднимаем флаг для дальнейшего действия
flagstart1=0; // опускаем флаг для дальнейшего действия
lcd.setCursor(0,1);lcd.print("STOP "); // короткое нажатие это СТОП
sek1=10; // заводим опять счетчик clear sek
break;
case MB_LONG_CLICK: flagstart1=1; // поднимаем флаг для дальнейшего действия
flagstop1=0; // опускаем флаг для дальнейшего действия
lcd.setCursor(0,1);lcd.print("START"); // а вот чуть дольше 1 сек это СТАРТ
break;
case MB_AUTO_CLICK: flagsave1=0; // поднимаем флаг для дальнейшего действия
sek1--; // истекаем/крутим меню уровни и флаги
lcd.setCursor(0,1);lcd.print("sek"); // подсказка
lcd.setCursor(3,1);lcd.print(sek1); // отображаем как секунды истекают
lcd.setCursor(5,1);lcd.print(" "); // почистим мусор
if(sek1<MenuMaximum){ // если секунды истекли
sek1=10; // заводим опять счетчик
flagsave1=1; // поднимаем флаг для дальнейшего действия
lcd.setCursor(0,1);lcd.print("SAVE EEPROM");// подсказка
} // подсказка быстро затирается потом может отлажу
break;
}
switch( button2.Loop() ){
case MB_CLICK: flag__up1=1;break;// крутим //heater
case MB_LONG_CLICK: flag__up1=2;break;//
case MB_AUTO_CLICK: flag__up1=3;break;//
}
switch( button3.Loop() ){
case MB_CLICK: flagdown1=1;break;// крутим
case MB_LONG_CLICK: flagdown1=2;break;//
case MB_AUTO_CLICK: flagdown1=3;break;//
}
switch( button4.Loop() ){
case MB_CLICK: flag__up2=1;break;// крутим
case MB_LONG_CLICK: flag__up2=2;break;//
case MB_AUTO_CLICK: flag__up2=3;break;//
}
switch( button5.Loop() ){
case MB_CLICK: flagdown2=1;break;// крутим
case MB_LONG_CLICK: flagdown2=2;break;//
case MB_AUTO_CLICK: flagdown2=3;break;//
}
switch( button6.Loop() ){
case MB_CLICK: flag__up3=1;break;// крутим /
case MB_LONG_CLICK: flag__up3=2;break;//
case MB_AUTO_CLICK: flag__up3=3;break;//
}
switch( button7.Loop() ){
case MB_CLICK: flagdown3=1;break;// крутим
case MB_LONG_CLICK: flagdown3=2;break;//
case MB_AUTO_CLICK: flagdown3=3;break;//
}
//button menu flag------------------------------------------------------------------------]
.
// pooler ..--------------------------------------------------------------------------------------------------------------------
if(flag__up2==1){SetSpeed1=SetSpeed1+ 1;if(SetSpeed1>100000)SetSpeed1=100000;lcd.setCursor(11,0);lcd.print(SetSpeed1);flag__up2=0;}
if(flagdown2==1){SetSpeed1=SetSpeed1- 1;if(SetSpeed1< 1)SetSpeed1= 1;lcd.setCursor(11,0);lcd.print(SetSpeed1);flagdown2=0;}
if(flag__up2==2){SetSpeed1=SetSpeed1+ 10;if(SetSpeed1>100000)SetSpeed1=100000;lcd.setCursor(11,0);lcd.print(SetSpeed1);flag__up2=0;}
if(flagdown2==2){SetSpeed1=SetSpeed1- 10;if(SetSpeed1< 1)SetSpeed1= 1;lcd.setCursor(11,0);lcd.print(SetSpeed1);flagdown2=0;}
if(flag__up2==3){SetSpeed1=SetSpeed1+100;if(SetSpeed1>100000)SetSpeed1=100000;lcd.setCursor(11,0);lcd.print(SetSpeed1);flag__up2=0;}
if(flagdown2==3){SetSpeed1=SetSpeed1-100;if(SetSpeed1< 1)SetSpeed1= 1;lcd.setCursor(11,0);lcd.print(SetSpeed1);flagdown2=0;}
// pooler ..--------------------------------------------------------------------------------------------------------------------
...
.
// set temperature------------------------------------------------------------------------------------
if(flag__up1==1){ tempwork1=tempwork1+ 1; if(tempwork1>tempmax1)tempwork1=tempmax1; flag__up1=0; }// автоподстройка единиц если нажато до 1 сек
if(flagdown1==1){ tempwork1=tempwork1- 1; if(tempwork1<tempmin1)tempwork1=tempmin1; flagdown1=0; }// автоподстройка единиц если нажато до 1 сек
.
// set temperature------------------------------------------------------------------------------------
//heat algoritm PID reprap --------------------------------------------------------
if(flagstart1){ // byte i; byte data[12];
PIDinput = tempadc1;// // что миг грядущий нам готовит в PID
PIDpoint = tempwork1; // а я так хочу в PID
tempdelta4 = abs(PIDpoint-PIDinput); // как мы отстали от жизни в PID
if(tempdelta4<5){ //
myPID.SetTunings(consKp, consKi, consKd);
} // если мало изменений используем консервативные параметры в работе в PID
else {
myPID.SetTunings(aggrKp, aggrKi, aggrKd);
} // если много изменений используем агрессивные параметры после стояния в PID
myPID.Compute();// страшный и ужасный бармалей PID
analogWrite(PINMOSFETTEMP1,PIDoutput); // о PID-ился вкл киловаты печи ШИМ
percent1 = (byte)(PIDoutput/255*100); // пересчитаем в проценты
lcd.setCursor(5,1);lcd.write(3); // подсказка
lcd.print(percent1);lcd.print("%");// о PID-идануться на экран
digitalWrite(LED_BUILTIN, HIGH); // на всякий случай класику лампочку
digitalWrite(PINMOSFETFUN1,HIGH); // на всякий случай вытяжку
digitalWrite(PIN_REMOTE1, LOW); // сообщим миру что мы о PID-ились
}
else{
analogWrite(PINMOSFETTEMP1, LOW); // хватит PID-иться
digitalWrite(LED_BUILTIN, LOW); // на всякий случай класику лампочку
digitalWrite(PINMOSFETFUN1, LOW); // на всякий случай вытяжку вот расшумелась
digitalWrite(PIN_REMOTE1, HIGH); // сообщим миру что мы о PID-ились
}
//heat algoritm PID reprap --------------------------------------------------------
flagasktemperature1 = false; // Сбросили флаг о запросе температуры;
}//if(!flagasktemperature1){ // Если не запрашивали температуру с датчика - запросим;
#endif
//save eeprom--------------------
if(flagsave1){
EEPROM[0]=SetSpeed1/10;
EEPROM[1]=SetSpeed2/10;
EEPROM[2]=SetMotorMove2;
EEPROM[3]=tempwork1;///10;
flagsave1=0;
}
//save eeprom--------------------
}
//===========================================================================================