Criação de bibliotecas


#1

Ola possuo um código para execução de um sensor de Ph e que preciso criar uma biblioteca com ele mais estou com problemas que o valor obtido quando executo a biblioteca não esta de acordo com o código em si. Acho que o erro esta em decorrer a função analogRead() mais não consegui resolver alguém poderia me ajudar?

  1. codigo normal

const int analogInPin = A0;
int sensorValue = 0;
unsigned long int avgValue;
float b;
float phValue1;
int buf[10],temp;
void setup() {
Serial.begin(9600);
}

void loop() {
for(int i=0;i<10;i++)
{
buf[i]=analogRead(analogInPin);
delay(10);
}
for(int i=0;i<9;i++)
{
for(int j=i+1;j<10;j++)
{
if(buf[i]>buf[j])
{
temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
}
}
avgValue=0;
for(int i=2;i<8;i++)
avgValue+=buf[i];
float pHVol=(float)avgValue*5.0/1024/6;
float phValue = -5.70 * pHVol + 21.34;
Serial.print("sensor = ");
phValue1=phValue + 2;
Serial.println(phValue1);

delay(2000);
}

  1. biblioteca Ph.cpp

#include <Ph.h>

Ph::Ph(int analPh) //chama a funcao cetada nom arquivo .h
{
this-> analogInPin = analPh; //atribui valores a variavel
//this-> constante1 = constante;

pinMode(analogInPin, OUTPUT);

}
float Ph::Ph_ec()
{

int sensorValue = 0;
unsigned long int avgValue;
float b;
float phValue1;
int buf[10];
int temp;

for(int i=0;i<10;i++)
{
buf[i]=analogRead(analogInPin);
delay(10);
}
for(int i=0;i<9;i++)
{
for(int j=i+1;j<10;j++)
{
if(buf[i]>buf[j])
{
temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
}
}
avgValue=0;
for(int i=2;i<8;i++)
avgValue+=buf[i];
float pHVol=(float)avgValue*5.0/1024/6;
float phValue = -5.70 * pHVol + 21.34;

phValue1=phValue + 2;

return (phValue);
}

  1. arquivo Ph.h
    #ifndef Ph_H_INCLUDED
    #define Ph_H_INCLUDED

#include <Arduino.h>

class Ph
{
public:
Ph(int analPh);
float Ph_ec();
private:
int analogInPin;

};

#endif

1.Arquivo nova arduino

#include <Ph.h>

#define analogInPin A2

float ph1;

Ph ph(analogInPin);

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

void loop()
{
ph1 = ph.Ph_ec();
Serial.println(ph1);
delay(2000);

}


#2

@alesio,

Poderia postar o esquemático do seu circuito?

Porque me pareceu que quando você seta o pino para leitura do valor analógico você está direcionando o mesmo como saída de sinal e não entrada para leitura.

Abraços.


#3


#4

o circuito esta ligado de forma correta mais pois o código normal funciona de forma correta mais o que esta como biblioteca nao. Fiz uns testes e verifiquei que o erro esta na função analogRead(). Pois quando chamada no código .cpp acaba zerando a variável e com isso retornando o valor errado. Tentei corrigir mais nao sei a sintaxe para atribui-lo no código do Arduíno e chama-lo na biblioteca acredito que seja esse o erro.