Arduino Polska Forum
czujnik - arduino - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: czujnik - arduino (/watek-czujnik-arduino)

Strony: 1 2


czujnik - arduino - josseff - 30-11-2017

Witam,
bardzo proszę o pomoc - wskazówkę w kodzie 
Podłączyłem czujnik do mojego Arduino i mam tylko jeden problem - chciałbym aby jeden z pinów przechodził w tryb HIGH dopiero kiedy czujnik jest zakryty przez okres 5s. Jeśli obiekt przykryje czujnik na krótszy czas wtedy pin ma pozostać LOW
Bardzo proszę o wyrozumiałość i wskazówki


RE: czujnik - arduino - krn78 - 01-12-2017

Nie wiemy jaki czujnik, nie wiemy jaki pin. Podaj jakikolwiek schemat, bo nie jesteśmy jasnowidzami.

Generalnie kod będzie wyglądał następująco (to tylko algorytm, więc będziesz musiał większość napisać sam):
Kod:
int czas;

Potem, gdzieś w loopie:
if(sygnał z czujnika<jakaś wartość){
czas=millis();
if((sygnał z czujnika<jakaś wartość)&&(millis()-czas>5000){
digitalWrite(jakisPin, HIGH);
}
}
Tak to chyba będzie wyglądać.


RE: czujnik - arduino - josseff - 01-12-2017

(01-12-2017, 13:18)krn78 napisał(a): Nie wiemy jaki czujnik, nie wiemy jaki pin. Podaj jakikolwiek schemat, bo nie jesteśmy jasnowidzami.

Generalnie kod będzie wyglądał następująco (to tylko algorytm, więc będziesz musiał większość napisać sam):
Kod:
int czas;

Potem, gdzieś w loopie:
if(sygnał z czujnika<jakaś wartość){
czas=millis();
if((sygnał z czujnika<jakaś wartość)&&(millis()-czas>5000){
digitalWrite(jakisPin, HIGH);
}
}
Tak to chyba będzie wyglądać.

Witam,
bardzo dziękuję za odpowiedź i przepraszam za brak konkretów
jest to czujnik indukcyjny NPN - sygnał 0V
Sygnał z czujnika podpięty jest do pinu 7 (wejście) a pin 8 służy jako wyjście
Dziękuję i doceniam każdą wskazówkę

Kod jaki napisałem to

Kod:
void setup() {
 pinMode(8, OUTPUT);
 pinMode(7, INPUT_PULLUP);
 digitalWrite(8, LOW);
}

void loop()
{

 if (digitalRead(7)== LOW){
   delay(5000);
   digitalWrite(8, HIGH);
 } else {
   digitalWrite(8, LOW);
 }
}


Działa jednak po jakimś czasie załącza pin 8 nawet kiedy obiekt nie przykrywa czujnika przez 5s


RE: czujnik - arduino - krn78 - 01-12-2017

Zrób tak:
Kod:
int czas;
void setup() {
  pinMode(8, OUTPUT); 
  pinMode(7, INPUT_PULLUP); 
  digitalWrite(8, LOW); 
}
 
void loop()
{
  czas=millis();
  while(digitalRead(7)== LOW){
    if((digitalRead(7)== LOW)&&(millis()-czas>5000){
    digitalWrite(8, HIGH); 
  }
  digitalWrite(8, LOW); 
  }
}
To może zadziałać Smile


RE: czujnik - arduino - josseff - 01-12-2017

(01-12-2017, 14:39)josseff napisał(a):
(01-12-2017, 13:54)krn78 napisał(a): Zrób tak:
Kod:
int czas;
void setup() {
  pinMode(8, OUTPUT); 
  pinMode(7, INPUT_PULLUP); 
  digitalWrite(8, LOW); 
}
 
void loop()
{
  czas=millis();
  while(digitalRead(7)== LOW){
   if((digitalRead(7)== LOW)&&(millis()-czas>5000){
    digitalWrite(8, HIGH); 
  }
  digitalWrite(8, LOW); 
  }
}
To może zadziałać Smile
Niestety nie działa tak jak potrzebuję
Z jakiegoś powodu przy tym kodzie daje mi 1.2V na pin 8 kiedy jest HIGH i kiedy już raz pin przechodzi w stan HIGH to potem za kazdym razem kiedy czujnik jest zakryty na sekundę pin 8 też przechodzi w stan HIGH
Naprawdę bardzo doceniam pomoc


RE: czujnik - arduino - namok - 01-12-2017

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


RE: czujnik - arduino - josseff - 01-12-2017

(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

Witam i dziękuję za zainterseowanie i pomoc
Wtej chwili kod wygląda tak

Kod:
int czas;
void setup() {
 pinMode(8, OUTPUT);
 pinMode(7, INPUT_PULLUP);
 digitalWrite(8, LOW);
}

void loop()
{
 czas=millis();
 while(digitalRead(7)== LOW){
 
  if((digitalRead(7)==1)&&(millis())){
  }
  if(millis()-czas>5000)
   digitalWrite(8, HIGH);
 
  }
 digitalWrite(8, LOW);
 }


Problem jest tylko jeden - po kilkudziesięciu krótkich sygnałach z czujnika (poniżej 5s) pin 8 przechodzi w tryb HIGH za każdym razem kiedy czujnik daje sygnał


RE: czujnik - arduino - namok - 01-12-2017

Zamień mój pseudokod na program i będzie działało tak jak oczekujesz.


RE: czujnik - arduino - krn78 - 04-12-2017

(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ść.


RE: czujnik - arduino - namok - 04-12-2017

Pseudokod jest prawidłowy.
Wciśnięty przycisk(zadziałany czujnik) daje na wyjściu sygnał niski.