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.
(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.
(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.
(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.
(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
}
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 :-)
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.
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(" : ");
}