Sterownik palnika pelletowego, jak pozbyc sie delay

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
rumunn95
Majsterkowicz
Posty: 174
Rejestracja: 12 mar 2015, 18:32

Sterownik palnika pelletowego, jak pozbyc sie delay

Post autor: rumunn95 » 29 paź 2017, 13:33

Witam pisze program do obslugi palnika na pellet uzywam czasow zamiast delay calosc dziala ok ale mam problem z ogarnieciem funkcji rozpalania tzn jak zrobic zeby podajnik podal pellet tylko raz np przez 5s i potem robil kolejne zadania obecnie mam zrobione "delaje" lecz to zatrzymuje np test ognia na 4s oto fragment kodu:

Kod: Zaznacz cały

void praca()
{
  int sensorValue = analogRead(A1);
  sensorValue = map(sensorValue, 300, 400, 0, 1000);
  sensorValue = constrain(sensorValue, 0, 1000);
  if (zapal == 1 )   //    && sensorValue >= 400 NORMALNA PRACA PODAJNIKA
  {
    unsigned long currentMillis = millis();
    if ((ledState == HIGH) && (currentMillis - previousMillis >= OnTimePodaj))
    {
      ledState = LOW;
      previousMillis = currentMillis;
      digitalWrite(ledPin, ledState);
    }
    else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTimePodaj))
    {
      ledState = HIGH;
      previousMillis = currentMillis;
      digitalWrite(ledPin, ledState);
    }
  }
}

void menuHome()
{
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis1 > interval) {
    previousMillis1 = currentMillis;
    int sensorValue = analogRead(A1);
    sensorValue = map(sensorValue, 300, 400, 0, 1000);
    sensorValue = constrain(sensorValue, 0, 100);
    switch (i) {
      case 1:                        // wyswietlanie glownego ekranu
        lcd.home();
        lcd.print("EGT-");
        lcd.setCursor(4, 0);
        lcd.print(thermocouple.readCelsius() - 2);
        lcd.setCursor(9, 0);
        lcd.print(" | MOC-");
        lcd.print(sensorValue);
        lcd.print("%");
        break;


      case 2:                                   // wyswietlanie menu "przerwa podawania"
        lcd.setCursor(0, 0);
        lcd.print("1");
        lcd.setCursor(5, 0);
        lcd.print("USTAWIENIA");
        lcd.setCursor(1, 1);
        lcd.print("PRZERWA PODAWANIA");
        lcd.setCursor(6, 2);
        lcd.print("- ");
        if (czasPodOffWys < 10) {
          lcd.print(' ');
        }
        lcd.print(czasPodOffWys);
        lcd.print ("s");
        lcd.print (" +");
        break;
      case 3:
        lcd.setCursor(0, 0);
        lcd.print("2");
        lcd.setCursor(5, 0);
        lcd.print("USTAWIENIA");
        lcd.setCursor(5, 1);
        lcd.print("PODAWANIE");
        lcd.setCursor(6, 2);
        lcd.print("- ");
        if (czasPodWys < 10) {
          lcd.print(' ');
        }
        lcd.print(czasPodWys);
        lcd.print ("s");
        lcd.print (" +");
        break;
      case 4:
        lcd.setCursor(0, 0);
        lcd.print("3");
        lcd.setCursor(5, 0);
        lcd.print("USTAWIENIA");
        lcd.setCursor(6, 1);
        lcd.print("NADMUCH");
        lcd.setCursor(6, 2);
        lcd.print("- ");
        if (Fan < 10) {
          lcd.print(' ');
        }
        lcd.print(Fan);
        lcd.print ("%");
        lcd.print (" +");
        break;
      case 5:
        lcd.setCursor(0, 0);
        lcd.print("4");
        lcd.setCursor(5, 0);
        lcd.print("USTAWIENIA");
        lcd.setCursor(5, 1);
        lcd.print("ZADANA C.O.");
        lcd.setCursor(6, 2);
        lcd.print("- ");
        lcd.print(zadCO);
        lcd.print ("*C");
        lcd.print (" +");
        break;

      case 6:                                //rozpalanie przy wcisnieciu btn4 pyta sie czy rozpoczac
        if (zmiana == 1) {
          lcd.setCursor(5, 0);
          lcd.print("ROZPALIC?");
          lcd.setCursor(3, 1);
          lcd.print("WCISNIJ START");
          lcd.setCursor(5, 2);
          lcd.print("POMYSLIMY :)");
        }
        if (zapal == 2 && podajRaz == 1) {
          lcd.clear();
          if (sensorValue <= 100) {//tu przestawic do testow
            lcd.setCursor(5, 0);
            lcd.print("Rozpalanie");
            lcd.setCursor(5, 1);
            lcd.print("TEST OGNIA");
            lcd.setCursor(8, 2);
            lcd.print(sensorValue);
            delay(4000);                                   //tu nie chce postoju delay 
            lcd.clear();
            lcd.setCursor(5, 0);
            lcd.print("Rozpalanie");
            lcd.setCursor(5, 1);
            lcd.print("PODAWANIE");
            ledState = HIGH;
            digitalWrite(ledPin, ledState);
            delay (5000);   //podajemy przez 5s         //tu tez
            ledState = LOW;
            digitalWrite(ledPin, ledState);
            podajRaz = 2;
            zmiana = 2;
            lcd.clear();
          }
          if (podajRaz == 2) {
            lcd.setCursor(5, 0);
            lcd.print("Rozpalanie");
            lcd.setCursor(5, 1);
            lcd.print("TEST OGNIA");
            lcd.setCursor(8, 2);
            lcd.print(sensorValue);
            delay(4000);                                    //i tu ;)
            zapal = 1;
            lcd.clear();
            i = 1;
          }
          else if (sensorValue >= 31) {
            lcd.clear();
            lcd.setCursor(1, 1);
            lcd.print("CHYBA SIE PALI ;-)");
            delay(5000);                                       //tu tez
            i = 1;
            lcd.clear();
          }
        }
        break;

    }
  }
}

[youtube]https://www.youtube.com/watch?v=Mzx_wRLjXRo[/youtube]

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


ODPOWIEDZ

Strony partnerskie: