Go Down

Topic: Problema passaggio dati Processing -> Arduino (Read 10348 times) previous topic - next topic

camperos

#15
Nov 24, 2013, 12:17 pm Last Edit: Nov 24, 2013, 12:22 pm by camperos Reason: 1
ciao
nei miei sketch in questo caso devo mettere un delay, ignoro il motivo ma cosi  (nei miei)funziona

Code: [Select]
if(Serial.available() > 0) {
  char message = Serial.read();
  if(message == 'r') {
    analogWrite(pin[0],230);
  delay (100);
}
}
}
https://www.youtube.com/watch?v=RR-xsS2xUzc

vecio88

Lo schema da cui ho preso questo esempio faceva così anche se li il Gnd lo metteva su un pin Nn pwm perché era un Arduino uno e la disposizione dei pin era diversa

nid69ita


Lo schema da cui ho preso questo esempio faceva così anche se li il Gnd lo metteva su un pin Nn pwm perché era un Arduino uno e la disposizione dei pin era diversa


Una serie di schede per i collegamenti:   http://forum.arduino.cc/index.php?topic=146152.msg1098046#msg1098046
Sul sito di xxxPighi ci sono le versioni pdf ad alta definizione.

Scheda 5, è una striscia a led RGB, molto più complessa, ma puoi vedere che il GND è a GND con l'alimentazione e vengono pilotati da 3 pin i 3 colori.
my name is IGOR, not AIGOR

vecio88

Ok questa è una modifica che farò appena posso :) però il problema sembra un altro ovvero che non arriva niente al Serial

vecio88

Ho un piccolo dubbio, se le porte seriali USB dell'arduino mega sono 0 e 1 e io non collego il led a quelle porte non mi scriverà niente?

Questa cosa mi sembra strana perchè nell'esempio che puoi vedere http://www.youtube.com/watch?v=PNXQexJotTM al minuto 10:59 c'è lo schema. Il mio però ha solo il led RGB e neanche lui ha collegato niente ai pin 0 e 1.

Ripeto ho la netta impressione che non arrivi assolutamente niente alla seriale.

nid69ita


Ho un piccolo dubbio, se le porte seriali USB dell'arduino mega sono 0 e 1 e io non collego il led a quelle porte non mi scriverà niente?


secondo me stai facendo confusione. Il dialogo seriale va su Usb e perciò su pin 0/1 mentre il controllo del led rgb non c'entra nulla. Sei tu da codice che decidi quali altri pin usare per controllare R, G e B. Con, mi ripeto, la gambetta GND a GND ovvero in comune con alimentazione di Arduino (e con una resistenza per abbassare l'amperaggio).
http://www.iprog.it/blog/arduino/pilotiamo-un-led-rgb-con-arduino/
my name is IGOR, not AIGOR

camperos

scusa se intervengo, ma è meglio   avere delle risposte in piu :)
ho provato il tuo sketch (solo la parte arduino), mandando una "r"  fuziona,
ma questo via bluetooth, e serve il delay detto sopra se no non funziona.

ho provato via USB, e le cose si sono complicate, se non invio niente da arduino a processing, sembra che non si stabilisca il contatto, attuato il contatto , il tou sketch funziona.

ultima cosa, ho guardato lo sketch di processing e usi la libreria "arduino.cc",
non ricordo bene, ma quando usavo quella libreria dovevo caricare su arduino "Arduino Standard Firmata"
ma come detto, non ricordo bene

https://www.youtube.com/watch?v=RR-xsS2xUzc

vecio88


scusa se intervengo, ma è meglio   avere delle risposte in piu :)
ho provato il tuo sketch (solo la parte arduino), mandando una "r"  fuziona,
ma questo via bluetooth, e serve il delay detto sopra se no non funziona.

ho provato via USB, e le cose si sono complicate, se non invio niente da arduino a processing, sembra che non si stabilisca il contatto, attuato il contatto , il tou sketch funziona.

