Skocz do zawartości

Sterowanie diodą LED za pomocą przycisków


LittleKing

Pomocna odpowiedź

Przede wszystkim witam wszystkich😊

Buduje button boxa do Farming Simulator i o ile sama budowa to dla mnie nie problem o tyle poległem na pisaniu programu. A oto mój problem: (podany na przykładowych pinach)

Do pinu 9, 10 oraz 11 mam podłączone przyciski 

Pin 11 to dioda LED 

I teraz chciał bym sprawić że:

Naciśnięcie pinu 9 zapala diodę na stałe.

A naciśnięcie pinu 9, 10 lub 11 ja gasi. 

Czemu ma to służyć, przycisk 9 to przycisk odpowiadający za światła w grze, przycisk 10 zmiana pojazdu. W grze po zmianie pojazdu nie przenoszone są "ustawienia" świateł z poprzedniego więc dioda która miała by służyć jako kontrolka zapalonych świateł musi zgasnąć. Tak samo jak w przypadku przycisku 11 który ma być odpowiedzialny za opuszczenie pojazdu. Ja wiem że pewnie dla wielu z was to nie problem ale ja walczę już któryś dzień z tym i efekty tego są marne, internet przeszukałem i wszędzie są przykłady ale tylko dla wersji gdzie dioda świeci ale gdy trzymamy przycisk a ja chcę go nacisnąć i święci do momentu ponownego naciśnięcia któregoś z przykładowych przycisków.

Z góry dziękuje jeżeli ktoś by był miły mi w tym pomóc

 

Edit nr.2 Wymyśliłem sposób zapalania i gaszenia diody w taki oto sposób:

void setup() {
  pinMode(13,OUTPUT);
  pinMode(12,INPUT_PULLUP);
  pinMode(11,INPUT_PULLUP);
}

boolean stan=0; //prawda lub fałsz
void loop() {
  if(digitalRead(12) == LOW)//Odczytanie stanu przycisku
  {
    delay(20);
    stan=!stan;//Odwrotnosc stanu 0->1 badz 1->0
    digitalWrite(13,stan);
    while(digitalRead(12) == LOW);
    delay(20);
  }
  if(digitalRead(11) == LOW)//Odczytanie stanu przycisku
  {
    delay(20);
    stan=0;//Zmienia stan na 0
    digitalWrite(13,stan);
    while(digitalRead(12) == LOW);
    delay(20);
}
}

Tylko teraz rodzi się problem że o ile przycisk 11 działa poprawnie w grze oraz wyłącza diodę o tyle przycisk 12 nie zawsze łapie w grze choć trzeba przyznać że diodą steruje idealnie.

Kod w całości:

// Simple example application that shows how to read four Arduino
// digital pins and map them to the USB Joystick library.
//
// Ground digital pins 9, 10, 11, and 12 to press the joystick 
// buttons 0, 1, 2, and 3.
//
// NOTE: This sketch file is for use with Arduino Leonardo and
//       Arduino Micro only.
//
// by Matthew Heironimus
// 2015-11-20
//--------------------------------------------------------------------

#include <Joystick.h>

Joystick_ Joystick;

void setup() {
  // Initialize Button Pins
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(13, OUTPUT);

  // Initialize Joystick Library
  Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 9;

// Last state of the button
int lastButtonState[4] = {0,0,0,0};

boolean stan=0; //prawda lub fałsz
void loop() {

  // Read pin values
  for (int index = 0; index < 4; index++)
  {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(50);

 //Moje dodatki
 if(digitalRead(12) == LOW)//Odczytanie stanu przycisku
  {
    delay(20);
    stan=!stan;//Odwrotnosc stanu 0->1 badz 1->0
    digitalWrite(13,stan);
    while(digitalRead(12) == LOW);
    delay(20);
  }
  if(digitalRead(11) == LOW)//Odczytanie stanu przycisku
  {
    delay(20);
    stan=0;//Zmienia stan na 0
    digitalWrite(13,stan);
    while(digitalRead(12) == LOW);
    delay(20);
}
}

 

 

 

 

Edytowano przez LittleKing
Nowe przemyślenia
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.