Witam
Wiem że dla większości z Was to będzie banalne ale mam problem ,potrzebuję stworzyć kod by pierwszy przycisk po naciśnięciu włączał pierwsza diodę LED ,a po ponownym naciśnięciu ją wyłączał.I tak z każdym przyciskiem niezależnie
Udało mi się zrobić tylko że włączam pierwszy pozniej drugi ,trzeci czwarty a nie moge tego zrobić niezależnie
Proszę o pomoc lub jakieś wskazówki
Pozdrawaim i z góry dziękuję
Pokaz co masz, wstaw kod nakierujemy Cię
Podejrzewam że masz błąd w konstrukcji ifow wykonuje się pierwsza możliwa operacja dlatego nie możesz niezależnie musisz inaczej skonstruować te warunki daj kod to będzie wszystko jasne
Czytaj przyciski i neguj stany na wyjściach ledów.
if (digitalRead(PRZYCISK1) == LOW) digitalWrite(LED1, !digitalRead(LED1);
Itd... itd...
(02-11-2021, 23:02)mateuszmilke97@gmail.com napisał(a): [ -> ]Podejrzewam że masz błąd w konstrukcji ifow wykonuje się pierwsza możliwa operacja dlatego nie możesz niezależnie musisz inaczej skonstruować te warunki daj kod to będzie wszystko jasne
Mam taki kod w którym diody zapalają sie i po okreslonym czasie gasną
Kod:
#define P1 8
#define P2 9
#define P3 10
#define P4 11
#define D1 2
#define D2 3
#define D3 4
#define D4 5
int maxD1=0, maxD2=0, maxD3=0,maxD4=0;
void setup()
{
pinMode(P1,INPUT);
pinMode(P2,INPUT);
pinMode(P3,INPUT);
pinMode(P4,INPUT);
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
pinMode(D4,OUTPUT);
}
void loop()
{
if(digitalRead(P1)==HIGH) maxD1=500;
if(digitalRead(P2)==HIGH) maxD2=500;
if(digitalRead(P3)==HIGH) maxD3=500;
if(digitalRead(P4)==HIGH) maxD4=500;
if(maxD1>0)
digitalWrite(D1,HIGH);
else
digitalWrite(D1,LOW);
if(maxD2>0)
digitalWrite(D2,HIGH);
else
digitalWrite(D2,LOW);
if(maxD3>0)
digitalWrite(D3,HIGH);
else
digitalWrite(D4,LOW);
if(maxD4>0)
digitalWrite(D4,HIGH);
else
digitalWrite(D4,LOW);
if(maxD1>0) maxD1--;
if(maxD2>0) maxD2--;
if(maxD3>0) maxD3--;
if(maxD4>0) maxD4--;
delay(1);
}
A ja potrzebuję wstawić kod by dioda się zapalała i gasła po ponownym nacisnieciu przycisku a nie w interwale czasu
i to robi ten kod
Kod:
pinMode( 8,INPUT);
pinMode( 9,INPUT);
pinMode( 10,INPUT);
pinMode( 11,INPUT);
pinMode( 2,OUTPUT);
pinMode( 3,OUTPUT);
pinMode( 4,OUTPUT);
pinMode( 5,OUTPUT);
}
boolean stan=0;
boolean stan1=0;
void loop() {
if(digitalRead(8) == HIGH)
{
delay(20);
stan=!stan;
digitalWrite(2,stan);
while(digitalRead(8) == HIGH);
}
if (digitalRead(9) == HIGH);
{
delay(200);
stan1=!stan1;
digitalWrite(3,stan1);
while(digitalRead(9) == HIGH);
}
}
i nie wiem jak te kody połączyć by uzyskać efekt jak naciskam przycisk się zapala ponownie naciskam gasnie
Z góry dziękuję za pomoc
Nie ma potrzeby łączyć tych kodów jak chcesz uzyskać 4 włączniki 4 diody zapalane i gaszone niezależnie . A po co ta pętla while na koniec ifow? Wywal te pętle zrób dwa dodatkowe ify na kolejne dwa włączniki dodaj dwie dodatkowe zmienne stan i powinno grać
(03-11-2021, 20:08)mateuszmilke97@gmail.com napisał(a): [ -> ]Nie ma potrzeby łączyć tych kodów jak chcesz uzyskać 4 włączniki 4 diody zapalane i gaszone niezależnie . A po co ta pętla while na koniec ifow? Wywal te pętle zrób dwa dodatkowe ify na kolejne dwa włączniki dodaj dwie dodatkowe zmienne stan i powinno grać
Gdy usuwam while przyciskk działa gdy jest przycisniety jak go puszczam to wraca do stanu 0
Druga rzecz cztery ify powoduja taki problem że oczywiscie mogę włączac diody osobno ale po koleji napierw 1 pozniej 2 itd.Mi zależy by się załączały niezależnie i na zazadzie jeden klik mikrostyku to 1 drugi raz naciskamy to 0 (zasada działania przełącznika bistabilnego
(03-11-2021, 12:46)Robson Kerman napisał(a): [ -> ]Czytaj przyciski i neguj stany na wyjściach ledów.
if (digitalRead(PRZYCISK1) == LOW) digitalWrite(LED1, !digitalRead(LED1);
Itd... itd...
Użyłem Twojego sposobu i działa jest tylko mały problem bez delay nie chce się włączyc z z funkcją delay włącza sie z opóźnieniem lub raz sie włączy a raz nie proszę pomóż
Kod:
void setup() {
pinMode( 8, INPUT);
pinMode( 9, INPUT);
pinMode( 10, INPUT);
pinMode( 11, INPUT);
pinMode( 2, OUTPUT);
pinMode( 3, OUTPUT);
pinMode( 4, OUTPUT);
pinMode( 5, OUTPUT);
}
void loop() {
if (digitalRead(8) == HIGH) digitalWrite((2), !digitalRead(2));
delay(250);
if (digitalRead(9) == HIGH) digitalWrite((3), !digitalRead(3));
delay(250);
}
(03-11-2021, 21:58)dimetylo napisał(a): [ -> ] (03-11-2021, 20:08)mateuszmilke97@gmail.com napisał(a): [ -> ]Nie ma potrzeby łączyć tych kodów jak chcesz uzyskać 4 włączniki 4 diody zapalane i gaszone niezależnie . A po co ta pętla while na koniec ifow? Wywal te pętle zrób dwa dodatkowe ify na kolejne dwa włączniki dodaj dwie dodatkowe zmienne stan i powinno grać
Gdy usuwam while przyciskk działa gdy jest przycisniety jak go puszczam to wraca do stanu 0
Druga rzecz cztery ify powoduja taki problem że oczywiscie mogę włączac diody osobno ale po koleji napierw 1 pozniej 2 itd.Mi zależy by się załączały niezależnie i na zazadzie jeden klik mikrostyku to 1 drugi raz naciskamy to 0 (zasada działania przełącznika bistabilnego
No ja rozumiem ale te ify muszą działać, kazy warunek jest spełniany osobno i niezależnie. Robson kerman też tak pisał o ifach. Drgania styków powoduja ze dioda załącza się raz nie załącza. Wrócę z pracy to napisze Tobie odpowiedni kod i zrozumiesz wszystko.
Nie no to jest zbyt proste aby pisać cały kod to musi działać
If(digitalRead(8)==HIGH){
delay(20);
digitalWrite(2, !digitalRead(2));
while(digitalRead(8) == HIGH) ;
delay (20);
}
I to wszystko powtórz tak jeszcze 3 razy dla innych wlacznikow i będzie to działać a jak masz problem to może kwestia że nie podciągasz rezystorem 10k do masy włącznika bo miałem takie problemy też keidya z czymś.
Jak tak to weź w pinMode ustaw jako włączniki jako INPUT_PULLUP i wtedy w ifach i while od digitalRead(x) wpisz LOW i pamiętaj o fizycznym podłączeniu wlacznikow od masy