ciao a tutti ho un problema che devo risolvere a breve e sono disperato,
devo realizzare un miscelatore di liquidi che faccia entrare una certa quantità regolabile di due liquidi diversi per poi farli centrifugare per un determinato tempo ed infine scaricarli dalla centrifuga, il tutto gestito da arduino e visualizzato da processing, sono inchiodato o fatto i due listati, per arduino e processing, che da soli sembra funzionino, il problema nasce quando devo passare la variabile "stato" da arduino a processing, NON RIESCO A FARLO..... Vi prego aiutatemiiiiiiiii
il codice arduino:
int START; //DICHIARO LA VARIABILE DI START INTERA
int T=2000; //DICHIARO LA VARIABILE DI TEMPO PER LA ROTAZIONE E LE ASSEGNO 1 SECONDO
int T1; //DICHIARO LA VARIABILE DI TEMPO INTERA PER L'APERTURA DELLA VALVOLA 1
int T2; //DICHIARO LA VARIABILE DI TEMPO INTERA PER L'APERTURA DELLA VALVOLA 2
int stato=0;
int t; //VARIABILE CHE UTILIZZERO PER TEMPORIZARE LA ROTAZIONE
String valore;
void setup()
{
Serial.begin(9600);
pinMode(ST, INPUT);
pinMode(P, INPUT);
pinMode(LG, OUTPUT);
pinMode(LR, OUTPUT);
pinMode(LV, OUTPUT);
pinMode(LM, OUTPUT);
}
/* MI CREO UN VOID PER LE TEMPORIZZAZIONI DELLE VALVOLE A CUI ASSEGNERO' I VALORI DEI TEMPI T1 PER LA PRIMA VALVOLA
T2 PER LA SECONDA E LA LORO SOMMA PER LA TERZA*/
void ritardo(unsigned long ms)
{
unsigned long tmp;
tmp=millis();
while((millis()-tmp)<= ms);
}
void loop() {
switch (stato)
{
// FERMO TUTTO ED ASPETTO LA PRESSIONE DEL PULSANTE P
case 0:
valore="0";
Serial.println(valore);
delay(50);
digitalWrite(LV,LOW);
digitalWrite(LG,LOW);
digitalWrite(LR,LOW);
digitalWrite(LM,LOW);
START=digitalRead(P);
if (START ==1)
{
stato=1;
}
break;
//LEGGO IL VALORE DI LIQUIDO DA FAR ENTRARE DALLA PORTA ANALOGICA A0 ED APRO LA VALVOLA 1 PER IL TEMPO NECESSARIO
case 1:
valore="1";
Serial.println(valore);
delay(50);
digitalWrite(LR,LOW);
digitalWrite(LG,LOW);
digitalWrite(LM,LOW);
digitalWrite(LV,HIGH);
T1=(analogRead(A0)*10);
ritardo(T1);
stato=2;
break;
/*CHIUDO LA VALVOLA 1,
LEGGO IL VALORE DI LIQUIDO DA FAR ENTRARE DALLA PORTA ANALOGICA A1 ED APRO LA VALVOLA 2 PER IL TEMPO NECESSARIO*/
case 2:
valore="2";
Serial.println(valore);
delay(50);
digitalWrite(LR,LOW);
digitalWrite(LG,HIGH);
digitalWrite(LM,LOW);
digitalWrite(LV,LOW);
T2=(analogRead(A1)*10);
ritardo(T2);
t=millis();
stato=3;
break;
//CHIUDO LA VALVOLA 2 E FACCIO PARTIRE LA CENTRIFUGA PER IL TEMPO IMPOSTATO IN "T"
case 3:
valore="3";
Serial.println(valore);
delay(50);
digitalWrite(LV,LOW);
digitalWrite(LG,LOW);
digitalWrite(LR,LOW);
if ((millis()-t)<= T)
{
digitalWrite(LM, HIGH);
delay(100);
digitalWrite(LM, LOW);
delay(100);
}
else
stato=4;
break;
/*FERMO LA CENTRIFUGA E APRO LA VALVOLA DI SCARICO
PER IL TEMPO DERIVANTE DALLA SOMMA DEL TEMPO DI APERTURA DELLE VALVOLE 1 E 2 */
case 4:
valore="4";
Serial.println(valore);
delay(50);
digitalWrite(LV,LOW);
digitalWrite(LG,LOW);
digitalWrite(LR,HIGH);
digitalWrite(LM,LOW);
delay(T1+T2);
stato=0;
break;
}
}
il codice processing:
import processing.serial.*;
Serial myPort;
int STATO;
int livello1=5000;
int livello2=4000;
int livello3=4000;
PImage img;
int stato=0;
int t;
int t1;
int t2;
int t3;
void setup() {
size(640, 480, P3D);
background(#000000);
img = loadImage("valvola.jpg");
//posiziono a schermo le tre elettrovalvole
image(img, 80, 40);
image(img, 480, 40);
image(img, 360, 390);
stroke(255);
//disegno le tubazioni
line(150, 76, 300, 76);
line(300, 76, 300, 120);
line(340, 76, 340, 130);
line(340, 76, 490, 76);
line(320, 355, 320, 426);
line(320, 426, 360, 426);
String portName = Serial.list()[2];
myPort = new Serial(this, portName, 9600);
}
void draw()
{
if ( myPort.available() > 0) {
STATO = myPort.read();
}
switch (STATO)
{
case 0:
fill(0);
rect(389, 394, 20, 20);
translate(width/2, height/2);
rotateY(0.5);
fill(201,201,201,100);
box(100,200,100);
/*detto la condizione di uscita dal caso "0" ed assegno alla variabile t
il valore del conteggio interno dei millisecondi*/
// STATO = myPort.read();
break;
case 1:
fill(#FF0000); //assegno il colore rosso alla valvola di carico di sinistra
rect(110, 44, 20, 20); //indico qualle rettangolo colorare, valvola di carico 1
STATO = myPort.read();
break;
case 2: // eseguo le stesse operazioni del case 1, per la valvola di carico 2, e per la variabile t2
fill(0);
rect(110, 44, 20, 20);
fill(#FF0000);
rect(510, 44, 20, 20);
// STATO = myPort.read();
break;
case 3:
fill(0);
rect(510, 44, 20, 20);
if ( myPort.available() != 3)
{
STATO = myPort.read();
}
else {
lights();
translate(width/2, height/2);
rotateY(millis() * 0.01f);
box(100,200,100);
}
break;
case 4:
t=0;
fill(#FF0000);
rect(389, 394, 20, 20);
translate(width/2, height/2);
rotateY(0.5);
fill(201,201,201,100);
box(100,200,100);
STATO = myPort.read();
break;
}
}
Grazie comunque per l'aiuto che ci date
Giuseppe