Arduino UNO + Lettore Rfid e lancio (ad esempio) file .EXE su PC

Ciao a tutti, vi spiego subito il progetto dove dovrei iniziare a lavorare. Lo scenario è il seguente:
Un arduino UNO con lettore RFID collegato al PC.
Io passo un tag RFID vicino il lettore e viene lanciata un'applicazione (ad esempio notepad.exe)

Ora, è una cosa fattibile? Premetto che ho già iniziato a vedermi un po di documentazione riguardo lettori e tag rfid, ho visto applicazioni che fanno un check su un determinato tag e magari accendono un LED, ma uno scenario come il mio sarebbe possibile?

Quello che mi preoccupa è il fatto che essendo collegato arduino al pc ed essendo visto come seriale avrei bisogno di un software che monitorizzi quello che avviene sulla porta seriale giusto?

Insomma vorrei capire un po meglio la situazione..

Grazie a tutti in anticipo!!

nn so darti molte informazioni riguardo il lettore ma l'unica cosa da fare è tipo usare il visual basic, arduino invia una stringa sulla seriale tipo notepad e vb avvia l'app

Ciao

Un arduino UNO con lettore RFID collegato al PC.
Io passo un tag RFID vicino il lettore e viene lanciata un'applicazione (ad esempio notepad.exe)

se ti può essere d'aiuto qui abbiamo parlato dell'hw:
http://arduino.cc/forum/index.php/topic,93859.0.html

Riguardo al lancio di applicativi, non la vedo una cosa problematica.
Avrai un tuo sw (Python, Perl, VB, C/C++, etc etc) che sta in ascolto sulla seriale, e quando arriva da Arduino una data stringa lancia un programma.

Riguardo la parte hardware credo di aver capito, per quanto riguarda il software, abbiamo detto che deve stare in ascolto ok, ora immaginate che abbiamo l arduino collegato su un pc server e i tag rfid siano in grado si lanciare software diversi (appunto in base ai tag) a magari 3 pc che sono collegati sulla stessa rete locale! Quindi io passo un tag e mi lancia notepad.exe sul pc1, poi passo un altro tag e mi lancia paint.exe sul pc2 e così via.. Per realizzare una cosa del genere, ci sarebbe cmq da realizzare un soft i ascolto sui pc client esatto?!

Datemi idee!!:))

Grazie millee!!

Ciao

Per realizzare una cosa del genere, ci sarebbe cmq da realizzare un soft i ascolto sui pc client esatto?!

questo è poco ma sicuro.

Hai già provato a fare qualche ricerca in rete?
Hai già scritto qualche riga di codice?

Datemi idee!!:))

questa cos'è? :stuck_out_tongue:

Avrai un tuo sw (Python, Perl, VB, C/C++, etc etc) che sta in ascolto sulla seriale, e quando arriva da Arduino una data stringa lancia un programma.

Allora ho trovato il modo per lanciare programmi da un PC server su PC remoti da me scelti e funziona! Ora, non avendo ancora a disposizione il lettore Rfid volevo provare a fare un mezzo codice che, avendo collegato arduino al PC, tramite la pressione di un tasto, viene lanciato un semplice programma (per ora) sul pc locale!
Quindi io ho arduino con un pulsante e collegato al pc, premo il tasto e mi si apre ad esempio cmd.exe sul pc dove è collegato arduino, quindi serve un programma che stia in ascolto sulla COM, così giusto per iniziare ad orientarmi!
Secondo voi quale sarebbe la soluzione più semplice? Premetto che ho conoscenza del C, ma girando non si trova parecchio riguardo il C, a differenza invece di sistemi basati su processing o java, o addirittura vb! Qualcuno di voi conosce qualche stralcio di codice già pronto magari?

Grazie mille a tutti!

ciao

se guardi il mio sito c'è un tutorial su come gestire la porta seriale in C#... a quel punto da C# puoi invocare il metodo Process.Start("tuoeseguibile");

Per l'esecuzione su un altro pc in rete che soluzione hai trovato? psexec? wmi?

Ok sono sul tuo sito ora controllo...:slight_smile: per quanto riguarda l'esecuzione su PC remoti si, sto provando psexec ora lo testerà per un po di giorni e vedremo! Invece di wmi non è ho sentito parlare.. tu hai avuto modo di provarli entrambi?

sì, psexec è un comando esterno, WMI (Windows Management Interface) invece è una serie di API utilizzabili direttamente dal codice... sicuramente è molto più semplice psexec se non hai esigenze particolari

OK ho capito.. ascolta stavo leggendo la tua guida sul sito (ben fatta :slight_smile: ) volevo sapere una cosa, creando un programma come quello nella guida, è stesso quel programma che legge le info della porta seriale quindi il codice che ho caricato su arduino non andrebbe toccato più di tanto ora.. Mi spiego, io ora su arduino ho un semplice codice che dice che se il tasto viene premuto, accendi il led, se viene premuto di nuovo spegni il led!
Ora, creando un programma come quello del tuo sito, deve essere lui a leggere dalla seriale se quel led è acceso o spento? Cioè, se il led viene acceso, allora aprimi il programma su PC..
Dovrebbe andare così oppure è necessario che il codice che sta su arduino invii delle info particolari per comunicare con il software che gira sul PC? Spero di essermi spiegato! xD

