• 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
Problem z przyciskiem
#1
Mam problem z przyciskiem ponieważ nie chce mi działać tak jak na filmiku.

https://www.youtube.com/watch?v=fz_A-G_xtQM
 
Odpowiedź
#2
Brakuje ci podtrzymania.

Po drugi napisz jak pragniesz by działał.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
(15-03-2018, 20:15)adix napisał(a): Brakuje ci podtrzymania.

Po drugi napisz jak pragniesz by działał.

Podtrzymania czego, bo nie rozumiem.

Chciałbym gdy nacisnę przycisk to żeby dioda zapalała się na 5 sekund.
 
Odpowiedź
#4
W skrócie .
Kod:
bool flaga;
if ( buton==0){
delay(800);
flaga=flaga!;
}
if(flaga==0){
dioda=1;
delay(5000);
dioda=0;}
Tak w skrócie ale jest to jasne mam nadzieje ze wszystko jasne.
Po za tym masz w jakimś przykładzie w arduino ide.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
(15-03-2018, 21:42)adix napisał(a): W skrócie .
Kod:
bool flaga;
if ( buton==0){
delay(800);
flaga=flaga!;
}
if(flaga==0){
dioda=1;
delay(5000);
dioda=0;}
Tak w skrócie ale jest to jasne mam nadzieje ze wszystko jasne.
Po za tym masz w jakimś przykładzie w arduino ide.

Ale jak to wygląda jeśli chodzi o podłączenie ?
 
Odpowiedź
#6
Hmmm...
Jeśli chcesz, żeby układ działał Ci tak jak chcesz, korzystając ze schematu jak na YouTube, to kod, w chyba najprostszej postaci, będzie wyglądał tak:
Kod:
void setup() //1
{ //2
pinMode(2, INPUT_PULLUP); //3
pinMode(3, OUTPUT); //4
} //5
//6
void loop() //7
{ //8
if(digitalRead(2)==LOW) //9
{ //10
digitalWrite(3, HIGH); //11
delay(5000); //12
} //13
digitalWrite(3, LOW); //14
} //15

Ponieważ jesteś (najwyraźniej) początkujący, to opiszę ten kod.
Specjalnie dla Ciebie, i dla ułatwienia, ponumerowałem linie. Umieściłem je w tzw. komentarzach, żeby nie były brane pod uwagę przez kompilator. Dzięki temu kod uruchomi się poprawnie, nie zgłaszając błędów o nieznajomości dziwnych znaków w nieodpowiednich miejscach.
W linii 7 jest warunek: digitalRead(2)==LOW. Znaczy on tyle, że odczyt z pinu 2 musi mieć wartość niską (czyli 0). Jeśli jest spełniony, wtedy wykona się kod między liniami 10 i 13 (między nawiasami klamrowymi warunku if zawartego w linii 9), który włącza diodę (a właściwie ustawia pin 3 w stan wysoki), a następnie czeka pięć sekund (5000 milisekund). Jeśli ten warunek nie jest spełniony, kod między tymi liniami jest pomijany. Po wykonaniu (lub nie) kodu z linii pomiędzy 10 i 13, wykonuje się kod z linii 14, czyli zgaszenie diody (czyli ustawia pin 3 w stan niski). Po jego wykonaniu program powróci do linii 8 (początku funkcji loop()) i będzie się wykonywał od początku: najpierw sprawdzi, czy warunek z linii 7 jest spełniony, jeśli tak, to wykona kod między liniami 10 i 13, jeśli nie, to go pominie... i tak dalej.
 
Odpowiedź
#7
Twój problem można sprowadzić do wspólnego mianownika z moim.
Mój samochód nie chce jeździć tak, jak na tym filmiku.
https://www.youtube.com/watch?v=n3tfCtsMSVU
A ty człowieku weź się zastanów dla czego mój (powiedzmy mercedes, czy chrysler) nie zachowuje się tak, jak ten na filmie.
Oczywiście nie podam ci żadnych danych mojego samochodu, ani różnic w jego jeździe.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Dla czego mój przycisk nie zachowuje się, jak jego przycisk?
ŁAJ, ŁAJ, ŁAJ?????????????????
Sad Sad Sad
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#8
Witam a propo przycisku mam maly problem w skrypcie.
CHcialbym aby przycisk dzialal (byl zaloczony na 5 sek i po 5 sekundach znow niski lub wysoki )
o to kod z tym

//controls the Arduino if you press the buttons
if (readString.indexOf("?button1on") >0){
digitalWrite(2, HIGH);
}
if (readString.indexOf("?button1off") >0){
digitalWrite(2, LOW);
}

//clearing string for next read
readString="";
 
Odpowiedź
#9
Żeby rozwiązać ów problem, trzeba się zastanowić, co robimy, gdy na przykład gotujemy ziemniaki.

Jak woda zacznie się gotować, to powiedzmy wyłączymy gaz za 20 minut.
Skąd wiemy, że minęło 20 minut?
Procedura (zapamiętaj tę nazwę) jest taka:

void gotowanie_ziemniaków(){
 Jeśli (zaczęła gotować się woda){
 spójrz na zegarek;
 Jest godzina 20:10;
 }
 Zacznij coś robić w domu, na przykład odkurzaj();
 Za każdym przesunięciem szczotki po dywanie, zerkaj na zegarek;
 Jeśli (minęła 20:30){
 zakręć gaz
 }
 }
Skąd mikrokontroler ma wiedzieć, że minęło te Twoje założone 5 sekund?

t_czas = millis; // millis to nasz zegarek.
Przypisujesz wartość millis do zmiennej t_czas w momencie przyciśnięcia przycisku, czyli wewnątrz procedury obsługującej zdarzenie przycisku.
Potem w pętli głównej sprawdzasz, czy różnica między t_czas, a millis przekroczyła nasze założenia.

jeśli (millis - t_czas > 5000){
readString="";
}

No chyba jaśniej się nie da tego wytłumaczyć.

edyta:
No może nie readString=""; należy zanegować wartość pinu.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości