Buonasera a tutti,
Io ultimamente mi sono messo a studiare le librerie ed eventualmente a scriverle. Ieri ho iniziato a scrivere una libreria per leggere dei sensori che solitamente non necessitano di una.
I sensori in questione sono:
-
HC-SR04 (misuratore di distanza ad ultrasuoni),
-
TMP 36GZ (misuratore di temperatura).
Gli script che utilizzo per effettuare le misurazioni con questi sensori sono i seguenti:
Per HC-SR04:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
delay(10);
Dove misura il tempo impiegato dall'ultrasuono a tornare al sensore e poi sapendo la velocità del suono ricava la distanza.
Per il TMP 36GZ
float voltage = (analogRead(PIN)/1024.0) /5.0;
float temperature = (voltage - 0.5)*100;
Dove sono tutti calcoli che si basano sulla resistenza del sensore.
La libreria volevo crearla con i seguenti comandi:
attachT(pinT
) per definire il pin impiegato dal sensore per comunicare,
attachD(echo, trig)
è la stessa cosa di prima ma con il misuratore di distanza
getT()
è la funzione che fa tutti i calcoli per ottenere la temperatura
getD()
stessa cosa di getT() ma con la distanza.
La libreria che ho scritto fino ad ora è la seguente:
sensors.h:
#ifndef __SENSORS_H__
#define __SENSORS_H__
class Sensors{
public:
Sensors();
void attachT(const int pinT);
void attachD(const int echo, const int trig);
void getD();
void getT();
private:
int _pinT;
int _echo;
int _trig;
int _voltage;
int _temperature;
int _duration;
};
#endif
sensors.cpp:
#include <Arduino.h>
#include <ctype.h>
#include "sensors.h"
Sensors::Sensors(){}
void attachT(const int pinT){
_pinT = pinT;
pinMode(_pinT, INPUT);
Serial.println("inizializzazione del sensore di temperatura completata");
}
void attachD(const int echo, const int trig){
_trig = trig;
_echo = echo;
pinMode(_trig, OUTPUT);
pinMdoe(_echo, INPUT);
Serial.println("inizializzazione del sensore ad ultrasuoni completata");
}
float getT(){
_voltage = (analogRead(_pinT)/1024.0 * 5.0;
_temperature = (_voltage - 0.5) * 100;
return _temperature;
}
il messaggio di errore che mi dà con questo codice è:
#include <sensors.h>
Sensors sium();
void setup(){
Serial.begin(9600);
sium.attachT(10);
}
void loop(){
Serial.print(sium.getT());
Serial.println("; ");
}
errore:
C:\Users\LENOVO\Documents\Arduino\progetti\miei\braccio robotico\prove\prova_MAP\prova_MAP.ino: In function 'void setup()':
C:\Users\LENOVO\Documents\Arduino\progetti\miei\braccio robotico\prove\prova_MAP\prova_MAP.ino:5:8: error: request for member 'attachT' in 'sium', which is of non-class type 'Sensors()'
sium.attachT(10);
^~~~~~~
C:\Users\LENOVO\Documents\Arduino\progetti\miei\braccio robotico\prove\prova_MAP\prova_MAP.ino: In function 'void loop()':
C:\Users\LENOVO\Documents\Arduino\progetti\miei\braccio robotico\prove\prova_MAP\prova_MAP.ino:8:21: error: request for member 'getT' in 'sium', which is of non-class type 'Sensors()'
Serial.print(sium.getT());
^~~~
exit status 1
Compilation error: request for member 'attachT' in 'sium', which is of non-class type 'Sensors()'