Arduino Leonardo C++

alter_Bekannter

N.A.C.J.A.C.
Registriert
14 Juli 2013
Beiträge
4.767
Ort
Midgard
Exakt dieser:
Code alt:


Man, das Teil ist wirklich winzig, man neigt dazu zu vergessen wie klein eine micro USB Buchse ist wenn man die Bilder sieht...

Folgender Code verursacht die Beschwerde das JHoystick in dem Kontext nicht existiert: (Zeile 20: 'Joystick' was not declared in this scope)
[src=cpp]#include <Joystick.h>

void setup() {
for (int i = 2; i < 10; i++)
{
pinMode(i, INPUT_PULLUP); // set pullups on pins 2-9 for the buttons
}
Joystick.begin(); // initialise Joystick library
}
const int pinToButtonMap = 2; // start from pin 2
int lastButtonState[8] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // last state of the button

void loop() {

for (int index = 0; index < 8; index++) // go through the loop 8 times, once for each button
{
int currentButtonState = !digitalRead(index + pinToButtonMap); // read the pin and store in variable
if (currentButtonState != lastButtonState[index]) // if the button state has changed
{
Joystick.setButton(index, currentButtonState); // write the button state to the joystick <= hier
lastButtonState[index] = currentButtonState; // save state to compare for the next loop
}
}
delay(50);
}[/src]

Einrückung ist anders als im Original weil ich die Klammern und die Schreibweisen alle in Notepad++ überprüft habe.
Da bewim ersten Zugriff auf die Klasse kein Fehler auftritt und doch alles im sleben Sichtbarkeitsbereich liegt also in im Verhältnis verstehe ich das Problem nicht.

Neuer Code der funktioniert:
[src=cpp]/************************************************************************************
* NESPi NES Controller USB Gamepad v0.1 [mike.g|june2016] *
* [daftmike.com] *
*************************************************************************************/
// Adapted from 'JoystickButton' example
// by Matthew Heironimus
// 2015-11-20
// https://github.com/MHeironimus/ArduinoJoystickLibrary

#include <Joystick.h>
Joystick_ Joystick;
void setup() {
for (int i = 2; i < 10; i++)
{
pinMode(i, INPUT_PULLUP); // set pullups on pins 2-9 for the buttons
}
Joystick.begin(); // initialise Joystick library
}
const int pinToButtonMap = 2; // start from pin 2
int lastButtonState[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // last state of the button

void loop() {

for (int index = 0; index < 8; index++) // go through the loop 8 times, once for each button
{
int currentButtonState = !digitalRead(index + pinToButtonMap); // read the pin and store in variable
if (currentButtonState != lastButtonState[index]) // if the button state has changed
{
Joystick.setButton(index, currentButtonState); // write the button state to the joystick
lastButtonState[index] = currentButtonState; // save state to compare for the next loop
}
}
delay(50);
}[/src]
 
Zuletzt bearbeitet:
Wenn ich nicht weiß ob oder wo eine Library (Header-Datei installiert ist) - "updatedb" (mit sudo/su) und ein "locate Joystick.h"

Wenn die Header Datei irgendwo installiert ist, solltest du einen Treffer haben.

Über "-i" für Include kannst du dann gcc zum Beispiel Verzeichnis mitgeben das inkludiert werden soll in dem sich Quelldateien befinden, mit "-l" kannst du dem Linker sagen wenn andere Bibliothek mit gelinkt werden sollen, zum Beispiel ein SDK. "-lm" (für Math.h) oder "-lSDL2" für SDL2 oder du gehst den Weg über "pkg-config" wenn du es hast.

Siehe auch hier:

und


Edit: Ahso, ich habe deinen Kommentar in den Kommentaren überlesen... eigentlich sollte "Joystick.begin()" ja auch definiert sein, das heißt es kommt wohl eine Deklaration in "Joystick.h" ? Damit es global ist?
Zum Beispiel hier:


Dort ist Joystick als "extern" außerhalb des Headers registriert.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #3
Das ist es ja was mich irritiert, da gibts keinen Fehler.

Und wenn ich Joystick über die IDE einfüge sieht die Zeile fürs include genauso aus. Daher schätze ich mal das er wohl alles gefunden hat. Ich habe es manuell in das libraries Verzeichnis kopiert.

Edit:

Das ist die Lib.
 
Ah okay, schau mal hier:


#include "Joystick.h"

// Create Joystick
Joystick_ Joystick;

als globale Variable und vor allem auch vorher definiert.... daran liegt es wohl das er es nicht findet. :)

Bin mit C++ nicht wirklich fit, aber klar, wenn es kein Objekt innerhalb des Scopes gibt (oder global) findet man es auch nicht bzw. kann man nicht darauf zugreifen, wenn es nicht deklariert bzw. initialisiert wurde. :)
 
  • Thread Starter Thread Starter
  • #5
Okay, danke alle Fehler behoben und kompiliert.

Das Array mit Acht stellen wird mit 9 initialisiert was auch ein Fehler ist.

Edit:
Habs mit einer Bürklammer getestet, 3 von 3 getesteten "Buttons" funktionieren.:D

Ergebnis überzeugend

--- [2017-05-27 16:05 CEST] Automatisch zusammengeführter Beitrag ---

Allerdings habe ich dann trotzdem noch die Frage warum der Fehler nicht schon für Zeile 8 geworfen wurde
 
Zuletzt bearbeitet:
Zurück
Oben