dúvida arduino (iniciante)

Boa noite. É a primeira vez que participo num fórum deste género por isso espero conseguir explicar-me. Desde já agradeço a todos por participarem neste tipo de iniciativa.
Tenho um trabalho em que tenho que fazer a medição da pressão arterial e é a primeira vez que utilizo o arduino, sendo que nunca programei em C, só matlab. Neste caso vai haver transferencia de dados do arduino para o matlab e é no matlab que depois vou tratar os dados.
Na breadboard tenho um sensor de pressão que esta ligado a uma bomba e uma válvula. Quando a bomba e a válvula estão ligados a pressão sobe e quando desligamos a válvula abre e naturalmente a pressão desce. O objectivo é fazer isto com o arduino. O sensor de pressão (que depois é amplificada no AI) liga ao arduino pela porta A0 e da saída digital 13 do arduino para a base de 2 transistores (um para a válvula e o outro para a bomba) irá sair a tensão que vai permitir ligar e desligar o motor e a valvula. O problema é que fazendo:

/*
Communications Matlab <–> Arduino
Arduino file 1 for use with Matlab file 1
L. Toms
establishContact() routine by:
by Tom Igoe and Scott Fitzgerald

other ideas from
robot grrrl
http://robotgrrl.com/blog/2010/01/15/arduino-to-matlab-read-in-sensor-data/
*/
int transistor_Pin = 13;
int AI_Pin = A0;
int nbits = 0;
int nbits_adquiridos = 0;
int nbits_160 = 885 // nota: 875 to 886 (4.27 a 4.33 V) (0 a 160mmHg)); valores que saiem do AI
double t = 0;
double s = 0;

void setup() {

// start serial port at 9600 bps:
Serial.begin(9600);
pinMode(AI_Pin,INPUT);
pinMode(transistor_Pin,OUTPUT);
establishContact(); // send a byte to establish contact until receiver responds
s=millis();

}

void loop() {

nbits = analogRead (AI_Pin);

if (nbits <= nbits_160)
{
digitalWrite(transistor_Pin,HIGH);
}
else
{
digitalWrite(transistor_Pin,LOW);
nbits_adquiridos = analogRead(AI_Pin);
}

t=millis()-s;
Serial.println(t);
Serial.println(nbits_adquiridos);
// o loop vai adquirir infinitamente. mas nos so queremos valores de 160 a 20mmHg!

}

void establishContact() {
while (Serial.available() <= 0) {
Serial.println(‘A’, BYTE); // send a capital A
delay(300);
}
}

No matlab tenho:

% Communications MatLab <–> Arduino
% Matlab file 1 for use with Arduino file 1
clc;
clear all;
numSec=10;
t=;
v=;

s1 = serial(’/dev/tty.usbmodem641’); % define serial port
s1.BaudRate=9600; % define baud rate
set(s1, ‘terminator’, ‘LF’); % define the terminator for println
fopen(s1);

try % use try catch to ensure fclose
% signal the arduino to start collection
w=fscanf(s1,’%s’); % must define the input % d or %s, etc.
if (w==‘A’)
display([‘Collecting data’]);
fprintf(s1,’%s\n’,‘A’); % establishContact just wants
% something in the buffer
end

i=0;
t0=tic;
while (toc(t0)<=numSec)
i=i+1;
t(i)=fscanf(s1,’%f’)/1000.;
v(i)=fscanf(s1,’%d’); % must define the input % d, %f, %s, etc.
end
fclose(s1);
plot(t,v,’-r’) % another interesting graph
% if you need precise timing
% you better get it from the
% arduino (see file 2) but
% THAT takes time
% down to 60 pts in .7 sec
catch exception
fclose(s1); % always, always want to close s1
throw (exception);
end

O problema também está no ciclo if do arduino, sei que não está bem feito. Porque quando a pressão sobe a cima de 160 (ie, o valor respectivo de tensão) o arduino desliga o motor e a valvula, mas com o diminuir da pressão o arduino vai apanhar um valor de pressao inferior a 160 e entra no ciclo para ligar o motor e a valvula novamente.

Tentei por o digitalWrite(transistor_Pin,HIGH) e digitalWrite(transistor_Pin,LOW) no void setup mas aí só tenho um valor do analogRead e não consigo ter uma leitura no momento.

Tentei dar a volta ao problema fazendo:

int AI_Pin = A0;
int transistor_Pin = 13;
int i = 0;
double t = 0;
double s = 0;

void setup() {

// start serial port at 9600 bps:
Serial.begin(9600);
pinMode(transistor_Pin, OUTPUT);
pinMode(AI_Pin,INPUT);

digitalWrite(transistor_Pin ,HIGH);

delay(5000);
digitalWrite(transistor_Pin,LOW);

establishContact(); // send a byte to establish contact until receiver responds
s=millis();
}

void loop() {
i = analogRead(AI_Pin);
t=millis()-s;
Serial.println(t);
Serial.println(i);
}

void establishContact() {
while (Serial.available() <= 0) {
Serial.println(‘A’, BYTE); // send a capital A
delay(300);
}
}

Porque sei que a tenão demora + - 5 segundos a chegar a uma pressão equivalente de 160, mas não queria fazer assim. De qualquer forma, fazendo o upload no arduino e depois mais tarde correndo o código no matlab, o código é executado 2 vezes, ie, o motor e a bomba começam por trabalhar depois desligam passados 5 segundos e tenho dados no matlab e um gráfico (nada apropriado) e de novo o motor e a bomba começam a trabalhar e depois desligam e aí já não obtenho nenhum gráfico.

Será que alguém me pode ajudar?
É essencial conseguir adquirir os dados para depois os conseguir tratá-los no matlab, e falta pouco tempo para entregar o trabalho. Agradeço muito!!

Antes de mais, coloca o código dentro das tags code. Quando estás a escrever o post, clica no botãozinho que tem este símbolo # e coloca o código dentro das tags que aparecem na caixa de texto.

Quanto ao problema, não percebi nada. O que falha, não falha e o que é que tens no momento... não o que fizeste até agora. Isso só complica.

Oi Da_kk,
Comecei a programar esse ano.Vi seu código e pelo o q entendi, vc quer q qdo nbits atinja 160, ele desligue a bomba e a válvula , que estão ligados juntos em um pino somente.

Tenta assim:

   int transistor_Pin = 13;
   int AI_Pin = A0;
   int nbits = 0;
   int nbits_adquiridos = 0;
   int nbits_160 = 885; // nota: 875 to 886 (4.27 a 4.33 V) (0 a 160mmHg)); valores que saiem do AI
   double t = 0;
   double s = 0;

   
   void setup() {
 
   // start serial port at 9600 bps:
   Serial.begin(9600);
   pinMode(AI_Pin,INPUT);
   pinMode(transistor_Pin,OUTPUT);
   establishContact();  // send a byte to establish contact until receiver responds
   s=millis();


}

 void loop() {
    t=millis()-s;
 
    do {
       digitalWrite(transistor_Pin,HIGH);
       nbits = analogRead (AI_Pin);
       Serial.println(t); 
       Serial.println(nbits);
       
    }
     while (nbits < nbits_160);
       
  if (nbits >=nbits_160){
     digitalWrite(transistor_Pin,LOW);//desligar a bomba e a valvula.
    while(1); //fazer nada.
  }

Ainda estou aprendendo a programar.Nao sei se esta correto.Mas tenta ai. N custa , ne?heheheh