Encoder an Arduino programmieren

Hallo zusammen!

Ich bastel mir gerade mit meine Raspberry Pi und einem Arduino ein Webradio nach der Anleitung...

Der Verfasser hat den Code für den Encoder auch online gestellt, jedoch bekomme ich beim verifizieren immer wieder die Meldung, dass die Bibliothek "keyboard.h" fehlen würde.....

Der Code ist Folgender:

#include <Keyboard.h>
#include <ClickEncoder.h>
#include <TimerOne.h>
ClickEncoder *encoder01;
ClickEncoder *encoder02;
int16_t last01, value01;
int16_t last02, value02;
void timerIsr01()
{
encoder01->service();
encoder02->service();
}
void setup()
{
Serial.begin(9600);
encoder01 = new ClickEncoder(A1, A0, A2, 4); // Encoder Pin an A0 und A1, Button Pin an A2; Restlichen Pins direkt an GND ### 4 = stepsPerNotch
encoder02 = new ClickEncoder(A4, A3, A5, 4); // Encoder Pin an A3 und A4, Button Pin an A5; Restlichen Pins direkt an GND ### 4 = stepsPerNotch
Timer1.initialize(1000);
Timer1.attachInterrupt(timerIsr01);
last01 = -1;
last02 = -1;
}
void loop() {
        value01 += encoder01->getValue();
        if (value01 != last01) {
                if (value01 < last01) {
                  Keyboard.press(KEY_UP_ARROW);
                  delay(100);
                  Keyboard.releaseAll();
                }
                if (value01 > last01) {
                  Keyboard.press(KEY_DOWN_ARROW);
                  delay(100);
                  Keyboard.releaseAll(); 
                }
                last01 = value01;
        }
        ClickEncoder::Button b = encoder01->getButton();
        if (b != ClickEncoder::Open) {
                switch (b) {
                case ClickEncoder::Pressed:
                        Serial.print("01: Pressed \n");
                        break;
                case ClickEncoder::Held:
                        Serial.print("01: Held \n");
                        break;
                case ClickEncoder::Released:
                        Serial.print("01: Released \n");
                        break;
                case ClickEncoder::Clicked:
                         Keyboard.press(KEY_RETURN);
                         delay(100);
                         Keyboard.releaseAll();
                        break;
                case ClickEncoder::DoubleClicked:
                         Keyboard.press(KEY_BACKSPACE);
                         delay(100);
                         Keyboard.releaseAll();
                        break;
                }
        }
        // E N C O D E R 2
        value02 += encoder02->getValue();
        if (value02 != last02) {
                if (value02 < last02) {
                        Keyboard.press(KEY_F9);  // Lautstaerke - (Keyboard.xml anpassen)
                        //delay(100);
                        Keyboard.releaseAll();
                }
                if (value02 > last02) {
                        Keyboard.press(KEY_F10);  // Lautstaerke + (Keyboard.xml anpassen)
                        //delay(100);
                        Keyboard.releaseAll();
                }
                last02 = value02;
        }
        ClickEncoder::Button c = encoder02->getButton();
        if (c != ClickEncoder::Open) {
                switch (c) {
                case ClickEncoder::Pressed:
                        Serial.print("02: Pressed \n");
                        break;
                case ClickEncoder::Held:
                        Serial.print("02: Held \n");
                        break;
                case ClickEncoder::Released:
                        Serial.print("02: Released \n");
                        break;
                case ClickEncoder::Clicked:
                        Keyboard.press(120); // Taste x - Kodi: Stop
                        delay(100);
                        Keyboard.releaseAll();
                        break;
                case ClickEncoder::DoubleClicked:
                        Serial.print("02: DoubleClicked \n");
                        break;
                }
        }
}
//. . -32-
//.!. -33-
//.Ä. -34-
//.§. -35-
//.$. -36-
//.%. -37-
//./. -38-
//.ä. -39-
//.). -40-
//.=. -41-
//.(. -42-
//.`. -43-
//.,. -44-
//.ß. -45-
//... -46-
//.-. -47-
//.0. -48-
//.1. -49-
//.2. -50-
//.3. -51-
//.4. -52-
//.5. -53-
//.6. -54-
//.7. -55-
//.8. -56-
//.9. -57-
//.Ö. -58-
//.ö. -59-
//.;. -60-
//.´. -61-
//.:. -62-
//._. -63-
//.". -64-
//.A. -65-
//.B. -66-
//.C. -67-
//.D. -68-
//.E. -69-
//.F. -70-
//.G. -71-
//.H. -72-
//.I. -73-
//.J. -74-
//.K. -75-
//.L. -76-
//.M. -77-
//.N. -78-
//.O. -79-
//.P. -80-
//.Q. -81-
//.R. -82-
//.S. -83-
//.T. -84-
//.U. -85-
//.V. -86-
//.W. -87-
//.X. -88-
//.Z. -89-
//.Y. -90-
//.ü. -91-
//.#. -92-
//.+. -93-
//.&. -94-
//.?. -95-
//.^. -96-
//.a. -97-
//.b. -98-
//.c. -99-
//.d. -100-
//.e. -101-
//.f. -102-
//.g. -103-
//.h. -104-
//.i. -105-
//.j. -106-
//.k. -107-
//.l. -108-
//.m. -109-
//.n. -110-
//.o. -111-
//.p. -112-
//.q. -113-
//.r. -114-
//.s. -115-
//.t. -116-
//.u. -117-
//.v. -118-
//.w. -119-
//.x. -120-
//.z. -121-
//.y. -122-
//.Ü. -123-
//.'. -124-
//.*. -125-
//.°. -126-
//.a. -140-
//.b. -141-
//.c. -142-
//.d. -143-
//.e. -144-
//.f. -145-
//.g. -146-
//.h. -147-
//.i. -148-
//.j. -149-
//.k. -150-
//.l. -151-
//.m. -152-
//.n. -153-
//.o. -154-
//.p. -155-
//.q. -156-
//.r. -157-
//.s. -158-
//.t. -159-
//.u. -160-
//.v. -161-
//.w. -162-
//.x. -163-
//.z. -164-
//.y. -165-
//.1. -166-
//.2. -167-
//.3. -168-
//.4. -169-
//.5. -170-
//.6. -171-
//.7. -172-
//.8. -173-
//.9. -174-
//.0. -175-
//. . -180-
//.ß. -181-
//.´. -182-
//.ü. -183-
//.+. -184-
//.#. -185-
//.#. -186-
//.ö. -187-
//.ä. -188-
//.^. -189-
//.,. -190-
//... -191-
//.-. -192-

Ich hoffe, ihr könnt mir sagen, was ich da noch zu tun habe?

Viele Dank und viele Grüße,

Maze-M

Einen Micro, Leonardo oder Due benutzen (oder eine andere Variante die ein USB HID Device darstellen kann).

Ach sorry, das hätte ich natürlich dazu schreiben sollen....

Ich benutze einen Leonardo. Also von daher sollte es damit eigentlich funktionieren... Ich habe mit zudem auch gefragt, ob der denn direkt vom Raspberry Pi erkannt wird? Der Pi müsste dann doch auch Treiber für den Arduino mitbringen, oder?

Nur den für die HID.

Könnte sein dass du die Keyboard Funktionen einfach ohne Keyboard.h nutzen kannst,
kommentiere das include doch einfach mal aus.

Hab die Keyboard Funktionen erstmal herausgenommen, allerdings bekommen ich nun Meldungen, dass es Probleme mit meiner ClickEncoder.cpp gibt:

encoder-arduino\ClickEncoder.cpp.o: In function `ClickEncoder::ClickEncoder(unsigned char, unsigned char, unsigned char, unsigned char, bool)':
C:\Users\matze\Documents\Arduino\libraries\encoder-arduino/ClickEncoder.cpp:46: multiple definition of `ClickEncoder::ClickEncoder(unsigned char, unsigned char, unsigned char, unsigned char, bool)'
ClickEncoder.cpp.o:C:\Users\matze\AppData\Local\Temp\build5360254904138240396.tmp/ClickEncoder.cpp:46: first defined here
encoder-arduino\ClickEncoder.cpp.o: In function `ClickEncoder::ClickEncoder(unsigned char, unsigned char, unsigned char, unsigned char, bool)':
C:\Users\matze\Documents\Arduino\libraries\encoder-arduino/ClickEncoder.cpp:46: multiple definition of `ClickEncoder::ClickEncoder(unsigned char, unsigned char, unsigned char, unsigned char, bool)'
ClickEncoder.cpp.o:C:\Users\matze\AppData\Local\Temp\build5360254904138240396.tmp/ClickEncoder.cpp:46: first defined here
encoder-arduino\ClickEncoder.cpp.o: In function `ClickEncoder::ClickEncoder(unsigned char, unsigned char, unsigned char, unsigned char, bool)':
C:\Users\matze\Documents\Arduino\libraries\encoder-arduino/ClickEncoder.cpp:46: multiple definition of `ClickEncoder::service()'
ClickEncoder.cpp.o:C:\Users\matze\AppData\Local\Temp\build5360254904138240396.tmp/ClickEncoder.cpp:46: first defined here
encoder-arduino\ClickEncoder.cpp.o: In function `ClickEncoder::ClickEncoder(unsigned char, unsigned char, unsigned char, unsigned char, bool)':
C:\Users\matze\Documents\Arduino\libraries\encoder-arduino/ClickEncoder.cpp:46: multiple definition of `ClickEncoder::getValue()'
ClickEncoder.cpp.o:C:\Users\matze\AppData\Local\Temp\build5360254904138240396.tmp/ClickEncoder.cpp:46: first defined here
encoder-arduino\ClickEncoder.cpp.o: In function `ClickEncoder::ClickEncoder(unsigned char, unsigned char, unsigned char, unsigned char, bool)':
C:\Users\matze\Documents\Arduino\libraries\encoder-arduino/ClickEncoder.cpp:46: multiple definition of `ClickEncoder::getButton()'
ClickEncoder.cpp.o:C:\Users\matze\AppData\Local\Temp\build5360254904138240396.tmp/ClickEncoder.cpp:46: first defined here
collect2.exe: error: ld returned 1 exit status
Fehler beim Kompilieren.

Muss da im Quellcode noch was geändert werden?

Könnte es sein dass du die cpp Datei noch zusätzlich in einem Tab hast?

Und schön dass der Author den Kode online gestellt hat.

Den hier zu veröffentlichen (oder zumindestens zu verlinken) wäre sinnvoll.