ultima cosa, ho guardato lo sketch di processing e usi la libreria "arduino.cc",
non ricordo bene, ma quando usavo quella libreria dovevo caricare su arduino "Arduino Standard Firmata"
ma come detto, non ricordo bene

Quella libreria in realtà non la uso, era una prova... Cmq cosa dovrei inviare da Arduin Per fadare funzionare processing e Arduino?

nid69ita


Quella libreria in realtà non la uso, era una prova... Cmq cosa dovrei inviare da Arduin Per fadare funzionare processing e Arduino?


http://processing.org/reference/libraries/serial/index.html
my name is IGOR, not AIGOR

camperos

in arduino  code cambia il pin 45 con il tuo 2
in processing la porta

alcuni esempi dal sito non funzionano piu  :0
non so se problemi del recente processing,, arduino o mega, o io   ]:)
il tuo cosi funziona, almeno su mio pc

processing aggiunto void serialEvent

Code: [Select]
import processing.serial.*;
Serial myPort;
void setup() {
  println(Serial.list());
  myPort = new Serial(this, Serial.list()[1], 9600);
}
void draw () {
  delay (256);
}
void serialEvent(Serial myPort) {
  myPort.write ('r');
}


dal tuo codice   arduino ho  aggiunto
  "estabilishContact " dall'esempio http://arduino.cc/en/Tutorial/SerialCallResponse, la "a" apparentemente a processing  non serve

Code: [Select]
char T[]= {
  'r','v','b','i'};
int  dati[]= { 
  0,  0,  0,  0}; // di default sono 0,0,0,0
int  pin[]= {
  45, 5, 6, 4};
int  N[]= {
  0,0,0};
int  e = 0;
int  f;
char d;
void setup() {
  Serial.begin(9600);
  for (int i = 0; i <= 4; i += 1){
    pinMode(pin[i], OUTPUT);
  }
}
void loop() {
  for (int i = 0; i < 4 ; i++) {
    analogWrite(pin[i],dati[i]);
  }
  if(Serial.available() > 0) {
    char message = Serial.read();
    if(message == 'r') {
      analogWrite(pin[0],130);
    }
  }

  establishContact();
}
void establishContact() {
  while (Serial.available() <= 0) {
    Serial.print('A');   // send a capital A
    delay(300);
  }
}

https://www.youtube.com/watch?v=RR-xsS2xUzc

vecio88


camperos

mi sono espresso male.
nel codice tuo lascia il "3"
https://www.youtube.com/watch?v=RR-xsS2xUzc

vecio88

#27
Nov 25, 2013, 03:38 pm Last Edit: Nov 25, 2013, 03:53 pm by vecio88 Reason: 1
Ho inserito quella funzione ma niente.

Ti mostro il nuovo codice:

Code: [Select]

//Informazioni per la comunicazione
String IP    = "192.168.1.12";
//String IP    = "192.168.1.101";
int    out   = 8004;
int    in    = 9004;
String com   = "COM3";
int    bit   = 9600;

//Librerie
import oscP5.*;
import netP5.*;
import processing.serial.*;

OscP5 Ricezione;
NetAddress Invio;
Serial Arduino;


//Indirizzi/Dati di OSC
//Info. Pagine
String pagine[]  = {"/main"};
int    numPagine = 1;

//Info. Bottoni
String ButtomPage1[]  = {"/faderRosso", "/faderVerde",  "/faderBlu", ""};
int    dataDefaultPage1[]  = {0, 0, 0, 0};
//String V0[]  = {"/vl",   "/",    "/",    "/",  "/",   "/",   "/", "/"}; non dovrebbe servire per ora
int    numButton1 = 3;

//Variabili del programma
int    numeroBottoniPaginaSelezionata;     //Variabile per il controllo dei dati in ingresso (numero bottoni)
String bottoniPaginaSelezionata[];   //Variabile per il controllo dei dati in ingresso (nome bottoni)
int    d;     //Variabile per contenere i dati appena ricevuti da OSC
int    e;    //Variabile per contenere i dati appena ricevuti da Arduino
int N[]={0,0,0};

void setup() {
 frameRate (30);
 
 Ricezione = new OscP5(this,out);
 Invio = new NetAddress (IP,in);
 Arduino = new Serial(this, Serial.list()[0], bit);  
}

void draw() {
 background(50);
  Arduino.write("r");
}

void ArduinoFunc(){
 /*
 Arduino.write("r" + (dataDefaultPage1[0]/100) + ((dataDefaultPage1[0]/10)-((dataDefaultPage1[0]/100)*10)) + (dataDefaultPage1[0]-((dataDefaultPage1[0]/10)*10)));
 Arduino.write("v" + (dataDefaultPage1[1]/100) + ((dataDefaultPage1[1]/10)-((dataDefaultPage1[1]/100)*10)) + (dataDefaultPage1[1]-((dataDefaultPage1[1]/10)*10)));
 Arduino.write("b" + (dataDefaultPage1[2]/100) + ((dataDefaultPage1[2]/10)-((dataDefaultPage1[2]/100)*10)) + (dataDefaultPage1[2]-((dataDefaultPage1[2]/10)*10)));
 Arduino.write("i" + 1);
 */

 
}

// funzione che riceve i dati dal OSC
void oscEvent(OscMessage theOscMessage) {
 
for (int i = 0; i < numPagine; i++){
   switch (i){      
     case 0:
     numeroBottoniPaginaSelezionata = numButton1;
     bottoniPaginaSelezionata = ButtomPage1;
     break;
     
   }
   
   for(int j = 0; j < numeroBottoniPaginaSelezionata; j++) {
     
     if ( (pagine[i]+bottoniPaginaSelezionata[j]).equals(theOscMessage.addrPattern())) {
       
       float valoreRicevuto  = theOscMessage.get(0).floatValue();
       d = int(valoreRicevuto * 255.00);
       
       switch (i){
         case 0:
         dataDefaultPage1[j] = d;
         println("Valore: " + dataDefaultPage1[j] + "(" + bottoniPaginaSelezionata[j] + ")" );
         break;
       }
     }
   }
   
 }
}


Questo è Arduino

Code: [Select]

char T[]= {'r','v','b', 'i'};
int  dati[]= {200, 255, 255,0}; // di default sono 0,0,0,0
int  pin[]= {3,5,6,4};
int  N[]= {0,0,0};
int  e = 0;
int  f;
char d;

void setup() {
 Serial.begin(9600);
 for (int i = 0; i < 4; i++){pinMode(pin[i], OUTPUT);}
}

void loop() {

 if(Serial.available()) {
   char message = Serial.read();
   Serial.println(message);
   if(message == 'r') {
     analogWrite(pin[0],0);
     analogWrite(pin[1],130);
     analogWrite(pin[2],0);
     
   } else {
     analogWrite(pin[0],0);
     analogWrite(pin[1],0);
      analogWrite(pin[0],130);
     
   }
 }
 
 establishContact();
 
}

void establishContact() {
 while (Serial.available() <= 0) {
   Serial.print('A');   // send a capital A
   delay(300);
 }
}


vecio88

esiste una funzione per sapere quanti caratteri ci sono nel buffer del serial prima di iniziare a leggerli?

Per intenderci quelli che leggo con Serial.read()

nid69ita

Guarda che in Processing questo comando:
Code: [Select]
Arduino = new Serial(this, Serial.list()[0], bit);
Ti apre la seriale (COMx) che lui trova in elenco alla posizione 0 dell'array di stringhe.
Se sul tuo pc hai solo COM3 allora il primo elemento dell'array di cui sopra è COM3.
Ma se hai anche altre seriali, elemento 0 potrebbe essere COM1.
Sul mio PC di casa ad esempio io ho fisicamente una porta seriale COM1.
Perciò quel comando mi aprirebbe la COM1, su cui posso spedire ma che non comunica con Arduino.
Non darà nessun errore perchè fisicamente la seriale c'e'.

Non conosco bene Processing ma forse è meglio se forzi la seriale giusta:
Code: [Select]
Arduino = new Serial(this, "COM3", bit);
my name is IGOR, not AIGOR

Go Up