Pages: [1] 2   Go Down
Author Topic: Arduino UNO + Lettore Rfid e lancio (ad esempio) file .EXE su PC  (Read 1482 times)
0 Members and 1 Guest are viewing this topic.
Montalbano Jonico
Offline Offline
Sr. Member
****
Karma: 1
Posts: 284
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!
Logged

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


0
Offline Offline
Edison Member
*
Karma: 20
Posts: 2231
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao

Quote
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.
Logged

Montalbano Jonico
Offline Offline
Sr. Member
****
Karma: 1
Posts: 284
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!
Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 2231
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao

Quote
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?

Quote
Datemi idee!!:))

questa cos'è?  smiley-razz

Quote
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.
Logged

Montalbano Jonico
Offline Offline
Sr. Member
****
Karma: 1
Posts: 284
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

lucadentella.it

Montalbano Jonico
Offline Offline
Sr. Member
****
Karma: 1
Posts: 284
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok sono sul tuo sito ora controllo...smiley 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?
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

lucadentella.it

Montalbano Jonico
Offline Offline
Sr. Member
****
Karma: 1
Posts: 284
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

OK ho capito.. ascolta stavo leggendo la tua guida sul sito (ben fatta smiley ) 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!
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

non ho tanto capito  smiley-eek

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.
Logged

lucadentella.it

Montalbano Jonico
Offline Offline
Sr. Member
****
Karma: 1
Posts: 284
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non ho tanto capito  smiley-eek

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:
Code:
if (dato_seriale == 'A') digitalWrite(LED, HIGH);   // accendimi i led   
oppure
Code:
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ì:
Code:
.. 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:
Code:
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..:/

Qualche consiglio?

Grazie mille a tutti!!
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Molto più facile, puoi usare serialPort.Readline() in c# e lato arduino inviare una riga con Serial.println("A"):
http://msdn.microsoft.com/it-it/library/system.io.ports.serialport.readline.aspx

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...
Logged

lucadentella.it

Montalbano Jonico
Offline Offline
Sr. Member
****
Karma: 1
Posts: 284
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Molto più facile, puoi usare serialPort.Readline() in c# e lato arduino inviare una riga con Serial.println("A"):
http://msdn.microsoft.com/it-it/library/system.io.ports.serialport.readline.aspx

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:
Code:
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:
Code:
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!!
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

in C# non puoi confrontare le stringhe con "==", devi usare il metodo Equals:
http://msdn.microsoft.com/en-us/library/cc165449.aspx
Logged

lucadentella.it

Pages: [1] 2   Go Up
Jump to: