• 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
czujnik - arduino
#11
Ech... na modelu (tinkercad) działa:
Kod:
int czas=0;

void setup(){
pinMode(7, INPUT_PULLUP);
pinMode(5, OUTPUT);
}

void loop(){
czas=millis();
  while(digitalRead(7)==LOW){
    if(millis()-czas>5000){
    digitalWrite(5, HIGH);
    }
}
delay(200);
  digitalWrite(5, LOW);
}
Wygaszam wyjście po 0,2s po puszczeniu.
 
Odpowiedź
#12
(05-12-2017, 10:30)krn78 napisał(a): Ech... na modelu (tinkercad) działa:
Kod:
int czas=0;

void setup(){
pinMode(7, INPUT_PULLUP);
pinMode(5, OUTPUT);
}

void loop(){
czas=millis();
 while(digitalRead(7)==LOW){
   if(millis()-czas>5000){
   digitalWrite(5, HIGH);
   }
}
delay(200);
 digitalWrite(5, LOW);
}
Wygaszam wyjście po 0,2s po puszczeniu.
Jak się nie potrafi rozwinąć prostego pseudokodu to się echa.

Pokazuję i objaśniam:

Pseudokod:
Cytat:jeśli (czujnik == 1) to czas=millis(); kasuj wyjście
jeśli (millis() - czas > 5s) to ustaw wyjście

jeśli (czujnik == 1) to czas=millis(); kasuj wyjście

zamieniamy ma:
Kod:
if (digitalRead(CZUJNIK)==HIGH){
    czas = millis();
    digitalWrite(LED,LOW);
}

jeśli (millis() - czas > 5s) to ustaw wyjście
zamieniamy na:
Kod:
if (millis() - czas > 5000) {
    digitalWrite(LED,HIGH);
}

Co prowadzi do programu:
Kod:
#define CZUJNIK 8
#define LED 13

long czas;

void setup(){
    pinMode(CZUJNIK,INPUT_PULLUP);
    pinMode(LED,OUTPUT);
}

void loop(){
    if (digitalRead(CZUJNIK)==HIGH){
        czas = millis();
        digitalWrite(LED,LOW);
    }
    if (millis() - czas > 5000) {
        digitalWrite(LED,HIGH);
    }
}

Podanie stanu niskiego na wejście nr.8 powoduje start odliczania. Po 5 sekundach zapali się dioda, gaśnie po puszczeniu przycisku(stan wysoki).

Podaż jak Twój program zadziała przy kilku takich timerach!!!
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ź
#13
(05-12-2017, 12:21)namok napisał(a): Podaż jak Twój program zadziała przy kilku takich timerach!!!
Oczywiście że nie zadziała (a raczej zadziała, ale tylko dla jednego na raz). Z drugiej strony daje to pewność działania, szczególnie jeśli przy rozszerzonym programie gdzieś wystąpi jakiś delay().
W obecnym kształcie zadania oba programy zadziałają.

Przy okazji, autor już sobie chyba poszedł, a my się kłócimy Smile
 
Odpowiedź
#14
(05-12-2017, 14:45)krn78 napisał(a): W obecnym kształcie zadania oba programy zadziałają.
Z tą tylko różnicą że mój algorytm jest niezmienny od pierwszego mojego postu, a Ty przedstawiasz protezę programu która do niczego się nie nadaje.


Cytat:Przy okazji, autor już sobie chyba poszedł, a my się kłócimy Smile
Ciekawe stwierdzenie osoby która pomawia innych i nie potrafi przyznać się do błędu.
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ź
#15
Żeby nie było: mój post jest właściwie w całości OT, bo niczego do rozwiązania zadania nie wnosi i jest właściwie tylko osobistymi uwagami. Samo zadanie uważam za rozwiązane w dwóch wersjach: mojej i kolegi namok'a. W obecnej postaci problemu uważam je za równoważne, przy rozszerzeniu zadania o inne warunki - wyniki działanai progrmów będą już inne.
Dalszą dyskusję w tym temacie uważam za niepotrzebną.

(05-12-2017, 18:03)namok napisał(a): mój algorytm jest niezmienny od pierwszego mojego postu, a Ty przedstawiasz protezę programu która do niczego się nie nadaje.
Nie nadaje się lub nadaje. Na tinkerkadzie działa, więc i w realu powinna, poza tym spełnia warunki problemu postawionego przez autora, podobnie zresztą jak Twój.

(05-12-2017, 18:03)namok napisał(a): Ciekawe stwierdzenie osoby która pomawia innych i nie potrafi przyznać się do błędu.
Prawda? Smile
Zastanawia mnie, gdzie kogoś pomówiłem, bo zarzut wydaje się mi interesujący. Jednak... może masz rację, a może nie masz racji, kto Cię tam wie. To co ludzie robią, a to co wydaje im się że robią, to czasem dwie różne rzeczy, więc... Jeśli ktoś poczuł się pomówiony, urażony, obrażony, zagniewany lub kogo naraziłem na inne negatywne uczucia moimi postami lub uwagami, oficjalnie przepraszam. W swoich działaniach staram się kierować chęcią pomocy, która czasem przybiera różne, nie zawsze bezpośrednie formy i nie zawsze mogę przewidzieć wyniki moich uwag.
A czy nie potrafię przyznać się do błędu... jeśli go widzę, to to robię. Mój pierwszy kod rzeczywiście był niepoprawny, przyznaję. Nie testowałem go i pisałem w pośpiechu. Z tego też powodu napisałem ten program po raz drugi.
Co do samej protezy, napisałem w poprzednim poście, że, w przypadku zmiany warunków, rzeczywiście mój układ może nie działać, podobnie jak Twój. To zresztą będzie zależało od problemu, bo w niektórych przypadkach sam wyeliminowałbym mój program jako błędny. Upieranie się przy błędzie nie ma sensu.
Tyle ode mnie.
 
Odpowiedź
#16
(06-12-2017, 10:34)krn78 napisał(a): Zastanawia mnie, gdzie kogoś pomówiłem, bo zarzut wydaje się mi interesujący

Tutaj: http://forum.arduinopolska.com/watek-czu...48#pid7648
(04-12-2017, 09:55)krn78 napisał(a):
(01-12-2017, 15:06)namok napisał(a): Pseudokod:
jeśli (czujnik == 1) to czas=millis(); kasuj wyjście
jeśli (millis() - czas > 5s) to ustaw wyjście
Nie do końca, bo ustawienie wyjścia ma się odbyć, jeśli przycisk będzie wciśnięty przez dłużej niż pięć sekund. W tym przypadku wyjście ustawi się pięć sekund po naciśnięciu przycisku, nawet jeśli będzie puszczony. Jeśli dolny warunek jest wnętrzem górnego, to też nie zadziała, bo czas przy każdej pętli zmienna czas będzie przyjmować nową wartość.
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ź
  


Skocz do:


Przeglądający: 1 gości