Show Posts
Pages: 1 2 [3] 4 5 ... 10
31  International / Generale / array di char da una stringa on: April 26, 2012, 05:50:02 pm
Come si crea un'array di char da una stringa di 3 caratteri?

Grazie, Alberto
32  International / Generale / Re: Conversione string to byte on: April 26, 2012, 04:34:49 pm
E come faccio a passare una'array di char ad una funzione ?
33  International / Generale / Re: Conversione string to byte on: April 26, 2012, 11:15:07 am
@Lesto

Il codice che mi hai consigliato non funziona.
Prova a testarlo se vuoi
Code:
char inByte;
char data;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available()>0)
  {
    Serial.print (strConv('0x00'),DEC);
  }
}

byte strConv(String str)
{
byte a =0;
if (str[2] >= '0' && str[2] <= '9'){ //estraggo 'B'
   a = str[2] - '0';
}else{
   a = str[2] - 'A';
}
a = a << 4; //muovo il valore di 4 bit a sinistra
if (str[3] >= '0' && str[3] <= '9'){  //estraggo '1'
   a += str[3] - '0';
}else{
   a += str[3] - 'A';
}
return a;
}
34  International / Generale / Cacchi non ne esco :( on: April 26, 2012, 10:30:32 am
Come si fa a far andare questo sputo di codice
Ero riuscito ma con tutte le prove che ho fatto mi sono incasinato tra i vari ide e non riesco più a farlo andare ....... (bestemmione)

char inByte;
char data;
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available()>0)
  {
    inByte = Serial.read();
    data = inByte;
    Serial.print (strConv(data));   
  }
}

byte strConv(String str)
{
byte a =0;
String stringa[4] = str;
if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B'
   a = stringa[2] - '0';
}else{
   a = stringa[2] - 'A';
}
a = a << 4; //muovo il valore di 4 bit a sinistra
if (stringa[3] >= '0' && stringa[3] <= '9'){  //estraggo '1'
   a += stringa[3] - '0';
}else{
   a += stringa[3] - 'A';
}
return a;
}
35  International / Generale / Re: Conversione string to byte on: April 26, 2012, 08:58:21 am
Hai ragione per gli indici ma avevi messo
al posto di a hai messo byte

la funzione è questa

Code:
byte strConv(String str)
{
//attenzione usare solo lettere masiuscole, non c'è controllo dell'input
byte a =0;
stringa [4] = str;
if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B'
   a = stringa[2] - '0';
}else{
   a = stringa[2] - 'A';
}
a = a << 4; //muovo il valore di 4 bit a sinistra
if (stringa[3] >= '0' && stringa[3] <= '9'){  //estraggo '1'
   a += stringa[3] - '0';
}else{
   a += stringa[3] - 'A';
}
return str;
}

sto provando ad usarla
36  International / Generale / Re: Conversione string to byte on: April 26, 2012, 08:26:10 am
Semmai era così !!

Code:
//attenzione usare solo lettere masiuscole, non c'è controllo dell'input
byte a =0;
stringa [4] = '0xB0';
if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B'
   a = (stringa[0] - '0');
}else{
   a = stringa[0] - 'A';
}
a = a << 4; //muovo il valore di 4 bit a sinistra
if (stringa[3] >= '0' && stringa[3] <= '9'){  //estraggo '1'
   a += stringa[0] - '0';
}else{
   a += stringa[0] - 'A';
}
Serial.write (byte);
37  International / Generale / Re: Conversione string to byte on: April 26, 2012, 07:07:38 am
Grazie lesto.

Come si fa a creare una funzione che entrando una stringa mi ritorni il byte.

Funzioni con ritorno valori non ne ho mai fatte smiley

Grazie, Alberto
38  International / Generale / Conversione string to byte on: April 26, 2012, 05:55:27 am
Buongiorno,
Se ho una stringa che contiene 0xB0 come posso convertirla in byte per poterla spedire con serial.write ?

Grazie, Alberto
39  International / Generale / Serial.flush(); su ide 1.0 Funziona ? on: April 26, 2012, 04:53:25 am
Ma a voi funziona il flush della seriale sull'ide 1.0 ?
40  International / Generale / Re: Funziona ma non bene on: April 25, 2012, 01:07:57 pm
e se non c'è l'asterisco ?
41  International / Generale / Re: Funziona ma non bene on: April 25, 2012, 11:31:08 am
I dati sulla seriale arrivano solo se li mando da visual basic.
Normalmente dal monitor quando non invio non vedo niente mentre
Se mando i dati il primo ! Scatena il read fuori dal loop, ma available
e' uguale a 0 mi manda il $N fa un break sul while e ritorna al loop.
Dopodiche' ogni carattere preceduto da ! Viene letto correttamente.
Il problema e' proprio fargli capire che quello e' il primo !.
42  International / Generale / Funziona ma non bene on: April 25, 2012, 09:57:37 am
Sono giorni che giro attorno a questo pezzo di codice che ho trovato in rete ma non riesco a farlo funzionare correttamente.
E' un protocollo di convalida dei dati ricevuti sulla seriale.
Ricevo sulla Serial1 e visualizzo su Serial di un Arduino mega

Entro in arduino da vb con una stringa così formata:
!!CC!0xB0!0x02!0x7F!* sono dei comandi midi

Il problema è che anche se la stringa viene inviata correttamente mi salta alla linea
     else if (Serial1.available() == 0)
quindi mi invia sulla serial0 $N e poi prosegue correttamente

Se invece invio la stringa senza * quando vado ad inviare una stringa corretta la
prima volta che viene stampata è incasinata e se la reinvio è corretta.
Pensavo di inserire un Serial1.flush per svuotare il buffer della seriale
quando arriva una stringa non corretta ma anche così non funziona.

Poi io vorrei avere una stringa con un solo ! iniziale e un * finale e tra un byte e l'altro
inserire un carattere diverso, che so un # solo per distinguere la suddivisione per avere
alla fine una cosa così:
!CC#0xB0#0x02#0x7F*

Qualcuno può spendere un po' di tempo per verificare questo codice ?
Sono veramente allo stremo delle forze.

Grazie, Alberto

Code:
/*===========================
TITLE: Serial Echo Code v1.1
AUTHOR: Fayaz Kadir
DESCRIPTION: If you send a string starting with "!" and ending with "*", the Arduino responds back with "$Y" for valid data string, or $N for invalid data string. You can modify this code for your use.
COMPATIBLE BOARD: Arduino Mega (but any other Arduino should work fine)
============================*/
char string[25];
int i=0;
int string_len;
int inByte;
int last_inByte;
int counter=0;

void setup() {
  Serial.begin(9600); //INTIALISING THE MIDI SERIAL PORT
  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() > 0) // if new data is available
     {
       inByte = Serial1.read(); // Read new byte
         Serial.print("READ : "); // Display the new byte
         string[string_len] = 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 == '*')
  {
       Serial.println ("eol FOUND, and full string was");  // Echoes Success Message
       Serial1.println ("$Y"); //SUCCESS SIGNATURE
       for (i=0;i<(string_len-1);i++) Serial.print(string[i]);
       Serial.print ("\n");
   }
 }
43  International / Generale / Re: Passaggio valori a funzione on: April 24, 2012, 06:14:16 am
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());
   }
}
44  International / Generale / Re: Passaggio valori a funzione on: April 23, 2012, 06:23:28 pm
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);
    }
}
45  International / Generale / Re: Passaggio valori a funzione on: April 23, 2012, 03:05:41 pm
No .... Comando è una stringa !!
Pages: 1 2 [3] 4 5 ... 10