22-10-2017, 20:06
(Ten post był ostatnio modyfikowany: 15-11-2017, 11:37 przez CEO.
Powód edycji: Używamy znaczników [code]!
)
(17-10-2017, 19:46)ANT napisał(a): Tak jak napisał wyżej kolega namok przyjrzyj się jak działa sprawdzenie pierwszego warunku IF.Mam nadziej, że powoli udaje mi się opanować pętle if. Dziękuję za pomoc.
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.
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. 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);
}
}