firmata e pc

ciao .. allora premesso chea programmare mela cavicchio e nn ho problemi con l'uso dell'aplicazione java per la programazione con sketch .. ma ho avuto problemi come "caricare "firmata" su arduino e quindi poi usare client... tipo il vb.net (messo a disposizione) per "commandare arduino. visto che dovvrò usare il pc per calcoli ecc.. al momento ... ho inserito uno sketch con una serie di "case", a ogni case una azione. grazie

Buongiorno!
Utilizzi processing per programmare da pc? Nel caso lo standard_firmata.pde lo trovi nel file zip processing_arduino.zip di questa pagina: http://www.arduino.cc/playground/Interfacing/Processing.
Devi salvare tutta la cartella Arduino che troverai nel file zip, dentro le libraries di processing. A questo punto apri l’IDE di Arduino, carichi standard_firmata.pde (salvato nelle libraries di processing)e fai l’upload sulla scheda. Quindi apri processing e puoi iniziare a programmare la scheda… non so se erano queste le info che cercavi…

grazie il mio progrmmino di prova e questo (ho il mega quoindi pin digitali dal 22 in su)

/*
  Switch statement  with serial input

 Demonstrates the use of a switch statement.  The switch
 statement allows you to choose from among a set of discrete values
 of a variable.  It's like a series of if statements.

 To see this sketch in action, open the Serial monitor and send any character.
 The characters a, b, c, d, and e, will turn on LEDs.  Any other character will turn
 the LEDs off.

 The circuit:
 * 5 LEDs attached to digital pins 2 through 6 through 220-ohm resistors

 created 1 Jul 2009
 by Tom Igoe 

 http://www.arduino.cc/en/Tutorial/SwitchCase2
 */

void setup() {
  // initialize serial communication:
  Serial.begin(9600); 
  // initialize the LED pins:
  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  
}

void loop() {
  // read the sensor:
  if (Serial.available() > 0) {
    int inByte = Serial.read();
    // do something different depending on the character received.  
    // The switch statement expects single number values for each case;
    // in this exmaple, though, you're using single quotes to tell
    // the controller to get the ASCII value for the character.  For 
    // example 'a' = 97, 'b' = 98, and so forth:

    switch (inByte) {
    case 'a':  

      if (digitalRead(23) ) {
        digitalWrite(23, LOW);
      }  
      digitalWrite(22, HIGH); 
    break;

    case 'b':   

      if (digitalRead(22) ) {
        digitalWrite(22, LOW);
      } 
      digitalWrite(23, HIGH);
    
    break;  

    case 'c' :
    
      digitalWrite(22, LOW);
      digitalWrite(23, LOW);
    break;

   case 'd':   

      if (digitalRead(25) ) {
        digitalWrite(25, LOW);
      } 
      digitalWrite(24, HIGH);
    
    break;  
    case 'e':   

      if (digitalRead(24) ) {
        digitalWrite(24, LOW);
      } 
      digitalWrite(25, HIGH);
    
    break;  
    
    case 'f':   

        digitalWrite(24, LOW);
        digitalWrite(25, LOW);   
    break;  
     case 'g': 
     
      digitalWrite(22, LOW);
      digitalWrite(23, LOW);
      digitalWrite(24, LOW);
      digitalWrite(25, LOW);   
    break;  
    }
  }
  delay(100);
  Serial.print(analogRead(0), DEC);
  Serial.print(";");
  Serial.print(analogRead(1), DEC);
  Serial.print(";");
  Serial.println(analogRead(2), DEC);
  
}

Non so voi, ma io non ho utilizzato nè processing, nè firmata...

Uso esclusivamente l'ide di arduino dal quale caricare il programma su arduino... Una volta caricato poi, il programma in java mi gestisce tutti i dati che invia arduino tramite ethernet...

Ciao Francesco ma si tratta di un'applicazione java costruita da te? E' molto interessante perchè per la mia applicazione sarò costretta ad utilizzare l'ide di Arduino per programmare la scheda ma poi non saprei come gestire i dati, o come costruire un'interfaccia grafica che permetta a qualcuno di gestirli in modo semplice....

Si è un'applicazione java che ho fatto io per processare i dati che giungono da arduino. Ne arrivano di diversi tipi... due relativi a segnali analogici nel senso che arrivano ogni secondo ad esempio (velocità rullo e on off); cinque relativi a segnali digitali nel senso che arrivano da fotocellule quando rilevano un pezzo sul nastro trasportatore.

Adesso mi sto cimentando nel salvataggio dei dati da java su file e successivamente nel salvataggio dei dati da java su database locale e remoto.

Non è cosa brutta utilizzare solo l'IDE di arduino ;) anzi... meno programmi si utilizzano meglio è, dato che altrimenti gestire l'interazione tra diversi programmi diventa più complicato.

Gestire i dati non è troppo difficile... impostando le uscite di arduino, si possono inviare delle stringhe ben formattate in modo che java possa "capirle" e in base al tipo di messaggio svolgere un'operazione diversa.

Ho fatto anche una semplice interfaccia grafica in java per mostrare i dati che arduino invia al pc.

Grazie! Mi sei stato molto utile, posso chiederti che tipo di classi java hai usato per processare i dati? E per l'interfaccia grafica? Conosco java, ma tu mi sembri molto esperto! Grazie

Lo prendo come un complimento!!

Programmare non mi piace troppo, però per il tirocinio che sto facendo, ce n'è da fare parecchio, quindi mi adatto!!

Per processare i dati (stringhe opportunamente formattate) ho utilizzato la string tokenizer (import java.util.StringTokenizer;) Prova a vedere su internet se trovi qualcosa al riguardo. ;)

Per quanto riguarda l'interfaccia grafica ho utilizzato le seguenti:

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.JOptionPane;

Le prime due servono per rilevare la pressione di un bottone dell'interfaccia grafica, la terza per creare la finestra, la quarta per fare le etichette, la quinta per fare delle caselle di testo, la sesta per fare i bottoni, la settima per dare una struttura al contenitore di tutti gli oggetti (caselle di testo, etichette, bottoni)

p.s. se sapessi come inserire le immagini qui nei post (cosa possibile ma che non riesco a fare, ti mostrerei la mia interfaccia grafica) ;)

Sei veramente gentile spero che potrò esserti utile anch'io in futuro!

C'è sempre la prima volta ;)

Quello che mi è piaciuto di più di questo forum è stata la disponibilità che gli altri hanno avuto nei miei confronti, così anche io adesso faccio lo stesso con gli altri!!!

Ciau :)

Scusa ancora una cosa, mi pare di capire che dovrò formattare oppurtunamente i dati in uscita da Arduino e trasformarli in stringhe? vero?

è stata una tecnica che ho adottato io, non so se è l’unica…

ti posto un pezzo di codice per chiarirti le idee:

              strcpy(msgPA,"!##MSG##");
              strcat(msgPA,"Aggiunto pallet$");
              Serial.println(msgPA);
              client.println(msgPA);
                  
              strcpy(cmdPA,"!##CMD##<PA>");
                  
              char contPALLET_txt[10]  = "";
              itoa(contPALLET, contPALLET_txt, 10);
            
              strcat(cmdPA,contPALLET_txt);
              strcat(cmdPA,"$");
              Serial.println(cmdPA); 
              client.println(cmdPA);

Il ! identifica l’inizio della stringa, i caratteri contenuti tra ##…## rappresentano il tipo di segnale che invia arduino (messaggio o comando). Nei tag <…> c’è il tipo di comando e ho usato il $ come terminatore di stringa.

Se c’è qualcosa che non capisci delle istruzioni che ho utilizzato, sono qui :sunglasses:

Grazie mille, ancora sono nella fase di test dei sensori che dovrò utilizzare, appena inizio a costruire il programma e l'interfaccia java, sicuramente dovrò chiederti di nuovo aiuto! Cmq mi sono chiarite molte delle idee che avevo Ancora grazie!