22-08-2017, 21:03
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 :ie powiem mam troszkę ciasny łeb
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ą
oto mój kod
Odleglosc mierzy sie dobrze LCD wyswitla dobrze ale przekaźniki nie działają z moim planem
Można poprosić o pomoc
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 :ie powiem mam troszkę ciasny łeb
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ą
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
Można poprosić o pomoc