Dare un comando al pc da arduino

Beh, dalla parte Arduino è molto facile, apri una comunicazione seriale verso il pc e invii dei dati al momento della pressione di un tasto.
Sul PC dovrà essere in ascolto sulla stessa seriale un programma che al ricevimento del dato eseguirà il suono corrispondente.
Ora, hai qualche esperienza di programmazione per PC?

00cicciuzzo00:
Ciao a tutti

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Ringrazio tutti per la risposta,come livello di programmazione è da poco piu di un anno che programmo con arduino ma non sono un esperto.Mi avete parlato di un programma per pc che deve essere in ascolto della seriale di arduino e che riproduce le note alla pressione del tasto.Mi potete spiegare meglio?GRAZIE.

Non saprei come essere più chiaro. Dovresti almeno avere un po' di esperienza in sviluppo per... windows? (immagino). Dalla mia esperienza posso dirti che un linguaggio adatto per lo sviluppo del programma lato PC potrebbe essere Java (un linguaggio estremamente semplice, che garantisce per di piu il cross-platform).
Processing sarebbe la scelta piu semplice, ma non conosco le sue potenzialità a pieno, ma credo che la gestione della riproduzione di suoni sia possibile senza troppi sforzi.
Con C/C++ la storia si complica un po', in quanto non vi sono framework potenti alle spalle di default, va tutto creato da 0, ma sicuramente si troveranno delle librerie sia per la seriale che per la riproduzione dei suoni.
Scegli la tua strada e sperimenta.

Grazie per la risposta.Comunque credo che per me sia un po troppo difficile programmare windows per fare il mio progetto credo che per me l'unica soluzione sarebbe quella di prendere uno shield aggiuntivo per arduino come LPM11162.

Volevo chiedervi anche una curiosità.Girando su internet ho visto gente che riuscivano a fare questo Arduino and Capacitance: Controlling sound with a pencil! - YouTube
Ora io so come fare un capacitive sensor e come far suonare il buzzer al tocco ma non capisco come faccia a funzionare con carta e matita dato che non sono materiali conduttivi come alluminio o altro.
Come fanno?

00cicciuzzo00:
non capisco come faccia a funzionare con carta e matita dato che non sono materiali conduttivi come alluminio o altro.

Ah no?!
Grafite

io ci ho provato ma non funziona.Uso una resistenza da 10 kohm

Cicciuzzo in pratica vuoi che schiacciato un bottone, oppure letto un valore X o altro, l'arduino mando in comando a windows e windows esegua un suono?

Si è proprio quello che voglio fare.Mi puoi spiegare come posso fare?

Normalmente lo si fa con la comunicazione su seriale. Arduino Uno lo colleghi tramite USB quindi anche la comunicazione seriale è già fatta.
Lato PC devi sviluppare un programma che legga da seriale comandi inviati da Arduino.
Alcuni usano Processing, un IDE/linguaggio per PC da cui è in parte derivato l'IDE di Arduino.
Devi installare Processing su PC e poi cercare esempi per Processing che comunica con Arduino. Dovrai stabilire dei "comandi" ovvero delle frasi da spedire da Arduino a PC/Processing in ascolto sulla seriale. Esempi da Arduino Serial.println("PLAY01"); oppure Serial.println("STOP");

https://learn.sparkfun.com/tutorials/connecting-arduino-to-processing

Poi come suonare da Processing non sò, ma non penso sia difficile.
P.S. occhio alle versioni di Processing. Di solito si usa la 2.x perchè la 3.x è in beta.

comunque basta un qualsiasi programma scritto con qualsiasi linguaggio (C, c++, java) includendo la libreria pr la gestione della seriale e fatto girare in background

Finalmente capisco qualcosa di più. Allora poveró a fare un programma per far suonare note quando viene mandata sul seriale una parola.Grazie milleee

come già detto, puoi farlo con processing con un c-like e poi lo compili come .exe

Si fà come ti ha detto nid69ita, io l'ho fatto creando un prog C# in ascolto sulla seriale dove è collegato l'arduino

Ti consiglio Visual Basic, dato che non hai esperienza nel programmare il PC, lo puoi scaricare da qui. Poi una volta installato Visual Basic apri il suo IDE, lo trovi nel Menu Start -> Tutti i Programmi -> Microsoft Visual Studio 2010 Express.
Clicca su crea un nuovo progetto e seleziona Applicazione Console e sostituisci tutto con questo codice:

Imports System.IO.Ports ' Importa la libreria di gestione delle porte

Module Module1 'Primo Modulo

    Dim Serial As New SerialPort ' Creo una porta seriale
    Dim PortName As String = "COM3" ' Creo una variabile stringa che contiene la porta seriale

    Sub Main() ' Funzione Main
        'Inizializzo la porta seriale
        Serial.PortName = PortName ' La porta seriale di Arduino è uguale alla variabile PortName
        If Serial.IsOpen Then ' Se la porta seriale di Arduino è in uso
            Serial.Close() ' Chiudi la porta seriale
        End If
        Serial.Open() ' Apro la porta seriale

        While True ' Creo un loop infinito (come la funzione loop() di Arduino)
            Dim x As String = Serial.ReadLine() ' Creo una variabile stringa x che contiene il valore letto dalla seriale

            If x = "a" Then ' Se la variabile 'x' è uguale a "a"
                My.Computer.Audio.Play("percorso_e_nome_file.wav", AudioPlayMode.Background) ' Avvio un audio
            ElseIf x = "b" Then ' Altrimenti Se la variabile 'x' è uguale a "b"
                My.Computer.Audio.Stop() ' Interrompo la riproduzione della audio
            End If

        End While

    End Sub

End Module

I commenti in Visual Basic sono preceduti con un ' (come il // del C o di Arduino). Poi su Arduino carica questo codice:

int btnPlay = 8; // Creo una variabile che specifica dove è collocato il bottone Play, per esempio il pin 8
int btnStop = 7; // Creo una variabile che specifica dove è collocato il bottone Stop, per esempio il pin 7

void setup()
{
    Serial.begin(9600); // Inizializzo la seriale
    // Inizializzo i bottoni
    pinMode(btnPlay, INPUT); 
    pinMode(btnStop, INPUT);
}

void loop()
{
    int statePlay = digitalRead(btnPlay); // Stato del bottone Play
    int stateStop = digitalRead(btnStop); // Stato del bottone Stop
    
    if (statePlay == HIGH) // Se Play è stato Premuto
    {
        Serial.print("a"); // Invia al PC il carattere "a"
    }
    if (stateStop == HIGH) // Se Stop è stato Premuto
    {
        Serial.print("b"); // Invia al PC il carattere "b"
    }
}

Ovviamente poi modifica lo sketch di Arduino o il programma Visual Basic a tuo piacimento, ricordati però che il tuo file musicale deve essere un file ".wav" perciò se hai un file con un altra estensione ("mp3", "ogg", ecc...) ricordati di convertirlo con un tool adatto (per esempio il sito media.io)

Quel codice è esageratamente minimale, non può andare per un programma Windows.

RobertoBochet:
Non saprei come essere più chiaro. Dovresti almeno avere un po' di esperienza in sviluppo per... windows? (immagino). Dalla mia esperienza posso dirti che un linguaggio adatto per lo sviluppo del programma lato PC potrebbe essere Java (un linguaggio estremamente semplice, che garantisce per di piu il cross-platform).
Processing sarebbe la scelta piu semplice, ma non conosco le sue potenzialità a pieno, ma credo che la gestione della riproduzione di suoni sia possibile senza troppi sforzi.
Con C/C++ la storia si complica un po', in quanto non vi sono framework potenti alle spalle di default, va tutto creato da 0, ma sicuramente si troveranno delle librerie sia per la seriale che per la riproduzione dei suoni.
Scegli la tua strada e sperimenta.

Scusate l' ot.
Vorrei capire perché consigli java ad uno che "programma arduino da un anno".
Io che di programmazione ci capisco poco (autodidatta) passare da c# a java a quello che è mi causa un sacco di mal di testa :slight_smile:

Immagino che programmi arduino in c#, e visto che ormai un po lo mastica perché allora non fare un banale windows form in visual studio?

Lungi da me fare polemiche, sia chiaro, semplice curiosità da ignorante :slight_smile:

Dato che ha Windows e non ha alcuna esperienza di programmazione lato PC volevo consigliarti il Visual Basic per questi motivi:

  • Innanzitutto ha una sintassi semplice
  • Per la documentazione c'è MSDN, lì ci si trova tutto. Poi ci sono anche i tutorial
  • Ci metti due settimane per impararlo (E' anche stato il mio primo linguaggio!)

Quindi può anche usare quel codice. Chissà magari studiandosi un pò il linguaggio potrebbe creare un app Grafica (in Visual Basic Windows Form), sostanzialmente è lo stesso

m265:
Scusate l' ot.
Vorrei capire perché consigli java ad uno che "programma arduino da un anno".
Io che di programmazione ci capisco poco (autodidatta) passare da c# a java a quello che è mi causa un sacco di mal di testa :slight_smile:

Immagino che programmi arduino in c#, e visto che ormai un po lo mastica perché allora non fare un banale windows form in visual studio?

Lungi da me fare polemiche, sia chiaro, semplice curiosità da ignorante :slight_smile:

Semplicemente perché tra i linguaggi di alto livello è uno dei più semplici.
Il passaggio da un linguaggio ad un altro con l'esperienza diventa solo imparare un nuovo formalismo, in particolare il passaggio C# Java dovrebbe risultare molto semplice. Anche per questo un buon percorso di studi dovrebbe prevedere il primo approccio su un linguaggio di basso livello come il C, e poi solo in un secondo momento si inserisco elementi di programmazione ad alto livello.
Gli sketch di Arduino si scrivono in Wiring una variante del C ben lontano dal C#, linguaggio completamente OOP.
Quello che serve a lui è un processo in background non un windows form.
C# e VB.NET possono essere delle valide alternative, in questo caso.
Vorrei sottolineare ancora una volta come sia sbagliato questo approccio al problema. Prima si studia poi si sviluppa.