Arduino Polska Forum

Pełna wersja: Jak ustawić funkcje czasu wyjścia na określony i off
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4
Jestem początkującym dużo czytam, zakupiłem książkę i przeglądam biblioteki żeby choć trochę na początek zrozumieć arduino. Chciałbym ustawić tak funkcje żeby dioda załączyła się na kreslony czas i off tylko bez wyzwalania przyciskiem. Kombinowalem różnie i nie wiem jakiego polecenia użyć. Jeśli trzeba to mogę wrzucić program, który udało mi się przerobić tak jak chciałem tylko z tym czasem nie mogę dać rady.
To jest tak samo, jak z patrzeniem na zegarek. Włączasz światło i od czasu do czasu zerkasz na zegarek. Jak minęła ustalona godzina, to wyłączasz światło.
W Twoim przypadku, zerkanie na zegarek jest równoznaczne ze sprawdzaniem upływu tiknięć funkcji millis().
W głównej pętli umieść kod, który będzie zerkał na millis() i wyłączy LED, gdy minie odpowiednia ilość millisów.
Szukaj "blink without delay".
(02-07-2019, 13:24)brendy napisał(a): [ -> ]Jestem początkującym dużo czytam, zakupiłem książkę i przeglądam biblioteki żeby choć trochę na początek zrozumieć arduino. Chciałbym ustawić tak funkcje żeby dioda załączyła się na kreslony czas i off tylko bez wyzwalania przyciskiem. Kombinowalem różnie i nie wiem jakiego polecenia użyć.
Takie rzeczy są opisane w pierwszych rozdziałach kursów. Przeczytaj więc książkę jeszcze raz.

(02-07-2019, 13:24)brendy napisał(a): [ -> ]Jeśli trzeba to mogę wrzucić program
Jeśli oczekujesz pomocy, to nie możesz ale MUSISZ pokazać to co napisałeś.
Dziękuje za cenne uwagi. Nie wiem jeszcze jak skopiować ten kod na forum, żeby było jak trzeba.

Kod:
int const trigPin = 2;
int const echoPin = 3;
int Red = 4;    // Numer pinu - dioda czerwona
int Green = 5;  // Numer Pinu - dioda zielona
int Elektrozawor = 9;    //  Numer Pinu - elektrozawor
void setup()
{
  Serial.begin(9600);

  // Konfiguracja pinów

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(Red, OUTPUT);
  pinMode(Green, OUTPUT);
  pinMode(Elektrozawor, OUTPUT);

}
void loop()
{ int duration, distance;
  digitalWrite(trigPin, HIGH);
  delay(1);
  digitalWrite(trigPin, LOW);
  // Measure the pulse input in echo pin
  duration = pulseIn(echoPin, HIGH);
  // Distance is half the duration devided by 29.1 (from datasheet)
  distance = (duration / 2) / 29.1;
  // if distance less than 0.5 meter and more than 0 (0 or less means over range)
  if (distance <= 4 && distance >= 0) {

    digitalWrite(Red, HIGH);
    digitalWrite(Green, LOW);
    delay(3000);
    digitalWrite(Elektrozawor, HIGH);
  } else
  {
    digitalWrite(Red, LOW);
    digitalWrite(Green, HIGH);
    digitalWrite(Elektrozawor, LOW);
    delay(300);
  }



}


I w tym przedostatnim miejscu gdzie elektrozawór HIGH chciałbym, żeby elektrozawór włączył się na np 6 sekund i off
(02-07-2019, 19:14)brendy napisał(a): [ -> ]I w tym miejscu chciałbym, żeby elektrozawór włączył sie na np 6 sekun i off.
Zapamiętaj w zmiennej aktualny czas systemowy. Następnie w pętli głównej sprawdzaj, czy czas systemowy >= zapamiętany_czas /+ 6000, jeśli tak, to zrób off.

To jedno z najprostszych ale i najgorszych rozwiązań (delay nie proponuję, bo to profanacja mocy CPU), ale wypróbuj je, bo jak napiszę, że można skonfigurować timer, który wywoła przerwanie od porównania lub przepełnienia i w nim zmieni stan portu albo, że można "podpiąć" się pod przerwania od timera systemowego i w nim sterować wyjściem, to się zniechęcisz.
Czyli muszę wstawić ?

unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzas = 0;

