31-03-2023, 00:19
Hej, mam pytanie. Kombinuje już jakiś czas i nie jestem w stanie wyszukać rozwiązania. Będzie to mój pierwszy wpis także proszę o wyrozumiałość bo jestem samoukiem. Chodzi to żeby magnes na końcu wyłączył się po wykonaniu ustalonej kombinacji ruchów ( w tym przypadku wciśnięcie po kolei trzech guzików). Ale chce żeby czas na wciśnięcie każdego guzika był ograniczony. Czyli po wciśnięciu pierwszego mamy np 2 sekundy na naciśnięcie drugiego. Jak uda się wcisnąć drugi w wyznaczonym czasie to mamy kolejne 2 sekundy na wciśnięcie trzeciego. Jeżeli nie zdążymy wcisnąć któregoś guzika w czasie to wracamy do punktu początkowego. Światełko LED jest przyczepione obok swojego guzika i sygnalizuje który guzik należy teraz nacisnąć. Najlepiej by było żeby guzik drugi i trzeci były nieaktywne, a aktywowały się dopiero po wciśnięciu guzika poprzedzającego. Ma to być zagadka zręcznościowa. W późniejszym etapie guziki będę zastępował np odbiornikami podczerwieni ale zasada działania pozostaje ta sama. Proszę o pomoc i nakierowanie mnie w jaki sposób mogłoby to wyglądać. W moim przypadku wymyśliłem że w momencie kiedy wszystkie ledy zgasną to jest końcowy efekt ale może istnieje jeszcze prostsze rozwiązanie.
void setup()
{
pinMode(13, INPUT); //guzik1
pinMode(12, INPUT); //guzik2
pinMode(11, INPUT); //guzik3
pinMode(5, OUTPUT); //led1
pinMode(4, OUTPUT); //led2
pinMode(3, OUTPUT); //led3
pinMode(2, OUTPUT); //elektromagnez
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(2, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(3, LOW);
digitalWrite(11, HIGH);
}
void loop()
{
if (digitalRead(13)==LOW) //guzik1
{
digitalWrite(5, LOW); //led1 gaśnie
digitalWrite(4, HIGH); //led2 zapala się
}
if (digitalRead(12)==LOW) //guzik2
{
digitalWrite(4, LOW); //led2 gaśnie
digitalWrite(3, HIGH); //led3 zapala się
}
if (digitalRead(11)==LOW) //guzik3
{
digitalWrite(3, LOW); //led3 gaśnie
}
if ((digitalRead(5)==LOW)&&(digitalRead(4)==LOW)&&(digitalRead(3)==LOW)) //kiedy wszystkie ledy są zgaszone
{
digitalWrite(2, LOW); //zwora magnetyczna wyłacza się
}
}
najpierw klikamy guzik1 po kliknięciu gaśnie led1 i zapala się led2. W tym momencie mamy 2 sekundy żeby nacisnąć guzik2, jeśli zdążymy to gaśnie led2 i zapala się led3 i mamy kolejne 2 sekundy żeby wcisnąć guzik3. Po wciśnięciu guzika3 gaśnie led3 i wyłącza się zwora magnetyczna. Jeżeli w którymkolwiek momencie nie zdążymy wcisnąć guzika w odpowiednim czasie to cała sekwencja wraca do początkowej czyli znowu pali się tylko led1 i musimy od nowa wcisnąć guzik1. Dobrze by było gdyby guzik2 aktywował się dopiero po wciśnięciu guzika1, a guzik3 dopiero po wciśnięciu guzika2. Z góry dziękuje za pomoc
void setup()
{
pinMode(13, INPUT); //guzik1
pinMode(12, INPUT); //guzik2
pinMode(11, INPUT); //guzik3
pinMode(5, OUTPUT); //led1
pinMode(4, OUTPUT); //led2
pinMode(3, OUTPUT); //led3
pinMode(2, OUTPUT); //elektromagnez
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(2, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(3, LOW);
digitalWrite(11, HIGH);
}
void loop()
{
if (digitalRead(13)==LOW) //guzik1
{
digitalWrite(5, LOW); //led1 gaśnie
digitalWrite(4, HIGH); //led2 zapala się
}
if (digitalRead(12)==LOW) //guzik2
{
digitalWrite(4, LOW); //led2 gaśnie
digitalWrite(3, HIGH); //led3 zapala się
}
if (digitalRead(11)==LOW) //guzik3
{
digitalWrite(3, LOW); //led3 gaśnie
}
if ((digitalRead(5)==LOW)&&(digitalRead(4)==LOW)&&(digitalRead(3)==LOW)) //kiedy wszystkie ledy są zgaszone
{
digitalWrite(2, LOW); //zwora magnetyczna wyłacza się
}
}
najpierw klikamy guzik1 po kliknięciu gaśnie led1 i zapala się led2. W tym momencie mamy 2 sekundy żeby nacisnąć guzik2, jeśli zdążymy to gaśnie led2 i zapala się led3 i mamy kolejne 2 sekundy żeby wcisnąć guzik3. Po wciśnięciu guzika3 gaśnie led3 i wyłącza się zwora magnetyczna. Jeżeli w którymkolwiek momencie nie zdążymy wcisnąć guzika w odpowiednim czasie to cała sekwencja wraca do początkowej czyli znowu pali się tylko led1 i musimy od nowa wcisnąć guzik1. Dobrze by było gdyby guzik2 aktywował się dopiero po wciśnięciu guzika1, a guzik3 dopiero po wciśnięciu guzika2. Z góry dziękuje za pomoc