Grazie mille!

non ho tanto capito :astonished:

vedila così: il software non può sapere nulla lato arduino che arduino stesso non gli comunichi...
Se quindi vuoi scatenare diversi eventi (esecuzione di diversi programmi) in base a qualche informazione che ha Arduino (ad es. la pressione di pulsanti o la scansione di un RFID) questa informazione dovrà essere inviata da Arduino al PC dove è in ascolto il tuo programma che - in base a quello che riceve dall'arduino via seriale - eseguirà il suo compito.

lucadentella:
non ho tanto capito :astonished:

vedila così: il software non può sapere nulla lato arduino che arduino stesso non gli comunichi...
Se quindi vuoi scatenare diversi eventi (esecuzione di diversi programmi) in base a qualche informazione che ha Arduino (ad es. la pressione di pulsanti o la scansione di un RFID) questa informazione dovrà essere inviata da Arduino al PC dove è in ascolto il tuo programma che - in base a quello che riceve dall'arduino via seriale - eseguirà il suo compito.

Bene ho capito! Ora, grazie alla tua guida sono riuscita a fare un mezzo tool in c#, allora praticamente se invio i dati dal software in c# e arduino resta in ascolto, gli eventi vengono registrati senza problemi. Es: sul programma ho un pulsante "accendi" che, se premuto, lancia sulla seriale il carattere "A", arduino che sta in ascolto, controlla, appena infatti trova il carattere "A" sulla seriale accende il LED, quindi trova la corrispondenza ad esempio come segue:

if (dato_seriale == 'A') digitalWrite(LED, HIGH);   // accendimi i led

oppure

if (dato_seriale == 'B') digitalWrite(LED, LOW);   // spegnimi il led*/

Dove sto trovando difficoltà invece sta nel contrario, e quindi, premendo il pulsante su arduino, il software deve stare in ascolto e, nel caso ci sia corrispondenza, fare un'azione.
Il lato arduino è così:

.. se viene premuto il pulsante..
accendimi il led;
Serial.write("A");
    Serial.flush() ;

nel lato del programma invece non so come muovermi xD.

Per ora per vedere se funzionava avevo lasciato lo stesso tasto che, premuto, mi legge da seriale.. es:

void Button1Click(object sender, EventArgs e)
		{
			button2.Enabled = false;
	byte[] byte_buffer = new byte[17];

   
           
          

            serialPort1.Read(byte_buffer, 0, 17);
   
             string Text = System.Text.UTF8Encoding.UTF8.GetString(byte_buffer);
           MessageBox.Show(Text);

		}

ma purtroppo non va.. nel messagebox non esce nulla..:confused:

Qualche consiglio?

Grazie mille a tutti!!

Molto più facile, puoi usare serialPort.Readline() in c# e lato arduino inviare una riga con Serial.println("A"):

in questo modo il metodo ti restituisce già una stringa... prova prima con una applicazione console (testuale) che è più facile da gestire evitando threads etc...

lucadentella:
Molto più facile, puoi usare serialPort.Readline() in c# e lato arduino inviare una riga con Serial.println("A"):
SerialPort.ReadLine Metodo (System.IO.Ports) | Microsoft Learn

in questo modo il metodo ti restituisce già una stringa... prova prima con una applicazione console (testuale) che è più facile da gestire evitando threads etc...

Ah ecco perfetto. Ho fatto qualche progresso. Ora riesco effettivamente a mandare una stringa da arduino e tramite pulsante software leggerla. Solo che, vorrei avere una cosa del genere:

void Button1Click(object sender, EventArgs e)
		{
			
		string acceso = "A";
		
		string letto = serialPort1.ReadLine();
		
		if (letto == acceso)
		{
			MessageBox.Show("Il led è acceso.");
		}
		...		
		}

Praticamente una sorta di pulsante es: "check" che mi controlla lo stato del led in quel momento. Il led quando è acceso manda su seriale "A", quando è spento "B". Ora però mettendo la condizione come riportato sopra, non succede nulla! E' come se appunto le due stringe, (letto e acceso) non fossero uguali! Il problema penso sia nell'invio da parte di arduino poichè, mettendo il messagebox in un altro punto del codice (quindi senza condizioni) quello che mi stampa è una cosa del genere:

A
A
A
A
A
A
..

cioè è come se arduino mandi la stringa "A" di continuo e non, come vorrei io, una sola volta appena acceso il led?
Come potrei risolvere?
Grazie!!

in C# non puoi confrontare le stringhe con "==", devi usare il metodo Equals:

lucadentella:
in C# non puoi confrontare le stringhe con "==", devi usare il metodo Equals:

ok appena rientro provo quindi con Equals a confrontare le due stringhe.. In questo modo quindi lato arduino non dovrei cambiare niente? Cioè il Serial.println("A") è correto così com'è?!

Ciao scusate se mi intrometto, io per fare questo di solito uso autoit un linguaggio di script per windows, puoi inviare e ricevere dati da seriale..e creare gui,magari per chi non mastica il c# puo essere un pò più facile.. se vuoi dare un occhio sul mio blog http://digitalwrite.net/ c'è un tutorial che potrebbe fare al caso tuo..ciao