Buonasera avevo necessità di fare una semplicissima operazione di far funzionare un analogico ps2 il classico a 5 pin che si trova on line ma essendo veramente un ignorante all'ennesima potenza della materia c'è qualcosa che non va è non mi funziona. L'analogico dopo aver fatto la verifica e il caricamento in Arduino viene perfettamente letto nel monitor seriale ma la nuova periferica creata non viene minimamente letta dal pc scusate la mia ignoranza ma sono bloccato da tutto il giorno per una cosa stupidissima e sto impazzendo c'è qualcuno che può aiutarmi per favore? grazie. La scheda che ho preso è una REV 3 da 16 MHz 2KB adatto per struttura micro atx compatibile IDE
vedete è tutto apposto perchè allora il pc non riconosce la periferica di gioco creata?
Per favore datemi una mano sarà veramente una stupidata per voi ma io sto impazzendo a capir ecos'è che non va. Grazie mille in anticipo
Arduino Uno non è un dispositivo HID! La sua USB è una semplice seriale su USB. Devi usare una scheda con un microcontrollore con USB nativa.
Metti schema dei collegamenti e codice (mi raccomando, come da REGOLAMENTO, racchiuso tra i tag CODE) e spiega esattamente cosa vuoi fare perché io non l'ho capito ...
... in ogni caso, come ti è stato detto, se vuoi che la USB faccia da tastiera o da joystick, devi prendere una scheda con la USB nativa come, ad esempio, Arduino Leonardo.
Guglielmo
Vi ringrazio per le risposte alla fine ieri ho trovato un video su YouTube di uno che l’ho fatto con la stessa scheda arduino che ho io e per riuscire a farlo serve un passaggio in più in python. Il problema è che oltre a python devi aggiungere sempre in Python: pyserial e pydirect input. Quindi mi sono avventurato alle 3 di notte a provarci, ma sono solo impazzito di più perché lì è ancora più complesso e sono dei passaggi che non riesco a fare. Vi passo il video
https://youtu.be/AgHov-F_tKg?si=n8cUda4kSX5f1CRB
Spero di riuscire ad uscirne fuori.
Con una scheda Leonardo non hai bisogno di fare tutti 'sti giri con Python.
Dalle immagini che hai caricato, mi pare che tu abbia proprio quella quindi stai solo perdendo del tempo con questi tutorial.
Invece di una foto dove non si capisce nulla, metti il codice completo che stai usando al momento.
Poi come fa a funzionare il codice nella foto (compilato come si vede per Leonardo) sulla Uno R3? Qualcosa non torna...
Ciao, Ale.
Perché in questo caso ho fatto una prova mettendo Leonardo invece di uno ma attualmente sta su uno. Ma in qualsiasi caso non è arduino software ma la scheda che ho preso che come già mi hanno risposto in precedenza non ha un usb nativo quindi sono costretto ad usare un programmatore open source come python per creare l’ input dell’analogico. Solo che così mi sono infognato ancora di più perché Arduino a confronto è un giocattolo
Ho dato un'occhiata al sorgente ... è un banalissimo programma che legge il joystick su una serie di pin e trasmette "via seriale" i dati ad un programma (python ?) che sta sul PC ... niente HID come si immaginava:
const int JoyStick_pin = 8; //plug Joystick 'Button' into pin 8
const int X_pin = A0; //plug joystick X direction into pin A0
const int Y_pin = A1; //plug joystick Y direction into pin A1
int xc;
int yc;
int JSButton;
void setup() {
for (int i = 0; i < 2; i++) {
pinMode(JoyStick_pin, INPUT);
}
Serial.begin(115200);
}
void loop() {
int x = analogRead(X_pin) - 517; //read x direction value and -517 to bring back to around 0
int y = analogRead(Y_pin) - 512; //read y direction value and -512 to bring back to around 0
if (x <-10) { //joystick has off set of +/-8 so this negates that
xc = 0; //turn analogue value into integer. 0, 1 or 2 depending on state
} else if (x >10) {
xc = 2;
} else {
xc = 1;
}
if (y <-10) {
yc = 0;
} else if (y >10) {
yc = 2;
} else {
yc = 1;
}
int buttonStates = 0; //set starting value of Joystick button
buttonStates |= ((digitalRead(JoyStick_pin) == LOW) ? 1 : 0) << 0;
Serial.print("S"); //start printing the data, format is Sxc,yc,buttonStates > S1,1,0
Serial.print(xc);
Serial.print(",");
Serial.print(yc);
Serial.print(",");
Serial.println((buttonStates));
delay(40);
}
Guglielmo
... ecco il programmino "python" che riceve:
import serial
import pydirectinput
arduino = serial.Serial('COM4', 115200, timeout=.1) #serial input from arduino. change COM port to wherever your arduino is connected
pydirectinput.PAUSE = 0
keysDown = {} #list of currently pressed keys
def keyDown(key): #what to do if key pressed. takes value from handleJoyStickAsArrowKeys
keysDown[key] = True #adds key to KeysDown list
pydirectinput.keyDown(key) #runs pydirectinput using key from (argument)
#print('Down: ', key) #remove '#' from print to test data stream
def keyUp(key): #what to do if key released. takes value from handleJoyStickAsArrowKeys
if key in keysDown:
del (keysDown[key]) #remove key from KeysDown
pydirectinput.keyUp(key) #runs pydirectinput using key from (argument)
#print('Up: ', key) #remove '#' from print to test data stream
def handleJoyStickAsArrowKeys(x, y, z): #note that the x and y directions are swapped due to the way I orient my thumbstick
if x == 0: #0 is up on joystick
keyDown('up') #add up key to keyDown (argument)
keyUp('down') #add down key to keyUp (argument), as you can't press up and down together
elif x == 2: #2 is down on joystick
keyDown('down')
keyUp('up')
else: #1 is neutral on joystick
keyUp('up')
keyUp('down')
if y == 2: #2 is right on joystick
keyDown('right')
keyUp('left')
elif y == 0: #0 is left on joystick
keyDown('left')
keyUp('right')
else: #1 is neutral on joystick
keyUp('left')
keyUp('right')
if z == 1: #z argument is JSButton in this case. 1 is button pressed
keyDown('i') #key to be pressed with Joystick button. Change to any key
else:
keyUp('i') #0 is button not pressed
while True:
rawdata = arduino.readline() #read serial data from arduino one line at a time
data = str(rawdata.decode('utf-8')) #decode the raw byte data into UTF-8
if data.startswith("S"): #make sure the read starts in the correct place
dx = int(data[1]) #X direction is second digit in data (data[0] is 'S')
dy = int(data[3]) #Y direction is fourth digit in data
JSButton = int(data[5]) #JSButton is sixth digit in data
#print(dx, dy, JSButton) #remove '#' from print to test data stream
handleJoyStickAsArrowKeys(dx, dy, JSButton) #run body of code using dx, dy and JSButton as inputs
Guglielmo
Prendi una Leonardo o comunque una scheda con USB nativo cosi da poter definire un dispositivo HID e lascia perdere 'sti video tutorial che lasciano il tempo che trovano.
Non capisco perché uno dovrebbe farsi del male in questo modo solo perché già si trova nel cassetto una Arduino Uno R3...
Ci sono tante opzioni ed anche economiche: una qualsiasi delle schede Arduino basate su ATMega32U4 (Leonardo o Micro), una Arduino uno R4, una ESP32, una RP2040 etc etc
C'è solo l'imbarazzo della scelta di microcontrollori in grado di essere visti come una periferica HID (con l'ESP32 ad esempio potrebbe essere anche Bluetooth).
Concordo al 100%
Sempre detto che il 90% di ciò che si trova in rete, specie su "YouTube" e simili, è solo "monnezza" che confonde le idee invece che insegnare come risolvere i problemi ...
Guglielmo
grazie mille per la pazienza e le risposte. vi mando un paio di link mi potete solo dire quale sarebbe meglio prendere tra queste cosi procedo con l'acquisto e buonanotte i suonatori finisco di tribolare. Grazie mille
https://www.amazon.it/ESP32-WROOM1-scheda-sviluppo-Bluetooth/dp/B0CW648B6Y/ref=sr_1_122_sspa?_mk_it_IT=ÅMÅŽÕÑ&crid=2TSA4MDGCPSU0&dib=eyJ2IjoiMSJ9.-T9Z4_2UUR3iAVM-97fZrLJufFMd0T--9IKqaGudnnGjHj071QN20LucGBJIEps.MJazwCyasap0xoIv6kIC3ehhqQjGxFusdfa4eaklxiU&dib_tag=se&keywords=ATMega32U4&qid=1717248732&s=electronics&sprefix=atmega32u4%2Celectronics%2C128&sr=1-122-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGZfbmV4dA&psc=1
Per quello che devi fare bastano e avanzano.
Tieni conto che il Leonardo è grosso modo equivalente all'Arduino Uno in termini di funzionalità e capacità di calcolo, mentre l'ESP32-S3 è una MCU più "attrezzata" sia come velocità che come periferiche hardware disponibili oltre ad avere WiFi e Bluetooth integrato (che non è poco).
Di contro però può essere più ostica per uno che è alle prime armi.
La scheda che hai selezionato però non credo che usi lo stack USB integrato nel chip perché mi sembra di vedere il classico adattatore USB/TTL e se cosi fosse non va bene per fare un HID USB (potresti farlo solo BT).
Io andrei più su una dev-board con la doppia USB tipo questo prodotto cosi non hai alcun limite.
Grazie mille ancora per la risposta però ti dico la verità la esp32 s3 personalmente la vedo molto più semplice da collegare confronto al prodotto che mi hai mandato perché lo schema dei pin è praticamente uguale all’arduino uno con gli analogici da un lato con i 5V e la terra e dall’altra parte i canali digitali. In più stavo vedendo bene e la porta usb che c’è sopra mi sembra al 99,9% una porta type C se mi dici che è tanta roba e personalmente la vedo anche più semplice come installazione perché più famigliare all’altra che ho preferirei prendere quella. Però ovviamente dovrei solo capire se ha L’usb nativo che scusa per la mia ignoranza non riesco a capire da dove si vede questa cosa
Occhio che del pin 5V non te ne fai nulla perché questa è una MCU che lavora a 3.3V e quindi questa è la tensione di riferimento che devi usare anche con eventuali moduli aggiuntivi (se dovessero servire).
Comunque il chip che si vede nell'immagine che hai allegato è un CH340 quindi ti confermo che con questa scheda non hai accesso alla USB nativa dell'ESP32, o meglio non hai un connettore già predisposto allo scopo anche se potresti aggiungerne uno esterno cablando "manualmente" i segnali USB D+, D-, GND.
Visto che sembri orientato all'acquisto dell'ESP32 ti segnalo la libreria ESP32-BLE-Gamepad che ti semplifica (e di molto) la configurazione del tuo dispositivo come un gamepad HID. Attenzione però che non è ancora compatibile con la versione 3.0.0 del core ESP32 per Arduino che dovrai installare per poter usare quella scheda con Arduino IDE.
Sappi che ti sto amando profondamente veramente mille grazie per il supporto. Questa come la vedi?
Perché per me sarebbe ancora meglio per le dimensioni calcolando che la devo inserire dopo che la faccio finalmente funzionare in uno spazio molto ristretto.
L’unici miei dubbi che mi vengono riguardano i pin sulla scheda che hanno una numerazione diversa. Per quanto riguarda i 5V e la terra non ci sono problemi ma come faccio a capire quali sono quelli analogici e quelli digitali in quanto il totale dei fili saranno solo 5 1 per l’asse X da mettere su analogico 1 per l’asse y sempre su analogico 1 che se non ero si chiama SW che sarebbe il pulsantino sul analogico che è un tasto digitale e gli altri 2 i classici 5V e terra.
Vedi questo è lo schema
La ESP32-C3 ha "solo" 6 canali ADC, anche se quello sul pin GPIO5 è meglio evitarlo perché interferisce con il WiFi (se serve il WiFi ovviamente).
Gli altri canali ADC vanno dal GPIO0 fino al GPIO4.
La MCU è meno "prestante" rispetto alla sorella maggiore S3, ma ampiamente sufficiente per quello che devi fare e molte altre cose in più.
Ne ho giusto un paio nel cassetto, ora provo subito a compilare l'esempio di cui ti ho messo lo screenshot poco fa e se riesco cablo un joystick analogico come quello che hai intenzione di usare che dovrebbe essere tipo questo se non ho capito male.
Esatto è proprio questo paro paro non so se ho capito male ma ci vuoi provare subito per vedere se funziona? Madonna mia ti giuro sei un grande magari ci riesci così mi levi subito sto pensiero ordino e lunedì procedo ad iniziare il mio progetto che riguarda questa tastiera ad una mano. Voglio togliere la croce laterale e metterci un bel analogico