Cześć
Czy jest ktioś na pokładzie kto ogarnia może hobbystycznie arduino?
Mam pewien problem w kodzie i nie wiem jak sobie z nim opradzić :D
Otóż mam zbudowany układ Arduino + LCD, + Czujnik odległości + Listwa 4 przekaźników. Chciałbym zrobić z dwóch przekaźników pompy wody, i to się udaje pomiar robiony przez czujnik odległosci podawany jest w cm, wyświetlany na LCD, natomiast problem to praca dwóch przekaźników, nie wiem jak je zmusić do działania pod taki algorytm.
- Start podmiany cieczy (np przycisk) -> w kodzie jest to po prostu zmienna z określoną wartościa.
- Uruchamianie 1 pompy (przekaźnik 1).
- Pomiar do 30 cm.
- Gdy czujnik pokaże 30 cm.
- Wyłaczenie 1 pompy.
- Uruchomienie 2 pompy (przekaźnik 2).
- Pomiar do 5 cm.
- Gdy czujnik pokaże 5 cm.
- Wyłączenie 2 pompy.
- Koniec podmiany.
Oto mój kod uwaga! bo mogą kogoś oczy rozboleć :D
#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
#define echoPin 7
#define p1 2
#define p2 3
#define p3 4
#define p4 5
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); //ustawienie wyjscia 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);
lcd.init(); // Funkcja inicjalizujaca LCD
lcd.backlight(); // Włączenie lub wyłączenie podświetlania LCD
}
void loop()
{
zakresWyp(30); //Zakres do 15 cm
delay(100);
}
//funkcja mierzaca odleglosc i zwracajaca 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;
}
// funkcja pracy przekaznikow
void zakresWyp(int a) {
int jakDaleko = zmierzOdleglosc();
if (jakDaleko < a) {
lcd.setCursor(0, 0);
lcd.print(zmierzOdleglosc());
lcd.println(" cm");
lcd.setCursor(0, 1);
lcd.print("Pompa P1 aktywna");
digitalWrite(p1, LOW); //wlaczenie pompy 1
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(zmierzOdleglosc());
lcd.println(" cm");
lcd.setCursor(0, 1);
lcd.print("Pompa P1 nie aktywna");
digitalWrite(p1, HIGH); //wylaczenie pompy 1
}
}
Nie wiem jak do tego wstawic pompe 2 aby nie dzialay dwie na raz, jak odam do else np popmpe 2 to czujnik zgodnie z delay w sekcji loop zmienia stan i zalcza sie p[ompa 1 potem 2 znow 1 potem 2 i tak w kółko :(