Jeszcze nie bardzo wiem jak to wstawić do programu.
(02-07-2019, 19:42)brendy napisał(a): [ -> ]Jeszcze nie bardzo wiem jak to wstawić do programu.
Zacznij od kursu Arduino, np:
- Darmowy: https://forbot.pl/blog/kurs-arduino-srod...owac-id936
- Dobry ale trzeba kupić czasopisma jest w EdW.
- Książki o C znajdziesz w Internecie bezpłatnie.

Następnie (pewnie za ok 6..12 miesięcy) jeśli będziesz chciał zostać przy AVR to:
- AVR i C razem z zestawem startowym: https://rec-ir.quartic.pl/c.php?qrid=ad_...urs-c.html
- Nie polecam książek i zestawów startowym Mirka K. Komplet książek i zestawów startowych to ogromny wydatek, a jak fa forum producenta "źle się odezwiesz" (czytaj, nie będziesz wychwalał Mirka K. pod niebiosa) to Cię zbanuje a inne fora pomocy związanej z wytworami Mirka K. raczej nie udzielą i słusznie!

Jeśli pójdziesz w kierunku ARM, co na tą chwilę jest chyba jedynym sensownym wyborem, to dużo książek o ARM, zwłaszcza popularnych STM32, znajdziesz w wydawnictwie BTC, Helion. W BTC poza książkami znajdziesz także zestawy startowe dedykowane do książek, np tani KA-NUCLEO 411CEza 49zł (porównaj cenę i możliwości NUCLEO-F411 do PODRÓBY ArduinoMega2560, do tego dedykowana książka Mikrokontrolery STM32 dla początkujących. Książki blisko dwa razy tańsze od Kardasiowych i nie o przestarzałych AVR.

Początkującym polecam "lekturę" EdW, gdzie można znaleźć materiały nie tylko o Arduino, AVR, czy kurs C, ale także teorię i co ważne praktykę,
przedstawioną w przystępny sposób na temat ogulnie pojętej elektroniki, jak: rezystory, kondensatory, indukcyjności, tranzystory, przyrządy i metody pomiarowe, itd. Bardziej zainteresowani powinni zainteresować się EP.
Dziękuję za pomoc forbota od dłuższego czytam. Tamtych nie znam napewno je przeczytam. Już jakiś punkt zaczepienia mam. Bede się wtapial w temat arduino bo bardzo mnie to zainteresowalo. Dotychczas robiłem różne rzeczy elektryczne i elektroniczne, dlatego chcę nauczyć się arduino żeby móc więcej.
Wiem, że nikt gotowcow nie podpowie, bo nie o to chodzi. Czy mógłbyś mi podstawic do tego ten czas? Bo bym chciał zrobić jeden projekt i tego czasu mi brakuje, mógłbym to zrobić przekaźnikiem, ale nie chce dokładać dodatkowej elektroniki. Z resztą projektów wiem że trzeba się doksztalcac i uczyć samemu. Tą zasadę wyznaje, bo też tak zaczynałem w pracy przy kompie posadzili w pierwszy dzień i kazali sprzedać, ale to była dobra lekcja, bo człowiek robił błędy ale się szybko nauczył tak samo z arduino.
Dziękuję es2. za pchnięcie mnie dalej w arduino. Skorzystam z tych wskazówek.
(02-07-2019, 20:28)brendy napisał(a): [ -> ]w pracy przy kompie posadzili w pierwszy dzień i kazali sprzedać, ale to była dobra lekcja, bo człowiek robił błędy ale się szybko nauczył tak samo z arduino.
Nie wpycham Cię na głębokie wody. Tak by się stało, jakbym dał gotowca, a wtedy to będzie jak z tym sklepem.

(02-07-2019, 20:28)brendy napisał(a): [ -> ]Czy mógłbyś mi podstawic do tego ten czas?
Zapomnij o kodzie który napisałeś. Jak miałbym go poprawiać, to szybciej będzie napisać to od nowa.
Zacznij od algorytmu działania programu. 99% początkujących zaczyna od pisania kodu a pierwszy jest algorytm. Nawet ja, gdy piszę kod, najpierw powstaje algorytm, co prawda w głowie, ale powstaje.
Dobry algorytm, to w tym przypadku, jakieś 70% sukcesu.
(02-07-2019, 19:20)es2 napisał(a): [ -> ]To jedno z najprostszych ale i najgorszych rozwiązań 

A czemu millis to jedno z najgorszych rozwiazań??
Stron: 1 2 3 4