Salve, sto cercando di far comunicare il seguente codice python via USB con ARDUINODUE.
In pratica questo codice allegato (prova.py) al click del pulsante invia una strinda di 18 caratteri in formato char. Ciascun elemento dlela lista values può avere un valore massimo di 10000 quindi
essendo rappresentato da un integer viene spezzettato in due byte quindi due caratteri.
Dall'altra parte della USB c'è un ARDUINODUE che deve leggere ricomporre e stampare i valori
a 8bit e convertirli in int per poi stamparli sul monitor seriale dell' IDE di ARDUINODUE.
Sto cercando una lib per arduino che possa unire i due byte per comporre l'integer di partenza.
Allego i due sorgenti.
Potete aiutarmi per favore a trovare tale lib?
Problema a trovare una libreria per leggere int da USB
Moderatore:
Paolino
14 messaggi
• Pagina 1 di 2 • 1, 2
0
voti
- Allegati
-
prova.py.zip- (3.13 KiB) Scaricato 36 volte
-
prova_ser.ino.zip- (596 Byte) Scaricato 36 volte
1
voti
- Codice: Seleziona tutto
import struct
{...}
- Codice: Seleziona tutto
while True:
if ser.in_waiting >= 2:
# Legge 2 byte dalla seriale
raw_bytes = ser.read(2)
# Converte i 2 byte in un intero (little endian)
value = struct.unpack('<H', raw_bytes)[0]
print(f"Valore ricevuto: {value}")
struct.unpack('<H', ...) interpreta quei 2 byte come un intero unsigned short in formato little endian (<H).
Se il tuo dispositivo invia in big endian, usa '>H' invece di '<H'.
-

NoNickName
311 1 2 5 - Stabilizzato

- Messaggi: 333
- Iscritto il: 10 nov 2021, 14:54
-1
voti
alien75 ha scritto:Va bene pure per il C di ARDUINO questo codice ?
Ho provato quest ocodice per ARDUINO ma non funziona.
Ho provato questo codice ma oltre al valore inviato dal python mi da pure altro:
- Codice: Seleziona tutto
define MAX_BUFFER 2
int i = 0;
char b[MAX_BUFFER];
int risultato;
void setup(void)
{
Serial.begin(9600);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("OK!");
}
int convertiByteInInt(byte byte1, byte byte2) {
// byte1 è il byte più significativo (MSB), byte2 è il meno significativo (LSB)
// Sposta il primo byte di 8 posizioni a sinistra per fare spazio al secondo byte
// Esegui un OR bitwise per combinare i due byte
return (byte1 << 8) | byte2;
}
void loop() {
while((Serial.available())>=0)
{
b[i] = Serial.read();
risultato = convertiByteInInt(b[0], b[1]);
i++;
if (i==2)
{
i = 0;
b[0] = '0';
}
// Il risultato sarà 0x1234 in esadecimale, che è 4660 in decimale
/*if(risultato >= 813)
{*/
Serial.print("Il valore intero è: ");
Serial.println(risultato);
//}
}
}
0
voti
Io sto abbandonando Arduino e il C
Ma mi sembra che sul forum di arduino, che un poco frequento ancora, ci fosse tempo fa uno con un problema simile
Magari prova a sentire la
Ma mi sembra che sul forum di arduino, che un poco frequento ancora, ci fosse tempo fa uno con un problema simile
Magari prova a sentire la
-

standardoil
547 2 4 - Stabilizzato

- Messaggi: 420
- Iscritto il: 15 lug 2022, 19:14
0
voti
alien75 ha scritto:Va bene pure per il C di ARDUINO questo codice ?
Ho provato quest ocodice per ARDUINO ma non funziona.
Ma non hai detto python?
-

NoNickName
311 1 2 5 - Stabilizzato

- Messaggi: 333
- Iscritto il: 10 nov 2021, 14:54
2
voti
Non è una bella presentazione, la tua
Ti posso dire solo che difficilmente troverai quello che cerchi
Perché siccome non leggi i manuali non capisci di cosa hai bisogno e cerchi cose sbagliate
Auguri
Ti posso dire solo che difficilmente troverai quello che cerchi
Perché siccome non leggi i manuali non capisci di cosa hai bisogno e cerchi cose sbagliate
Auguri
-

standardoil
547 2 4 - Stabilizzato

- Messaggi: 420
- Iscritto il: 15 lug 2022, 19:14
1
voti
alien75 ha scritto:In pratica questo codice allegato (prova.py) al click del pulsante invia una strinda di 18 caratteri in formato char. Ciascun elemento dlela lista values può avere un valore massimo di 10000 quindi
essendo rappresentato da un integer viene spezzettato in due byte quindi due caratteri.
Diciamo che prima di pensare alla ricezione, bisognerebbe essere sicuri di cosa si sta trasmettendo: esattamente quanti byte, ed esattamente ciascuno cosa rappresenta.
Una domanda ben posta è già mezza risposta.
-1
voti
NoNickName ha scritto:alien75 ha scritto:Va bene pure per il C di ARDUINO questo codice ?
Ho provato quest ocodice per ARDUINO ma non funziona.
Ma non hai detto python?
Leggi bene il problema iniziale prima: c'è un programma in python lato PC che comunica via USB con arduino, nel quale c' è un programma in C che legge i caratteri che gli arrivano dal python
14 messaggi
• Pagina 1 di 2 • 1, 2
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


