• 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
Wylaczanie przekaznikow + sensor odleglosci
#1
Cześć
Mam pewien problem w zrozumieniu logiki programu w moim projekcie mam Ardka do niego podłączony LCD 2 x 16 i na nim wyświetlam wyniki pomiaru z czujnika odległości, dodatkowo podłączona jest listwa z czterema przekaźnikami.

Zamierzałem aby po syganel ode mnie, program zaczynał mierzyć odległość i w zależności od wyniku uruchamiał przekaźniki i chyba czegoś nie rozumiem :Smileie powiem mam troszkę ciasny łeb Big Grin

Chciałbym zrobić funkcję która po jej wywołaniu włączy przekaźnik 1, aż czujnik nie wskaże 30 cm, gdy dojdzie do 30 cm powinien się włączyć przekaźnik 2, a gdy dojdzie do wartości np 3cm oba się wyłaczają. A u mnie to włączają się jak chcą Big Grin

oto mój kod




Kod:
/*
NodeMCU i2C 16x2 LCD
Kod testowy
*/

#include <LiquidCrystal_I2C.h> // Dołączenie biblioteki do obsługi LCD
LiquidCrystal_I2C lcd(0x3F, 16, 2); // Konfiguracja portu LCD 0x3F, ilość znaków w jednej linii 16, ilość linii 2

#define trigPin 6 //ustawienie pinu 6 dla czujnika
#define echoPin 7 //ustawienie pinu 7 dla czujnika

#define p1 2 //definicja przekaznika 1
#define p2 3 //definicja przekaznika 2
#define p3 4 //definicja przekaznika 3
#define p4 5 //definicja przekaznika 4

int startPracy = 8; //sygnal aby zaczela sie wykonywac funkcja


void setup()
{
 pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
 pinMode(echoPin, INPUT); //a echo, jako wejście
 
 pinMode(p1, OUTPUT); //pin mody dla przekaznikow
 pinMode(p2, OUTPUT);
 pinMode(p3, OUTPUT);
 pinMode(p4, OUTPUT);
 
 digitalWrite(p1, HIGH); //ustawienie stanu poczatkowego dla przekaznikow
 digitalWrite(p2, HIGH);
 digitalWrite(p3, HIGH);
 digitalWrite(p4, HIGH);
}

void loop()
{

 pracaPrzekaznikow(); //wywolanie funkcji dla przekaznikow

}

//funcka mierzaca odelglosc zwraca wynik w cm

int zmierzOdleglosc() {
 long czas, dystans;

 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);

 czas = pulseIn(echoPin, HIGH);
 dystans = czas / 58;

 return dystans;
 
}

void pracaPrzekaznikow(){

 lcd.init();   // Funkcja inicjalizujaca LCD
 lcd.backlight(); // Włączenie lub wyłączenie podświetlania LCD
 lcd.setCursor(0, 0); //ustawienie karetki znak 0 / linia 2
 lcd.print("Tryb Pracy"); // Wyświetlenie „Witaj Świecie” w pierwszej linii
 lcd.setCursor(0, 1);//ustawienie karetki /znak 0 / linia 2      
 lcd.print(zmierzOdleglosc()); // Wyświetlenie „Witaj” w drugiej linii
 delay(1000);
 
 if(startPracy == 8){
     
     if (zmierzOdleglosc() < 30) {// odleglosc mniejsza od 30cm
         
     digitalWrite(p1, LOW); // zmiana stanu przekaznika, start pracy
     


     lcd.init();   // Funkcja inicjalizujaca LCD
     lcd.backlight(); // Włączenie lub wyłączenie podświetlania LCD
     lcd.setCursor(0, 0); //ustawienie karetki znak 0 / linia 2
     lcd.print(zmierzOdleglosc()); // Wyświetlenie w pierwszej linii
     lcd.setCursor(0, 1);//ustawienie karetki /znak 0 / linia 2      
     lcd.print("Przekaznik 1 wlaczony"); // Wyświetlenie  w drugiej linii
     
     }  else {
       
       digitalWrite(p1, HIGH);
       digitalWrite(p2, LOW);
       lcd.init();   // Funkcja inicjalizujaca LCD
       lcd.backlight(); // Włączenie lub wyłączenie podświetlania LCD
       lcd.setCursor(0, 0); //ustawienie karetki znak 0 / linia 2
       lcd.print(zmierzOdleglosc()); // Wyświetlenie w pierwszej linii
       lcd.setCursor(0, 1);//ustawienie karetki /znak 0 / linia 2      
       lcd.print("Przekaznik 2 wlaczony"); // Wyświetlenie w drugiej linii
     
         
         
         }
         if(zmierzOdleglosc() == 3) {
         
         digitalWrite(p2, HIGH);
         
         lcd.init();   // Funkcja inicjalizujaca LCD
         lcd.backlight(); // Włączenie lub wyłączenie podświetlania LCD
         lcd.setCursor(0, 0); //ustawienie karetki znak 0 / linia 2
         lcd.print(zmierzOdleglosc()); // Wyświetleniew pierwszej linii
         lcd.setCursor(0, 1);//ustawienie karetki /znak 0 / linia 2      
         lcd.print("Praca zakonczona"); // Wyświetlenie w drugiej linii
       
       
       }


   
   
   
   
   }
 
 
 }
 
Odleglosc mierzy sie dobrze LCD wyswitla dobrze ale przekaźniki nie działają z moim planem Sad

Można poprosić o pomoc
 
Odpowiedź
  


Wiadomości w tym wątku
Wylaczanie przekaznikow + sensor odleglosci - przez Damianso - 22-08-2017, 21:03

Skocz do:


Przeglądający: 1 gości