• 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
Micro Pro, biblioteka joystick.h, brak reakcji na warunek
#1
Witam.
Pierwszy post więc wielkie DZIEŃ DOBRY wszystkim.

Buduję H-Shifter z trzema pedałami.

moduł Micro Pro

podłączona biblioteka
https://github.com/MHeironimus/ArduinoJo...ersion-1.0




Kod:
// Sterowanie DIY H-Shifter i DIY 3x pedały
//
// moduł Arduino Micro Pro
//
// H-SHIFTER :
// 6 biegów + wsteczny + 1 przycisk do zmiany zakresu z 1-6 na 7-12
// podpięte pod piny 2-9
//
// 3x pedały :
// trzy osie podpięte pod A1, A2,A3
//

#include <Joystick.h>   podłaczenie biblioteki joysticka

// Variable
int gas = A1;           // przyspieszenie
int gasValue = 0;      // os Throttle

int brake = A2;         // hamulec
int brakeValue = 0;    // os X

int clutch = A3;        // sprzęgło
int clutchValue = 0;   // os Y


////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup()

{    // start SETUP

 for(int i = 2; i <= 9; i++)
    pinMode(i, INPUT_PULLUP);     // ustawienie wejść 2-9 jako przyciski


 Joystick.begin(true);   // inicjacja biblioteki JOYSTICK
 Serial.begin(9600);  // włączenie portu szeregowego

} // end SETUP

////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

void loop()
{  // start LOOP

/////////////////////////////////////////////////////
for(int z=2; z<=9; z++)
   Serial.println(digitalRead(z) );    // monitorowanie stanu wejść 2-9

///////////////////////////////////////////////////////////////////////////////

// SHIFTER

 for (int x=2; x<=9; x++)
 {
   if(digitalRead(x == LOW))
     Joystick.setButton(x-2,1);  // x-2 bo przyciski joysticka numerowane 0-7
   else
     Joystick.setButton(x-2,0);
 }
 delay(1);
// koniec SHIFTER

/////////////////////////////////////////////////////

// GAZ

 gasValue = analogRead(gas);
  // przeskalownie z 0->1024 na 0->255
    gasValue = gasValue / 4 ;
    Joystick.setThrottle(gasValue);   // ustawienie osi
    delay(1);

// koniec GAZ

/////////////////////////////////////////////////////

// HAMULEC

 brakeValue = analogRead(brake);
 // przeskalownie z 0->1024 na 0->255 na -127->127
   brakeValue = (brakeValue / 4) - 127;
//      if (brakeValue<-120) brakeValue=-120;  // ograniczenie skrajnych położeń potencjometu
//      if (brakeValue>120) brakeValue=120;
 
   Joystick.setXAxis(brakeValue);   // ustawienie osi
   delay(1);

// koniec HAMULEC

/////////////////////////////////////////////////////

// SPRZEGLO

 clutchValue = analogRead(clutch);
//   przeskalownie z 0->1024 na 0->255 na -127->127
 clutchValue = ((clutchValue / 4) - 127);
//     if (clutchValue<-120) clutchValue=-120;  // ograniczenie skrajnych położeń potencjometu
//     if (clutchValue>120) clutchValue=120;
 
  Joystick.setYAxis(clutchValue);  // ustawienie osi
 delay(1);

// koniec SPRZEGLO
 
}   // end LOOP

Złożony układ 
https://drive.google.com/open?id=1e1lmcl...s2sqG1omTz

Opis sytuacji

- Osie sterowania pedałami działają bez zarzutu.
- Przyciski  :
     - na monitorze portu szeregowego widać zmiany stanu pinów 2-9
     - w komputerze we właściwościach joysticka wariują przyciski :
1. na kodzie jak wyżej - nie działają
2. po zmianie sekcji kodu SHIFTER  z
 
Kod:
if(digitalRead(x == LOW))
    Joystick.setButton(x-2,1);
else
    Joystick.setButton(x-2,0);

na 
  
Kod:
if(digitalRead(x == LOW))
     Joystick.setButton(x-2,0);
else
    Joystick.setButton(x-2,1);


wszystkie przyciski są włączone - jakby widział tylko część po "else"

3. po wyrzuceniu warunku i wpisaniu po pętli
Kod:
for (int x=2; x<=9; x++)
 {
   Joystick.setButton(x-2,1);
   delay(500);
   Joystick.setButton(x-2,0);
 }

działa jak należy tzn cyklicznie włącza i wyłącza kolejny przycisk joysticka

Ponadto po poruszeniu samym modułem losowo włącza/wyłącza przyciski joysticka.

Wczoraj wieczorem nie było problemu. Moduł poleżał i mu się pomieszało ? Padł ?
 
Odpowiedź
#2
Jeżeli wczoraj działał, to program jest w porządku i nie grzeb w nim.
Podejrzewam, że jest to wina kiepskiej jakości płytki stykowej.
Polutuj układ na jakiejś uniwersalce i się odezwij.
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ź
#3
Dzięki za odzew.
Pominąłem płytkę stykową, chociaż nie sądzę aby to jej wina była - działają analogi i na serialu widać zmiany na przyciskach.
Wziąłem na warsztat tylko część kodu odpowiedzialną za shifter.
Podpiąłem przyciski pod inne piny, nawet warunkowałem odczytem z analoga.

Dalej to samo czyli na warunku wariuje a bez warunku z delay'em stabilnie włącza i wyłącza.
Mam jeszcze moduł UNO ale na nim biblioteka joystick nie chodzi.

Chyba zamówię jeszcze jeden moduł Micro Pro.
 
Odpowiedź
#4
Znalazłem błąd w kodzie.

W sekcji SHIFTER było 

   if(digitalRead(x == LOW))

zamiast 

  if(digitalRead(x) == LOW)

W sumie dziwne, że kompilator to puścił.....
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości