Hallo zusammen,
ich hab folgendes vor..
Ich würde gerne eine Seitenkonsole für Simulatoren bauen.
Soweit hab ich es hinbekommen, dass es soweit funktioniert auf dem Breadboard. Jetzt würde ich aber gerne von euch wissen, ob ich irgendwas noch absichern sollte in form von Kondensatoren widerstände etc..
Ich würde nämlich gerne eine Platine bestellen.
bis jetzt funktioniert der code und die Hardware zusammen.
Ich nutze ein Micro Pro.
hoffe habe soweit alles erklärt, damit es verständlich ist.
verwendet werden 10 k widerstände und 100nf Kondensatoren im Bild
hier der code:
#include <Joystick.h>
#include <SPI.h>
// Pinbelegung für den 74HC165
const int loadPin = 3; // SH/LD Pin am 74HC165
const int clockPin = 9; // CLK Pin am 74HC165
const int dataPin = 8; // Q7 Pin am 74HC165
// SPI Pins für MCP3208
const int mcpCS = 10; // Chip Select für MCP3208
// Anzahl der Taster und Achsen
const int numButtons = 16; // Erweitert auf 16 Buttons
const int numAxes = 3; // Für X-, Y- und Z-Achse des Joysticks
// Joystick-Bibliothek initialisieren
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
JOYSTICK_TYPE_GAMEPAD, numButtons, numAxes,
true, true, true, false, false, false,
false, false, false, false, false);
// Letzte Tasterzustände speichern
bool lastButtonStates[numButtons] = {0};
void setup() {
// Pins für 74HC165 konfigurieren
pinMode(loadPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
// Anfangszustand der Steuerpins setzen
digitalWrite(loadPin, HIGH);
digitalWrite(clockPin, LOW);
// SPI initialisieren
pinMode(mcpCS, OUTPUT);
digitalWrite(mcpCS, HIGH); // CS deaktiviert
SPI.begin();
// Joystick starten
Joystick.begin();
// Serielle Kommunikation starten
Serial.begin(9600);
Serial.println("Joystick gestartet!");
}
void loop() {
// *** Taster einlesen ***
// Daten aus dem Schieberegister laden
digitalWrite(loadPin, LOW); // Parallel Load aktivieren
delayMicroseconds(5); // Kurze Verzögerung
digitalWrite(loadPin, HIGH); // Parallel Load deaktivieren
// Tasterzustände einlesen
int buttonStates[numButtons];
for (int i = 0; i < numButtons; i++) {
buttonStates[i] = digitalRead(dataPin); // Zustand des aktuellen Pins einlesen
digitalWrite(clockPin, HIGH); // Nächsten Wert verschieben
delayMicroseconds(5); // Kurze Verzögerung
digitalWrite(clockPin, LOW);
// Für den zweiten 74HC165 weiterzählen
if (i == 7) { // Wenn der erste 74HC165 durch ist
delayMicroseconds(5); // Kleine Verzögerung vor Wechsel
}
}
// Joystick-Buttons setzen
for (int i = 0; i < numButtons; i++) {
// Tasterzustand überprüfen
if (buttonStates[i] == LOW && lastButtonStates[i] == HIGH) {
Joystick.setButton(i, 1); // Taster wurde gedrückt
} else if (buttonStates[i] == HIGH && lastButtonStates[i] == LOW) {
Joystick.setButton(i, 0); // Taster wurde losgelassen
}
// Letzten Zustand speichern
lastButtonStates[i] = buttonStates[i];
}
// *** Achsen einlesen (MCP3208) ***
int xValue = readMCP3208(0); // Kanal 0 (X-Achse)
int yValue = readMCP3208(1); // Kanal 1 (Y-Achse)
int zValue = readMCP3208(2); // Kanal 2 (Z-Achse)
// Werte normalisieren (0–4095 auf 0–1023)
xValue = map(xValue, 0, 4095, 0, 1023);
yValue = map(yValue, 0, 4095, 0, 1023);
zValue = map(zValue, 0, 4095, 0, 1023);
// Joystick-Achsen setzen
Joystick.setXAxis(xValue);
Joystick.setYAxis(yValue);
Joystick.setZAxis(zValue);
// Debugging im seriellen Monitor
Serial.print("X: ");
Serial.print(xValue);
Serial.print(" Y: ");
Serial.print(yValue);
Serial.print(" Z: ");
Serial.println(zValue);
delay(100);
}
// Funktion zum Auslesen des MCP3208
int readMCP3208(int channel) {
digitalWrite(mcpCS, LOW); // CS aktivieren
// SPI-Befehl senden: Start, Modus und Kanal
byte command = 0b00000110 | ((channel & 0x04) >> 2);
SPI.transfer(command);
byte highByte = SPI.transfer((channel & 0x03) << 6);
byte lowByte = SPI.transfer(0x00);
digitalWrite(mcpCS, HIGH); // CS deaktivieren
// 12-Bit-Wert zusammenfügen
return ((highByte & 0x0F) << 8) | lowByte;
}
achja.. wenn das alles soweit funktioniert, würde ich gerne eine Platine mit Micro Pro und 2 x MCP3208 verwenden. auf einer zweiten Platine würde ich gerne 4 x 74hc165n verbauen.
der plan ist dann ganz viele taster zu verbauen, zwei joysticks und schiebepotis... damit das ganze dann so ähnlich wie diese teile aussehen.
Seitenkonsole
dankeschön für die Hilfe