Go Down

Topic: Passaggio valori a funzione (Read 1 time) previous topic - next topic

lesto

scusa è un byte, mi son confuso!
Serial.wryte(0xB0);
      Serial.write(0x01);
      Serial.write(0x7F);
a me funzionano, ide 1.0
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

m.alverman

Ahhhh

Comunque anche a me funziona
Serial.write(0xB0);

Quello che non funziona è mandare una stringa 'Comando' che contiene 0xB0 cioè
Serial.Write(Comando,HEX) ..... come mi avevi suggerito tu

lesto

comando è un array, che viene letto come array di byte, e il numero di elementi da leggere..
per esempio
int a[lunghezza];

Serial.Write(a,lunghezza*sizeof(int));
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

m.alverman

No .... Comando è una stringa !!

lesto

allora dai la lunghezza della stringa in byte... occhio che se parli di Classe Stringa allora devi fare Comando.getCharArray o qualcosa di simile. trovi tutto sul reference
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

m.alverman

Ho partorito questa cosa ma non funziona  :smiley-red:
Invio da vb !!CC!0xB0!0x01!0x7F!*
Mi visualizza solo due byte e se riprovo non visualizza più nulla.

Help please

Code: [Select]

#include <MIDI.h>

char string[25];
int i=0;
int string_len;
int inByte;
int last_inByte;
int counter=0;

String TipoComando;
String Comando;
String Data1;
String Data2;

void setup() {
  Serial.begin(9600); //INTIALISING THE MIDI SERIAL PORT
  Serial1.begin(9600); //INTIALISING THE CONTROLLER SERIAL PORT
}

// La stringa in arrivo deve avere un ! per ogni lettera e deve terminare con un *
// All'inizio va raddoppiato !! altrimenti perdo la prima lettera
// Esempio !!P!R!O!V!A*

void loop()  // LOOP FUNCTION
{
  inByte = Serial1.read();
  string_len=0;
  if (inByte == '!')  read_serial();  // If Start of line ("!") is found, call read_serial() function
}

void read_serial()  // FUNCTION FOR READING THE SERIAL MESSAGE
{
   Serial.println ("SOL FOUND and reading");  // THE SOL (Start of Line) found notice.
   Serial1.print("READ : !\n");  //Saying that it has read "!" on the serial port
   while (inByte!= '*') // As long as EOL not found, keep reading
   if (Serial1.available() > 0) // if new data is available
     {
       inByte = Serial1.read(); // Read new byte
       Serial.print("READ : "); // Display the new byte
       string[string_len] = (int)inByte; // Save the data in a character array
       Serial.println(string[string_len]); // Print the characters that was recieved
       string_len++;
     }
     else if (Serial1.available() == 0)
       {
           Serial.println("EOL not available, data string invalid"); // If EOL not in the string
           Serial1.print("$N"); //FAIL SIGNATURE
           break;
       }

if (inByte == '*')
{
Serial1.println ("$Y"); //SUCCESS SIGNATURE
      Comando=((String)string[3]+(String)string[4]+(String)string[5]+(String)string[6]);
      Data1=((String)string[8]+(String)string[9]+(String)string[10]+(String)string[11]);
      Data2=((String)string[13]+(String)string[14]+(String)string[15]+(String)string[16]);

//Serial.println(Comando);
//Serial.println(Data1);
//Serial.println(Data2);

String mystr1;
String mystr2;
String mystr3;

char valcmd[6];
char valdt1[6];
char valdt2[6];

String cmd=Comando;
mystr1=cmd.substring(0,4);
mystr1.toCharArray(valcmd,3);

String dt1=Data1;
mystr2=dt1.substring(0,4);
mystr2.toCharArray(valdt1,3);

String dt2=Data2;
mystr3=dt2.substring(0,4);
mystr3.toCharArray(valdt2,3);

Serial.println(valcmd);
Serial.println(valdt1);
Serial.println(valdt2);

      Serial.write(valcmd);
      Serial.write(valdt1);
      Serial.write(valdt2);
    }
}

m.alverman

Perche se commento tutti i Serial.print (non i Serial1.print !!) il programma non mi manda fuori i valori midi mentre se li decommento si.

Grazie, Alberto

Code: [Select]

#include <MIDI.h>

char string[25];
int i=0;
int string_len;
int inByte;

String TipoComando;
String Comando;
String Valore;
String Canale;

void setup() {
  MIDI.begin();   
  Serial1.begin(9600); //INTIALISING THE CONTROLLER SERIAL PORT
}

void loop()  // LOOP FUNCTION
{
  inByte = Serial1.read();
  string_len=0;
  if (inByte == '!')  read_serial();  // If Start of line ("!") is found, call read_serial() function
}

void read_serial()  // FUNCTION FOR READING THE SERIAL MESSAGE
{
//   Serial.println ("SOL FOUND and reading");  // THE SOL (Start of Line) found notice.
//   Serial.print("READ : !\n");  //Saying that it has read "!" on the serial port
   while (inByte!= '*') // As long as EOL not found, keep reading
   if (Serial1.available() > 4) // if new data is available
     {
       inByte = Serial1.read(); // Read new byte
//       Serial.print("READ : "); // Display the new byte
       string[string_len] = (int)inByte; // Save the data in a character array
//       Serial.println(string[string_len]); // Print the characters that was recieved
       string_len++;
     }
     else if (Serial1.available() == 0)
       {
//           Serial.println("EOL not available, data string invalid"); // If EOL not in the string
           Serial1.print("$N"); //FAIL SIGNATURE
           break;
       }

if (inByte == '*')
{
Serial1.println ("$Y"); //SUCCESS SIGNATURE
      TipoComando=((String)string[0]+(String)string[1]);
      Comando=((String)string[3]+(String)string[4]+(String)string[5]);
      Valore=((String)string[7]+(String)string[8]+(String)string[9]);
      Canale=((String)string[11]+(String)string[12]+(String)string[13]);

//      Serial.println(Comando);
//      Serial.println(Valore);
//      Serial.println(Canale);
      MIDI.sendControlChange(Comando.toInt(),Valore.toInt(),Canale.toInt());
   }
}

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy