• 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
Wyswietlacz lcd, wejscia i wyjscia
#21
(16-10-2017, 20:04)bond napisał(a): Zrobiłem tak jak proponujesz wyciąłem wszystko związane z wyświetlaczem. Ale nadal mi się zapętliło.
Jak włączę led1 i led2 to nie mogę wyłączyć np. led1 jak nie wyłączę led2 i tak w koło.
Wiem, że robię jakiś błąd, dlatego potrzebuję wsparcia i podpowiedzi gdzie robię błąd.
Twój problem polega na tym że nie rozumiesz jak działa if.
Odpowiedz na pytanie: co się wykona w programie jeśli warunek "if (digitalRead(11) == LOW)" będzie spełniony.
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ź
#22
Tak jak napisał wyżej kolega namok przyjrzyj się jak działa sprawdzenie pierwszego warunku IF.
Szczególnie zobacz gdzie zamyka się druga klamra po tym warunku...

Aby Tobie łatwiej było to zobaczyć to tylko uporządkowałem Twój program.
Zerknij poniżej...

Kod:
void setup()
{
 // put your setup code here, to run once:
 pinMode(11, INPUT_PULLUP); //Przycisk jako wejście
 pinMode(12, INPUT_PULLUP);
 pinMode(10, OUTPUT); //Dioda jako wyjście
 pinMode(8,OUTPUT);//Dioda jako wyjście
 digitalWrite(10,LOW); //Wyłączenie diody
 digitalWrite(9,LOW);//Wyłączonie diody
}

void loop()
{
 if (digitalRead(11) == LOW)
 {
   //Jeśli przycisk wciśnięty
   digitalWrite(10,HIGH); //Włącz diodę1
 }
 else
 {
   //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
   delay(200); //Opóźnienie
   digitalWrite(10,LOW);

   if (digitalRead(12) == LOW)
   {
     //Jeśli przycisk wciśnięty
     digitalWrite(8, HIGH); //Wyłącz diodę
   }
   else
   {
     //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
     delay(200); //Opóźnienie
     digitalWrite(8, LOW); //Wyłącz diodę
   }
 }
}

Poniżej natomiast zamieściłem moje rozwiązanie Twojego problemu.
Jednak sprawdź czy o to Ci chodziło.

Kod:
void setup()
{
 // put your setup code here, to run once:
 pinMode(11, INPUT_PULLUP); //Przycisk jako wejście
 pinMode(12, INPUT_PULLUP);
 pinMode(10, OUTPUT); //Dioda jako wyjście
 pinMode(8,OUTPUT);//Dioda jako wyjście
 digitalWrite(10,LOW); //Wyłączenie diody
 digitalWrite(9,LOW);//Wyłączonie diody
}

void loop()
{
 if (digitalRead(11) == LOW)
 {
   //Jeśli przycisk wciśnięty
   digitalWrite(10,HIGH); //Włącz diodę1
 }
 else
 {
   //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
   delay(200); //Opóźnienie
   digitalWrite(10,LOW);
 }

 if (digitalRead(12) == LOW)
 {
   //Jeśli przycisk wciśnięty
   digitalWrite(8, HIGH); //Wyłącz diodę
 }
 else
 {
   //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
   delay(200); //Opóźnienie
   digitalWrite(8, LOW); //Wyłącz diodę
 }
}

Staraj się porządkować swoje programy bo to bardzo ułatwia ich analizę.
Do szybkiego formatowania używam skrótu: CTRL + T
Wypróbuj ten skrót podczas pisania swoich programów, polecam.
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#23
(17-10-2017, 19:46)ANT napisał(a): Tak jak napisał wyżej kolega namok przyjrzyj się jak działa sprawdzenie pierwszego warunku IF.
Szczególnie zobacz gdzie zamyka się druga klamra po tym warunku...

Aby Tobie łatwiej było to zobaczyć to tylko uporządkowałem Twój program.
Zerknij poniżej...

Kod:
void setup()
{
 // put your setup code here, to run once:
 pinMode(11, INPUT_PULLUP); //Przycisk jako wejście
 pinMode(12, INPUT_PULLUP);
 pinMode(10, OUTPUT); //Dioda jako wyjście
 pinMode(8,OUTPUT);//Dioda jako wyjście
 digitalWrite(10,LOW); //Wyłączenie diody
 digitalWrite(9,LOW);//Wyłączonie diody
}

void loop()
{
 if (digitalRead(11) == LOW)
 {
   //Jeśli przycisk wciśnięty
   digitalWrite(10,HIGH); //Włącz diodę1
 }
 else
 {
   //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
   delay(200); //Opóźnienie
   digitalWrite(10,LOW);

   if (digitalRead(12) == LOW)
   {
     //Jeśli przycisk wciśnięty
     digitalWrite(8, HIGH); //Wyłącz diodę
   }
   else
   {
     //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
     delay(200); //Opóźnienie
     digitalWrite(8, LOW); //Wyłącz diodę
   }
 }
}

Poniżej natomiast zamieściłem moje rozwiązanie Twojego problemu.
Jednak sprawdź czy o to Ci chodziło.

Kod:
void setup()
{
 // put your setup code here, to run once:
 pinMode(11, INPUT_PULLUP); //Przycisk jako wejście
 pinMode(12, INPUT_PULLUP);
 pinMode(10, OUTPUT); //Dioda jako wyjście
 pinMode(8,OUTPUT);//Dioda jako wyjście
 digitalWrite(10,LOW); //Wyłączenie diody
 digitalWrite(9,LOW);//Wyłączonie diody
}

void loop()
{
 if (digitalRead(11) == LOW)
 {
   //Jeśli przycisk wciśnięty
   digitalWrite(10,HIGH); //Włącz diodę1
 }
 else
 {
   //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
   delay(200); //Opóźnienie
   digitalWrite(10,LOW);
 }

 if (digitalRead(12) == LOW)
 {
   //Jeśli przycisk wciśnięty
   digitalWrite(8, HIGH); //Wyłącz diodę
 }
 else
 {
   //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
   delay(200); //Opóźnienie
   digitalWrite(8, LOW); //Wyłącz diodę
 }
}

Staraj się porządkować swoje programy bo to bardzo ułatwia ich analizę.
Do szybkiego formatowania używam skrótu: CTRL + T
Wypróbuj ten skrót podczas pisania swoich programów, polecam.
Mam nadziej, że powoli udaje mi się opanować pętle if. Dziękuję za pomoc.
Tym razem napotkałem kolejny problem.
Mam trzy diody led (ledz4 - stan Ok, ledc4 - stan za niski i ledc5 - stan za wysoki) oraz dwa włączniki (przycisk zwalniany 4 i 5). Przy załączonych włącznikach świeci lcdz4, przy zwolnieniu jednego zaświeca ledc4 przy ponownym z powrotem włącza ledz4 i podobnie przy włączeniu drugiego przycisku zaświeca ledc5.
I tu mam problem. Sad  Dioda ledc4 nie gaśnie do końca lecz przygasa w obu przypadkach.
Proszę o pomoc co tym razem źle robię.
W załączeniu moje kody.

Kod:
// Ciśnienie
const int button4 = 3; // Włącznik za niskie ciśnienie
const int button5 = 4; //Włącznik za wysokie ciśnienie
// LED CZERWONE
const int ledc4 =  10; //niskie ciśnienie
const int ledc5 =  9;//wysokie ciśnienie
// LED ZIELONE
const int ledz4 =  5;//Ciśnienie Ok
;;
int buttonState4 = 1;
int buttonState5 = 1;
void setup() {
 Serial.begin(9600);
 pinMode(ledz4, OUTPUT); // LED VSP G
 pinMode(ledc4, OUTPUT); // LED niskie VSP R
 pinMode(ledc5, OUTPUT); // LED wysokie VSP R

 digitalWrite(ledz4, LOW);

 digitalWrite(ledc4, LOW);
 digitalWrite(ledc5, LOW);

 pinMode(button4, INPUT_PULLUP);
 pinMode(button5, INPUT_PULLUP);
}
void loop()
{
 buttonState4 = digitalRead(button4);
 buttonState5 = digitalRead(button5);

 if (buttonState4 == LOW) {
   // turn LED on:
   digitalWrite(ledc4, LOW);
   digitalWrite(ledc5, LOW);
   digitalWrite(ledz4, HIGH);
 } else {
   // turn LED off:
   digitalWrite(ledz4, LOW);
   digitalWrite(ledc4, HIGH);
   digitalWrite(ledc5, LOW);
 }
 if (buttonState5 == LOW) {
   // turn LED on:
   digitalWrite(ledc5, LOW);
   digitalWrite(ledc4, LOW);
   digitalWrite(ledz4, HIGH);
 } else {
   // turn LED off:
   digitalWrite(ledz4, LOW);
   digitalWrite(ledc5, HIGH);
   digitalWrite(ledc4, LOW);
 }
}
 
Odpowiedź
#24
Pisałem o odpowiednim wstawianiu kodu programu - olewasz.
Pisałem o symulatorze - też zapewne nie używasz(doskonale nadaje się do takich przypadków).
Używaj znaczących nazw np cisnienieNiskie zamiast ledc4, podobnie z przyciskami.
Podaj schemat elektryczny układu lub dokładnie opisz kiedy świeci dioda(podanie stanu wysokiego lub niskiego na wyjście) i jaki jest stan wejścia po naciśnięciu przycisku.

Edit:
Bezwzględnie podaj schemat elektryczny.
Jeśli wstawiasz komentarze to muszą być zgodne z rzeczywistością a nie "turn LED on", "turn LED off"
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ź
#25
Poniżej umieściłem poprawnie sformatowany i prawidłowo wklejony na formu kod Twojego programu.

Niech kolega bond weźmie to do serca, że nam łatwiej analizować taki zapis niż przedzierać
się przez kolejne linie jak w zamieszczonym powyżej listingu.

Abyśmy mogli przeanalizować o co chodzi to poprosimy o jakiś schemat.

Kod:
// Ciśnienie
const int button4 = 3;   // Włącznik za niskie ciśnienie
const int button5 = 4;   //Włącznik za wysokie ciśnienie

// LED CZERWONE
const int ledc4 =  10;   //niskie ciśnienie
const int ledc5 =  9;    //wysokie ciśnienie

// LED ZIELONE
const int ledz4 =  5;    //Ciśnienie Ok


int buttonState4 = 1;
int buttonState5 = 1;

void setup()
{
 Serial.begin(9600);
 pinMode(ledz4, OUTPUT);   // LED VSP G
 pinMode(ledc4, OUTPUT);   // LED niskie VSP R
 pinMode(ledc5, OUTPUT);   // LED wysokie VSP R

 digitalWrite(ledz4, LOW);

 digitalWrite(ledc4, LOW);
 digitalWrite(ledc5, LOW);

 pinMode(button4, INPUT_PULLUP);
 pinMode(button5, INPUT_PULLUP);
}

void loop()
{
 buttonState4 = digitalRead(button4);
 buttonState5 = digitalRead(button5);

 if (buttonState4 == LOW)
 {
   // turn LED on:
   digitalWrite(ledc4, LOW);
   digitalWrite(ledc5, LOW);
   digitalWrite(ledz4, HIGH);
 }
 else
 {
   // turn LED off:
   digitalWrite(ledz4, LOW);
   digitalWrite(ledc4, HIGH);
   digitalWrite(ledc5, LOW);
 }
 if (buttonState5 == LOW)
 {
   // turn LED on:
   digitalWrite(ledc5, LOW);
   digitalWrite(ledc4, LOW);
   digitalWrite(ledz4, HIGH);
 }
 else
 {
   // turn LED off:
   digitalWrite(ledz4, LOW);
   digitalWrite(ledc5, HIGH);
   digitalWrite(ledc4, LOW);
 }
}
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#26
(23-10-2017, 16:09)ANT napisał(a): Poniżej umieściłem poprawnie sformatowany i prawidłowo wklejony na formu kod Twojego programu.

Niech kolega bond weźmie to do serca, że nam łatwiej analizować taki zapis niż przedzierać
się przez kolejne linie jak w zamieszczonym powyżej listingu.

Abyśmy mogli przeanalizować o co chodzi to poprosimy o jakiś schemat.

Kod:
// Ciśnienie
const int button4 = 3;   // Włącznik za niskie ciśnienie
const int button5 = 4;   //Włącznik za wysokie ciśnienie

// LED CZERWONE
const int ledc4 =  10;   //niskie ciśnienie
const int ledc5 =  9;    //wysokie ciśnienie

// LED ZIELONE
const int ledz4 =  5;    //Ciśnienie Ok


int buttonState4 = 1;
int buttonState5 = 1;

void setup()
{
 Serial.begin(9600);
 pinMode(ledz4, OUTPUT);   // LED VSP G
 pinMode(ledc4, OUTPUT);   // LED niskie VSP R
 pinMode(ledc5, OUTPUT);   // LED wysokie VSP R

 digitalWrite(ledz4, LOW);

 digitalWrite(ledc4, LOW);
 digitalWrite(ledc5, LOW);

 pinMode(button4, INPUT_PULLUP);
 pinMode(button5, INPUT_PULLUP);
}

void loop()
{
 buttonState4 = digitalRead(button4);
 buttonState5 = digitalRead(button5);

 if (buttonState4 == LOW)
 {
   // turn LED on:
   digitalWrite(ledc4, LOW);
   digitalWrite(ledc5, LOW);
   digitalWrite(ledz4, HIGH);
 }
 else
 {
   // turn LED off:
   digitalWrite(ledz4, LOW);
   digitalWrite(ledc4, HIGH);
   digitalWrite(ledc5, LOW);
 }
 if (buttonState5 == LOW)
 {
   // turn LED on:
   digitalWrite(ledc5, LOW);
   digitalWrite(ledc4, LOW);
   digitalWrite(ledz4, HIGH);
 }
 else
 {
   // turn LED off:
   digitalWrite(ledz4, LOW);
   digitalWrite(ledc5, HIGH);
   digitalWrite(ledc4, LOW);
 }
}
Przyjmuję wszystko na klatę. Mam nadzieję, że niedługo złapie to co powinienem, ale jeszcze trochę potrzebuję pomocy. Zainstaluję sobie proponowany program do analizy i być może to mi będzie pomocne.
Wysyłam wam schemat (plan ) działania mojego wyświetlacza. Mam nadzieje, iż to pomoże Wam zrozumieć moją myśl.
Pozdrawiam


Załączone pliki
.pdf   stan LH.pdf (Rozmiar: 1.31 MB / Pobrań: 4)
 
Odpowiedź
#27
OK. Teraz rozumiem co chciałeś osiągnąć.

Poprawiłem Twój kod tak aby działał według Twoich założeń.

Zauważyłem też w schemacie, że stany czujników mogą osiągnąć jeszcze jeden stan... AWARII.
Sytuacja taka może się przydarzyć, gdy oba czujniki będą rozwarte.

Dopisałem taką możliwość w kodzie.
Stan AWARII sygnalizowany będzie dodatkową żółtą diodą LED.

Przetestowałem u siebie i wszystko działa OK.

Daj znać czy teraz u Ciebie również wszystko działa tak jak chciałeś.

Poniżej kod:

Kod:
// Ciśnienie

// UWAGA!
//------------------------------------------
// Zakładam, ze diody LED są podłączone tak,
// że świecą gdy jest stan HIGH
// i są wygaszone przy stanie LOW.
// -----------------------------------------

const int button4 = 3;        //Włącznik za niskie ciśnienie
const int button5 = 4;        //Włącznik za wysokie ciśnienie

// LED ŻÓŁTY
const int led_awaria =  11;   //awaria czujników

// LED CZERWONE
const int ledc4 =  10;        //niskie ciśnienie
const int ledc5 =  9;         //wysokie ciśnienie

// LED ZIELONY
const int ledz4 =  5;         //Ciśnienie Ok

int buttonState4 = 1;
int buttonState5 = 1;

void setup()
{

 Serial.begin(9600);
 
 pinMode(led_awaria, OUTPUT);  // LED awaria czujników
 pinMode(ledz4, OUTPUT);       // LED VSP G
 pinMode(ledc4, OUTPUT);       // LED niskie VSP R
 pinMode(ledc5, OUTPUT);       // LED wysokie VSP R

 digitalWrite(ledz4, LOW);

 digitalWrite(ledc4, LOW);
 digitalWrite(ledc5, LOW);

 pinMode(button4, INPUT_PULLUP);
 pinMode(button5, INPUT_PULLUP);
}

void loop()
{
 buttonState4 = digitalRead(button4);
 buttonState5 = digitalRead(button5);

 if (buttonState4 == LOW & buttonState5 == LOW)
 {
   // Stan: CISNIENIE OK
   digitalWrite(led_awaria, LOW);
   digitalWrite(ledc5, LOW);
   digitalWrite(ledc4, LOW);
   digitalWrite(ledz4, HIGH);
 }

 if (buttonState4 == HIGH & buttonState5 == LOW)
 {
   // Stan: CIŚNIENIE ZA NISKIE
   digitalWrite(led_awaria, LOW);
   digitalWrite(ledc5, LOW);
   digitalWrite(ledc4, HIGH);
   digitalWrite(ledz4, LOW);
 }
 
 if (buttonState4 == LOW & buttonState5 == HIGH)
 {
   // Stan: CIŚNIENIE ZA WYSOKIE
   digitalWrite(led_awaria, LOW);
   digitalWrite(ledc5, HIGH);
   digitalWrite(ledc4, LOW);
   digitalWrite(ledz4, LOW);
 }
 
 if (buttonState4 == HIGH & buttonState5 == HIGH)
 {
   // Stan: AWARIA CZUJNIKÓW
   digitalWrite(led_awaria, HIGH);
   digitalWrite(ledc5, LOW);
   digitalWrite(ledc4, LOW);
   digitalWrite(ledz4, LOW);
 }
}
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#28
(23-10-2017, 16:09)ANT napisał(a): Poniżej umieściłem poprawnie sformatowany i prawidłowo wklejony na formu kod Twojego programu.

Niech kolega bond weźmie to do serca, że nam łatwiej analizować taki zapis niż przedzierać
się przez kolejne linie jak w zamieszczonym powyżej listingu.

Abyśmy mogli przeanalizować o co chodzi to poprosimy o jakiś schemat.

Kod:
// Ciśnienie
const int button4 = 3;   // Włącznik za niskie ciśnienie
const int button5 = 4;   //Włącznik za wysokie ciśnienie

// LED CZERWONE
const int ledc4 =  10;   //niskie ciśnienie
const int ledc5 =  9;    //wysokie ciśnienie

// LED ZIELONE
const int ledz4 =  5;    //Ciśnienie Ok


int buttonState4 = 1;
int buttonState5 = 1;

void setup()
{
 Serial.begin(9600);
 pinMode(ledz4, OUTPUT);   // LED VSP G
 pinMode(ledc4, OUTPUT);   // LED niskie VSP R
 pinMode(ledc5, OUTPUT);   // LED wysokie VSP R

 digitalWrite(ledz4, LOW);

 digitalWrite(ledc4, LOW);
 digitalWrite(ledc5, LOW);

 pinMode(button4, INPUT_PULLUP);
 pinMode(button5, INPUT_PULLUP);
}

void loop()
{
 buttonState4 = digitalRead(button4);
 buttonState5 = digitalRead(button5);

 if (buttonState4 == LOW)
 {
   // turn LED on:
   digitalWrite(ledc4, LOW);
   digitalWrite(ledc5, LOW);
   digitalWrite(ledz4, HIGH);
 }
 else
 {
   // turn LED off:
   digitalWrite(ledz4, LOW);
   digitalWrite(ledc4, HIGH);
   digitalWrite(ledc5, LOW);
 }
 if (buttonState5 == LOW)
 {
   // turn LED on:
   digitalWrite(ledc5, LOW);
   digitalWrite(ledc4, LOW);
   digitalWrite(ledz4, HIGH);
 }
 else
 {
   // turn LED off:
   digitalWrite(ledz4, LOW);
   digitalWrite(ledc5, HIGH);
   digitalWrite(ledc4, LOW);
 }
}

Dzięki za pomoc. Działa i podoba mi się twój pomysł.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości