Pages: 1 [2]   Go Down
Author Topic: Passaggio valori a funzione  (Read 1415 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scusa è un byte, mi son confuso!
Serial.wryte(0xB0);
      Serial.write(0x01);
      Serial.write(0x7F);
a me funzionano, ide 1.0
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Cremona
Offline Offline
Full Member
***
Karma: 2
Posts: 148
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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));
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Cremona
Offline Offline
Full Member
***
Karma: 2
Posts: 148
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No .... Comando è una stringa !!
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Cremona
Offline Offline
Full Member
***
Karma: 2
Posts: 148
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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);
    }
}
Logged

Cremona
Offline Offline
Full Member
***
Karma: 2
Posts: 148
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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());
   }
}
Logged

Pages: 1 [2]   Go Up
Jump to: