Salve a tutti,
mi e' appena arrivato un lcd tipo Nokia5510 e sto provando ad utilizzarlo.
Vorrei creare degli indicatori grafici che mi rappresentino delle manopole. Inizialmente ho scritto il codice tutto nel void loop() e tutto funziona correttamente.
Poi mi sono ricordato della programmazione ad oggetti e stavo provando a creare qualche cosa di piu' ordinato (ma non sono un esperto l'ho imparata tramite Processing).
Mi sono reso conto di dover seguire una procedura per creare delle Librerie che arduino avrebbe letto per utilizzare la mia classe.
Ho seguito questo tutorial http://www.arduino.cc/en/Hacking/LibraryTutorial ma credo di aver sbagliato qualche cosa o di non averla proprio capita.
Mi sono creato il mio file LcdIndicator.h contenente :
#ifndef LcdIndicator_h
#define LcdIndicator_h
#include <Arduino.h>
class Indicator
{
int x; //posizione x dell'indicatore
int y; //posizione y dell'indicatore
int d; //diametro dell'indicatore
int value; //valore da indicare
int print; //valore convertito da visualizzare
// -- parametri per conversione
float grad, rad;
int xx,yy; // parametri posizione finale indicatore
void update(int z); //Metodo update per prendere il valore da visualizzare
void display(); //Metodo Display per visualizzare il valore su schermo
};
#endif
e poi anche il .cpp
#include "Arduino.h"
#include "LcdIndicator.h"
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Indicator:: Indicator(int Kx, int Ky, int Kd){
x=Kx;
y=Ky;
d=Kd;
}
//METODO update()----------------------
void Indicator::Update(int z){
value = z; //trasferisco nella variabile "value" il valore del parametro
}
// METODO display()--------------------
void Indicator::Display(){
grad = map (value,0,1024, 0, 300); //converto l'ingresso analogico da 0 a 300 gradi
rad = ((grad+120)*3.14)/180); //trasformo i gradi in radianti
xx = x+ (d/2+2)*cos(rad); //calcolo i punti finali per il disegno dell'indicatore
yy = y+ (d/2+2)*sin(rad);
display.drawCircle(x, y, d,BLACK); //disegno il cerchio contentente l'indicatore
display.drawLine(x, y,xx,yy,BLACK); //disegno l'asta dell'indicatore
display.display();
}
e nell' Arduino ho scritto :
#include <LcdIndicator.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
#define LCD_X 84
#define LCD_Y 48
//-- Definisco gli oggetti
Indicator Ind(10,10,10);
void setup(){
display.begin();
//knb1 = new Knob(10,10,8);
display.clearDisplay();
}
void loop(){
display.drawRoundRect(0,0,84,48,5,BLACK);
}
Credevo che i primi errori sarebbero arrivati nel momento in cui il codice avesse usato le librerie
<Adafruit_GFX.h> e <Adafruit_PCD8544.h> perchè non credo di aver implementato bene il codice (ho ipotizzato che l'elemento "display" venga creato nel file di arduino in cui vado a richiamare questa libreria).
Invece quando vado a testare il codice mi da errore :
error: no matching function for call to 'Indicator::Indicator(int, int, int)
Credo di aver fatto un errore ma non sono in grado di capire dove e come rimediare.
Mi sapreste aiutare a rispolvere questo problema e ad imparare l'utilizzo delle classi?
Ringrazio chiunque voglia aiutarmi.