procramma in C mac/linux per il controllo di arduino...

salve a tutti!!!! allora sono nuovissimo, e mi sto affaciando a questo mondo...sono bravetto in elettronica, ma la programmazione...è la cosa che più mi piace, e che meno capisco...cmq pian piano dovrei farcela... qui ora vi chiedo però il vostro aiuto se no passa un secolo prima che ce la faccia! :slight_smile: vorrei praticamente realizzare un serial monitor esterno al programma di Arduino, che mi permetta di scegliere i baud, e che abbia 8 pulsanti da premere con su ognuno una lettera scritta (A,C,E,....ecc) e 8 su altri 8 (B,D,F,...ecc) sotto o in fianco, e che mi inviino alla porta usb il valore (A,B,C,D,...ecc) in base al tasto premuto.
Questo mi serve perché ho costruito una casetta in compensato, con un led per stanza, e con A, si accende il primo led, con B si spegne, C si accende il secondo, D si spegne il secondo,....ecc e dovrei portarlo a luglio come progetto d'esame, siccome ora devo dedicarmi ad interfacciarlo con PHP, senza ethernet e senza wi-fi, non riuscirei a fare il programma (che poi il C già mi crea problemi a livello di Arduino...figurarci con la libreria standard...!)...se qualche buon anima riesce a darmi una mano...o a trovare qualche pappa pronta...magari commentata meglio così la capisco...!!!! grazie a tutti!

se ho capito quindi tu hai gia' fatto la casetta con i led, e sono funzionanti, pero' per ora li gestischi dal serial monitor dell'ide1.0 di arduino ?

ora quindi vorresti fare un Terminale per arduino, in modo da non doverlo tenere connesso al PC giusto ?

Io vedo 3 strade:
Difficile: fai un terminale che si connette direttamente alla usb di arduino
Media: fai un terminale seriale, quindi che non si connette alla porta usb di arduino ma che si connette ai pin 0-1 di arduino
facile: Niente terminale, nel senso letterale del termine, ma una tastiera connessa ai pin digitali di arduino

perche' vuoi fare un terminale ? fa parte della tesi ?

allora, io arduino lo terro collegato al pc, a me serve "una copia" del monitor seriale dell'ide ma non con una riga dove si immettono i valori "A","B",... ma con direttamente a video i pulsanti "A", "B",... in modo tale, che se io ci clicc o sopra, il valore "A" mi viene inviato come fa il monitor seriale ad arduino... penso che comandi arduino...e che poi comandi lui i pin d'uscita in quanto il programma che ho scritto per arduino è questo:

int Led1=13;
int Led2=12;
int Led3=11;
int Led4=10;
int Led5=9;
int Led6=8;
int Led7=7;
int Led8=6;
int Led9=5;
int incomingByte;  

void setup() {
  pinMode(Led1, OUTPUT);
  pinMode(Led2, OUTPUT);
  pinMode(Led3, OUTPUT);
  pinMode(Led4, OUTPUT);
  pinMode(Led5, OUTPUT);
  pinMode(Led6, OUTPUT);
  pinMode(Led7, OUTPUT);
  pinMode(Led8, OUTPUT);
  pinMode(Led9, OUTPUT);
  Serial.begin(115200);
}

void loop() {
    if (Serial.available() > 0) {
        incomingByte = Serial.read();
        
    if (incomingByte == 'A') {
        digitalWrite(Led1, HIGH);
    }

    if (incomingByte == 'B') {
        digitalWrite(Led1, LOW);
    }


    if (incomingByte == 'C') {
        digitalWrite(Led2, HIGH);
    }
    
    if (incomingByte == 'D') {
        digitalWrite(Led2, LOW);
    }
    
    if (incomingByte == 'E') {
        digitalWrite(Led3, HIGH);  
    }
    
    if (incomingByte == 'F') {
        digitalWrite(Led3, LOW);
    }
    
    if (incomingByte == 'G') {
        digitalWrite(Led4, HIGH);  
    }
    
    if (incomingByte == 'H') {
        digitalWrite(Led4, LOW);
    }
    
    if (incomingByte == 'I') {
        digitalWrite(Led5, HIGH);   
    }
    
    if (incomingByte == 'L') {
        digitalWrite(Led5, LOW);
    }
    
    if (incomingByte == 'M') {
        digitalWrite(Led6, HIGH);   
    }
    
    if (incomingByte == 'N') {
        digitalWrite(Led6, LOW);
    }
    
    if (incomingByte == 'O') {
        digitalWrite(Led7, HIGH);    
    }
    
    if (incomingByte == 'P') {
        digitalWrite(Led7, LOW);
    }
    
    if (incomingByte == 'Q') {
        digitalWrite(Led8, HIGH);    
    }
    
    if (incomingByte == 'R') {
        digitalWrite(Led8, LOW);
    }
    
    if (incomingByte == 'S') {
        digitalWrite(Led9, HIGH);   
    }
    
    if (incomingByte == 'T') {
        digitalWrite(Led9, LOW);
    }
}
}

allora cambia tutto, non ti sei spiegato bene.

ti consiglio Firmata http://firmata.org/wiki/Main_Page
:slight_smile:

@Google93: se usi una matrice, con il numero di righe pari al numero di comandi, e il numero di colonne pari a 3, in una colonna metti la lettera corrispondente al comando, nella seconda il numero di pin, e nella terza se accendere o spegnere. Poi ogni loop scorri l'array, quando trovi il comando lo esegui. Ed ecco che il tuo interminabile loop viene riassunto in 5 o 6 righe di codice.

Ciao, io sono nuovo nel mondo di Arduino ma non in quello della programmazione. Di recente ho fatto una cosa molto simile a quella che chiedi e la soluzione è molto più semplice di quelle proposte: tutto quello che devi fare è leggere e scrivere sulla porta seriale, nulla di più!

Premesso però che io ho esperienza solo su Windows (quindi non saprei aiutarti su MAC e LINUX), però almeno posso dirti come/cosa fare.

Su Windows, fare un programma che si interfacci con la porta seriale emulata da Arduino è molto semplice soprattutto se si usa un linguaggio managed tipo C#.
I vantaggi di C# sono tanti soprattutto se vuoi che il tuo programma abbia una interfaccia grafica: hai un editor visuale, prendi la finestra aggiungi pulsanti ed hai finito.
La comunicazione seriale in C# è banale. è del tipo

SerialPort port = new SerialPort();
port.PortName= "COM12";
port.BaudRate = 9600;
port.Open(); //apre la porta
port.Write("Testo di prova inviato ad arduino"); //Invia dati sulla seriale

Per ricevere dati invece, non sei tu a forzare la ricezione ma ogni qual volta ci sono dati da leggere sulla seriale, sarà innescato un evento (cioè una funzione), e tu stampi a video senza problemi quello che ricevi.

Quindi con Windows e C#, l'approccio è di 10 righe di codice..non di più!
D'altro canto invece, su MAC e LINUX (dove io non ho mai avuto esperienze di programmazione), la cosa è un pò più complicata perchè C e C++ non sono molto facili da utilizzare per la comunicazione seriale (o meglio non quanto C#). A meno che non ti fai un giro su codeproject et similia, per vedere se esistono già delle librerie utilizzabili per la comunicazione seriale su MAC e LINUX.

Viceversa però, quello che mi viene da pensare per semplificare il tutto, è utilizzare Java.
Apparte che java ti permetterebbe di usare lo stesso "eseguibile" sia su MAC che su Linux, poi è molto più semplice per implementare la comunicazione seriale ed è simile a C# in quanto a complessità. Inoltre potresti usare IDE come NetBeans che ti permetterebbero di creare in pochi minuti anche una GUI.

Ciao! :wink:

non conosci Firmata (che ho linkato sopra)
per quanto facile possa essere lo scrivere un programma come tu dici, non potra' mai superare la facilita' di "Un ProgrammaGia'Fatto"

Firmata fa cio' che chiede da solo, senza inventare nulla
ed esiste per win/linux e l'altro

per mac non funziona...ora riavvio e provo su mint...almeno ho i sorgenti...che sicuramente userò andando a modificare!

EDIT: neanche per linux non funziona...mi sono dimenticato di avere un 64bit... ho provato con wine...ma niente... quancuno ha qualche altra soluzione?

funziona
dimmi di preciso come lo hai usato, magari capisco l'errore

funziona dove??? su mac o su linux?
su linux devo ancora capire come aprirlo visto che non è ne un deb, ne un tar.gz, su mac, io lo apro, mi dice di selezionare la porta, ma non mi appare niente a video...
p.s.: ho arduino uno...siccome c'è scritto che crea problemi...non è che sia quello?

Ma quale sketch carichi su arduino ?
carica firmata standard e vedi. Altrimenti E' normale che non vedi nulla
Non ti serve il tuo sketch

ok funziona grazie!!!

so che per Linux esiste "gambas" che è uan specie di visual basic e dovrebbe avere gia librerie per la seriale e non dovrebbe essere troppo difficile scrivere un programmino con intefaccia grafica.
è mia intenzione provarlo appena sulla mia distrubuzione arriva gambas3 fatto per kde4 (e relative qtlib).

prova a darci un occhiata, magari potrebbe andarti bene ache la versione 2.x che lavora però con le vecchie libreie qt3 almeno cis mi è parso

Con Gambas2 si comunica con la seriale in 2 passaggi 2.
Tempo fa feci una prova e riuscivo a spedire da e per l'Arduino in semplicità.

Gambas3 è già disponibile da tempo in versione RC, puoi compilarlo senza problemi ed usarlo.

leo72:
Con Gambas2 si comunica con la seriale in 2 passaggi 2.
Tempo fa feci una prova e riuscivo a spedire da e per l'Arduino in semplicità.

Gambas3 è già disponibile da tempo in versione RC, puoi compilarlo senza problemi ed usarlo.

ottimo a sapesri, purtroppo su questo pc di lavoro, vorei tenerlo pulito senza tante prove (ma aspetto anche un nuovo disco per queste prove) e li posso comilarlo anche se spero escano gli rpm (sul sito dice che la versine finale è uscita a fine 2011)
comunque per fare cose velosi mi stuzzica :smiley:

Martinix:
ottimo a sapesri, purtroppo su questo pc di lavoro, vorei tenerlo pulito senza tante prove (ma aspetto anche un nuovo disco per queste prove) e li posso comilarlo anche se spero escano gli rpm (sul sito dice che la versine finale è uscita a fine 2011)
comunque per fare cose velosi mi stuzzica :smiley:

Uhm... Parli di RPM e di KDE. Che distro usi?

Google93:
ok funziona grazie!!!

Uno è lieto di poter servire :slight_smile:

leo72:

Martinix:
ottimo a sapesri, purtroppo su questo pc di lavoro, vorei tenerlo pulito senza tante prove (ma aspetto anche un nuovo disco per queste prove) e li posso comilarlo anche se spero escano gli rpm (sul sito dice che la versine finale è uscita a fine 2011)
comunque per fare cose velosi mi stuzzica :smiley:

Uhm... Parli di RPM e di KDE. Che distro usi?

si esatto! uso la opensuse 12.1 però magari faccio il lavoro "sporco" sul portatile appena lo portoal lavoro (nel frattempo che mi danno un disco di prova) :smiley:
ora lo provo in virtuale con la ver 2

Martinix:
si esatto! uso la opensuse 12.1

Lo sospettavo :wink:
Una domanda, hai mai compilato ed usato lo sketch ArduinoISP?

leo72:

Martinix:
si esatto! uso la opensuse 12.1

Lo sospettavo :wink:
Una domanda, hai mai compilato ed usato lo sketch ArduinoISP?

troppe dipendenze di kde3 porta dietro..ma in virtuale nn mi preoccupo.

No mai usato ArduinoISP.

l'unica cosa che ho fatto è usare kdevelop con arduino(0022)