• 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
Jak ustawić funkcje czasu wyjścia na określony i off
#1
Star 
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.
 
Odpowiedź
#2
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".
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
(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ś.
 
Odpowiedź
#4
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
 
Odpowiedź
#5
(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.
 
Odpowiedź
#6
Czyli muszę wstawić ?

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

Jeszcze nie bardzo wiem jak to wstawić do programu.
 
Odpowiedź
#7
(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.
 
Odpowiedź
#8
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.
 
Odpowiedź
#9
(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.
 
Odpowiedź
#10
(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ń??
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości