28-07-2017, 22:36
Na podstawie Twoich wskazówek zrobiłem coś takiego:
Wszystko działa jak należy, grzałka jest włączana na okres 1000ms, wyłączana na 2000ms i po wykonaniu 5 razy tej pętli czeka 10000ms ale + 2000ms, czyli wyłącza grzałkę na czas 10000 i odlicza 2000ms z pętli "if ((d1)&&(millis() - time1 > 2000))". Nie mam pomysłu, jak się tego pozbyć. Dodawałem w pętli "if ((k1==5)&&(millis() - time1 > 10000))" d1 = !d1; co pomagało ale wycinało znowu jedno powtórzenie całej głównej pętli. Można by zamiast warunku k1<5 zrobić k1<6 ale będzie się za pierwszym razem uruchamiać znowu 6 razy.
Miałbyś jakąś sugestię?
Kod:
const int Grzalka = 3; // Wyjscie przekaznika grzalki
unsigned long time1 = 0;
boolean d1 = 0;
int k1;
void setup(void)
{
pinMode(Grzalka, OUTPUT);
digitalWrite(Grzalka, LOW);
Serial.begin(9600);
k1=0;
}
void Relay(void)
{
if (k1<5)
{
if ((d1)&&(millis() - time1 > 2000))
{
time1 = millis();
digitalWrite(Grzalka, HIGH);
d1 = !d1;
}
if ((!d1)&&(millis() - time1 > 1000))
{
time1 = millis();
digitalWrite(Grzalka, LOW);
d1 = !d1;
k1++;
}
}
if ((k1==5)&&(millis() - time1 > 10000))
{
time1=millis();
digitalWrite(Grzalka, LOW);
k1=0;
}
}
void loop(void)
{
Relay();
Serial.println(k1);
}
Wszystko działa jak należy, grzałka jest włączana na okres 1000ms, wyłączana na 2000ms i po wykonaniu 5 razy tej pętli czeka 10000ms ale + 2000ms, czyli wyłącza grzałkę na czas 10000 i odlicza 2000ms z pętli "if ((d1)&&(millis() - time1 > 2000))". Nie mam pomysłu, jak się tego pozbyć. Dodawałem w pętli "if ((k1==5)&&(millis() - time1 > 10000))" d1 = !d1; co pomagało ale wycinało znowu jedno powtórzenie całej głównej pętli. Można by zamiast warunku k1<5 zrobić k1<6 ale będzie się za pierwszym razem uruchamiać znowu 6 razy.
Miałbyś jakąś sugestię?