era da un po che non mi facevo vivo alla fine ho acquistato arduino e sto iniziando a lavorare a un paio di progetti che avevo sempre messo da parte, per ora sono bloccato sul seguente problema:
** il caso quì sotto è solo di esempio **
ho bisogno di dover configurare arduino da un sw possibilmente scritto in java in modo da garantire portabilità al SW farlo girare insomma su macchine win linux mac o quanto altro possibile.
Ho trovato diverse guide ed esempi su come controllare arduino da java ma non è quello che serve a me, a me serve che il microprocessore debba essere configurato da java e non controllato. Mi spiego meglio con un esempio
ho il processore, un led verde, un led giallo, un pulsante.
il processore accende il led verde alla pressione del pulsante
avvio il sw java e imposto che il led controllato dal pulsante non deve essere il verde ma il giallo
spengo il PC con java, arduino continua ad accendere il led giallo
se anche riavvio arduino non deve perdere l'impostazione
qualcuno ha idee in proposito?
grazie a chi risponderà (ma anche a chi non potrà rispondere)
Quello che Tu vuoi fare si puó fare totalmente senza riprogrammare Arduino. Basta definire una variabile di modo e memorizzarla nella EEprom del ATmega. All'accensione del Arduino leggi la/le variabile/i e usi la parte di programma che corrisponde al modo attivo.
Se sono da cambiare i LED basta anche memorizzare il pin del led da attivare col pulsante x. Se deve cambiare solo a PC acceso/colegato basta che Arduino manda sulla seriale una richiesta e un progamma qualsiasi ul PC gli risponde. Alla risposta giusta varia il modo, senza risposta continua nel modo ativo.
Esempio di avere diverse funzioni ad ogni reset (accensione):
teoria di variare una variabile a ogni accensione: Counting Resets | Blinkenlight
Esempio di 3 modi diversi di accendere i LED che variano a ogni accensione/Reset:
L' autore é un programmatore professionale e il suo codice non é facile da capire perché usa dei puntatori alle funzioni brightness_pattern_1, brightness_pattern_2 e brightness_pattern_3
Innanzitutto grazie della risposta, ora mi studio per bene il materiale che mi hai linkato.
Ti spiego però perchè l'ide di arduino non è sufficiente.
Quello dei led era solo il caso base per comprenderne il funzionamento, a me serve avere un sw java molto più complesso per la configurazione di 32 \ 64 tasti e potenziometri differenti.
Si tratta di un controller MIDI, il SW java decide che controllo MIDI deve essere assegnato a ogni tasto e setta il controller per inviare il controllo o la nota.
Ad usarlo non sarò io ma un altro che non può andare a cambiare manualmente i valori da assegnare direttamente da codice ma dovrà farlo usando un'interfaccia grafica che sto disegnando.
Girando un po su internet stavo pensando di usare un file xml dove salvo la mappa di tutti i tasti con il comando midi che deve essere inviato, se il file risultasse troppo grande al limite potrei anche usare una scheda SD per memorizzare tutto, all'avvio viene fatto il parsing e vengono inizializzate le variabili che sarebbero alla fine 64 variabili di tipo int per un totale di 1024 bit sarebbe utile come idea?
La libreria Firmata non é utile perche telecomanda l' arduino e non lo setta. @SaMe questo mi sembra la via utile. Trasmetti al Arduino via seriale un file di setup dove definisci/programmi ogni tasto.
Comunque non é meglio usare per esempio rasberry con un display touchscreen come interfaccia utente programmazione e arduino come controller Hardware?
Ciao Uwe
Il sistema si interfaccia con un PC dotato di CPU i7 o con un mac pro quindi per loro gestire anche il controller il tutto va integrato in un unico case dove ho già il touch screen per controllare l'altro PC (i7 \mac) diventerebbe poi un po tutto troppo confusionario.
stavo vedendo le librerie TXRX direttamente come è stato fatto qui per inviare i dati all'arduino.
giusto per "dovere di cronaca" per ora sto partendo da questo tutorial Private Site
per ora faccio in modo di controllare da java se accendere il led A o il led B
modifica successiva oltre ad accendere il led A \ B salva in EEPROM quale led accendere al restart successivo.
Fatto questo direi che la parte di comunicazione java \ arduino sarà terminata
ultimo auto-reply, dopo aver "giocato" un po con l'arduino oggi pomeriggio sono arrivato a questo codice
#include <EEPROM.h>
int led = 13;
int val = 0;
int addr = 0;
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
val = EEPROM.read(addr);
if (val == 1 ){
digitalWrite(led, HIGH);
}
}
// the loop routine runs over and over again forever:
void loop() {
delay (100);
}
void serialEvent() {
while (Serial.available()) {
val = Serial.parseInt();
if(val == 1) {
EEPROM.write(addr, val);
digitalWrite(led, HIGH);
}
else if(val == 0){
digitalWrite(led, LOW);
EEPROM.write(addr, val);
}
}
Serial.println("Succesfully received.");
}
unito al java del topic sopra, direi che è una base di partenza anche per altri che si trovano nella mia situazione, ora resta da convertire i led on\off in messaggi MIDI ma questo è completamente un altro discorso.