• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem czasu końca programu
#1
Witam jestem zielony w temacie, Arduino wykorzystałem gdyż przyjaciel potrzebował sterowania maszyną z dużymi czasami, czyli 10 minut pracy i 20 minut przerwy, wykorzystałem program migającej diody, steruje pinem 12 za pomocą tranzystora i przekaźnika. Wszystko działa ok lecz dobrze by było aby program kończył się po 12 godzinach i nie wiem jak to ugryźć, fajnie również by było aby móc ew. sterować np. guzikiem praca ciągła jeśli będzie potrzebna i ew. reset czyli start programu na 12 godzin czy ktoś może doradzić pozdrawiam.
 
Odpowiedź
#2
(09-10-2017, 22:44)adam@laboplay.pl napisał(a): czy ktoś może doradzić
Doradzam wstawianie znaków interpunkcyjnych aby lepiej się czytało i przerobienie jakiegokolwiek kursu arduino. Np: https://forbot.pl/blog/kurs-arduino-pods...rsu-id5290
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
(10-10-2017, 09:31)namok napisał(a):
(09-10-2017, 22:44)adam@laboplay.pl napisał(a): czy ktoś może doradzić
Doradzam wstawianie znaków interpunkcyjnych aby lepiej się czytało i przerobienie jakiegokolwiek kursu arduino. Np: https://forbot.pl/blog/kurs-arduino-pods...rsu-id5290

Dziękuję czyli odpowiedź typowego asa, jak na każdym forum kursy i szukaj pozdrawiam.
 
Odpowiedź
#4
(09-10-2017, 22:44)adam@laboplay.pl napisał(a): Witam jestem zielony w temacie, Arduino wykorzystałem gdyż przyjaciel potrzebował sterowania maszyną z dużymi czasami, czyli 10 minut pracy i 20 minut przerwy, wykorzystałem program migającej diody, steruje pinem 12 za pomocą tranzystora i przekaźnika. Wszystko działa ok lecz dobrze by było aby program kończył się po 12 godzinach i nie wiem jak to ugryźć, fajnie również by było aby móc ew. sterować np. guzikiem praca ciągła jeśli będzie potrzebna i ew. reset czyli start programu na 12 godzin czy ktoś może doradzić pozdrawiam.

Praca ciagla to po prostu mechaniczny przelacznik omijajacy sterowanie Arduino a 12 godzin mozesz ustalic liczac cykle polgodzinne (10 plus 20 minut) i wylaczac calosc po 24 cyklach.
Chyba ze chcesz ambitnie to zastosuj modul zegara RTC.
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#5
(10-10-2017, 22:11)adam@laboplay.pl napisał(a): Dziękuję czyli odpowiedź typowego asa, jak na każdym forum kursy i szukaj pozdrawiam.
A jakiej oczekujesz pomocy skoro nie przedstawiłeś żadnego kodu?
Gdybym podał że możesz użyć funkcji xxx to zapytałbyś jak to zrobić.
Opanuj podstawy(Pomoc->Referencje), przerób jakiś kurs który pomoże je zrozumieć a wtedy wszystko stanie się prostsze.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#6
(11-10-2017, 23:13)namok napisał(a):
(10-10-2017, 22:11)adam@laboplay.pl napisał(a): Dziękuję czyli odpowiedź typowego asa, jak na każdym forum kursy i szukaj pozdrawiam.
A jakiej oczekujesz pomocy skoro nie przedstawiłeś żadnego kodu?
Gdybym podał że możesz użyć funkcji xxx to zapytałbyś jak to zrobić.
Opanuj podstawy(Pomoc->Referencje), przerób jakiś kurs który pomoże je zrozumieć a wtedy wszystko stanie się prostsze.

Rozumiem i dzięki co do kodu to tak jak napisałem że wykorzystałem prog. migającej diody.

Kod:
void setup() {
 // initialize digital pin 13 as an output.
 pinMode(12, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
 digitalWrite(12, HIGH);   // turn the LED on (HIGH is the voltage level)
 delay(1200000);              // wait for a second
 digitalWrite(12, LOW);    // turn the LED off by making the voltage LOW
 delay( 600000
 );              // wait for a second
}
 
Odpowiedź
#7
Zacznij liczyc petle wyswietlania diody czyli w setupie daj jakas zmienna na przyklad byte n=0;
a w petli za kazdym "obrotem" zwieksz o jeden czyli n+=1 i wpisz warunek ze jak n stanie sie rowne 24 to trzeba przerwac program na przyklad poprzez break. Prace ciagla zalatwisz przelacznikiem mechanicznym.
To jest proste tylko trzeba chwile pomyslec :-)
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#8
Użyj millis(): Plik->Przykłady->Digital->BlinkWithoutDelay
Tylko nie pytaj w następnym poście jak zrobić aby był różny czas świecenia i przerwy.
Jak już opanujesz miganie to wtedy użyj millis aby zatrzymać miganie po określonym czasie.
Jak potrzebujesz bardzo dokładnie to użyj RTC.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#9
Poniżej naskrobałem 98% tego co chciałeś resztę dorób sobie sam ( zasadniczo 2 linijki ci potrzebne ) :-)

Kod:
// JasQ - forum.arduinopolska.com

long Ms;
int sekundy;
int minuty;
int godziny;
long Cm;
long czas;
long czas_pracy = -1 ;
long czas_postoju = -1 ;
byte program = 1;
int minuty_praca = 1; // minuty pracy
int minuty_postoj = 2; // minuty postoju

void setup() {

  Serial.begin(9600);
  pinMode(4,INPUT); // start automatycznego programu
  pinMode(5,INPUT); // stop automatycznego programu
  pinMode(2,OUTPUT); // dioda zapala się i gaśnie jak jej program w automacie każe
}

void loop() {

  if ( digitalRead(4) == LOW ){program = 1; czas_pracy = ((minuty_praca*60) + czas);}
  if ( digitalRead(5) == LOW or godziny == 12 ){program = 0; czas_pracy = -1 ; czas_postoju = -1 ;}
  

if ( program == 1 ){
  
if ( czas_pracy >= 0 ){
      
    Serial.print( czas_pracy - czas );
    digitalWrite(2,HIGH);Serial.print(" : ");
    if ((czas_pracy - czas) == 0 ){czas_pracy = -1 ; czas_postoju = ((minuty_postoj*60) + czas );}
}
  
  if ( czas_postoju >= 0 ){
    
    Serial.print( czas_postoju - czas );
    digitalWrite(2,LOW);Serial.print(" : ");
    if ((czas_postoju - czas) == 0 ){czas_postoju = -1 ; czas_pracy = ((minuty_praca*60) + czas );}
  }
}

zegar();
Serial.println();
}

void zegar(){

Cm = millis();
if ( Cm - Ms >= 1000 ){sekundy ++ ;Ms = Cm;}
if ( sekundy == 60 ){minuty ++ ;sekundy = 0;}
if ( minuty == 60 ){godziny ++ ;minuty = 0;}
czas = ( godziny*3600 )+(minuty*60)+(sekundy);
Serial.print(godziny);Serial.print(" : ");
Serial.print(minuty);Serial.print(" : ");
Serial.print(sekundy);Serial.print(" : ");
Serial.print(czas);Serial.print(" : ");

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości