ERRORE NELLA SCRITTURA DI UNA LIBRERIA
qualche giorno fa ho deciso di scrivere una libreria per pilotare un display 7 segmenti, 4 digit, catodo in comune con arduino. già che sul web ne esistono sicuramente moltissime al riguardo , ma volevo scriverla io, la libreria, per comprenderne meglio il funzionamento.
purtroppo però dopo aver scritto il file header e il source, e dopo aver scritto un semplice sketch per testarne il funzionamento mi da il seguente errore
file header
file source
sketch di prova
spero possiate aiutarmi
purtroppo però dopo aver scritto il file header e il source, e dopo aver scritto un semplice sketch per testarne il funzionamento mi da il seguente errore
code: [select]
arduino:1.6.6 (windows 10), scheda:"arduino/genuino uno"
c:\program files (x86)\arduino\libraries\sevensegments\sevensegments.cpp:26:5: error: prototype 'int sevensegments::stampa(int, int)' not match in class 'sevensegments'
int sevensegments::stampa(int a, int d)
^
in file included c:\program files (x86)\arduino\libraries\sevensegments\sevensegments.cpp:8:0:
c:\program files (x86)\arduino\libraries\sevensegments\sevensegments.h:23:9: error: candidate is: void sevensegments::stampa(int, int)
void stampa(int a, int d);
^
exit status 1
errore durante la compilazione
file header
code: [select]
#ifndef sevensegments_h
#define sevensegments_h
#include "arduino.h"
class sevensegments
{
public:
sevensegments(int a, int b, int c, int d, int e, int f, int g, int h, int d1, int d2, int d3, int d4);
int number(int _x);
private:
int x;
int unit;
int migliaia;
int centinaia;
int decina;
int unita;
void stampa(int a, int d);
};
#endif
file source
code: [select]
#include "arduino.h"
#include "sevensegments.h"
sevensegments::sevensegments(int a, int b, int c, int d, int e, int f, int g, int h, int d1, int d2, int d3, int d4)
{
pinmode(a, output);
pinmode(b, output);
pinmode(c, output);
pinmode(d, output);
pinmode(e, output);
pinmode(f, output);
pinmode(g, output);
pinmode(h, output);
pinmode(d1, output);
pinmode(d2, output);
pinmode(d3, output);
pinmode(d4, output);
}
int sevensegments::stampa(int a, int d)
{
switch (a){
case 0:
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(c, high);
digitalwrite(d, high);
digitalwrite(e, high);
digitalwrite(f, high);
digitalwrite(g, low);
digitalwrite(h, low);
case 1:
digitalwrite(a, low);
digitalwrite(b, high);
digitalwrite(c, high);
digitalwrite(d, low);
digitalwrite(e, low);
digitalwrite(f, low);
digitalwrite(g, low);
digitalwrite(h, low);
case 2:
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(c, low);
digitalwrite(d, high);
digitalwrite(e, high);
digitalwrite(f, low);
digitalwrite(g, high);
digitalwrite(h, low);
case 3:
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(c, high);
digitalwrite(d, high);
digitalwrite(e, low);
digitalwrite(f, low);
digitalwrite(g, high);
digitalwrite(h, low);
case 4:
digitalwrite(a, low);
digitalwrite(b, high);
digitalwrite(c, high);
digitalwrite(d, low);
digitalwrite(e, low);
digitalwrite(f, high);
digitalwrite(g, high);
digitalwrite(h, low);
case 5:
digitalwrite(a, high);
digitalwrite(b, low);
digitalwrite(c, high);
digitalwrite(d, high);
digitalwrite(e, low);
digitalwrite(f, high);
digitalwrite(g, high);
digitalwrite(h, low);
case 6:
digitalwrite(a, high);
digitalwrite(b, low);
digitalwrite(c, high);
digitalwrite(d, high);
digitalwrite(e, high);
digitalwrite(f, high);
digitalwrite(g, high);
digitalwrite(h, low);
case 7:
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(c, high);
digitalwrite(d, low);
digitalwrite(e, low);
digitalwrite(f, high);
digitalwrite(g, low);
digitalwrite(h, low);
case 8:
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(c, high);
digitalwrite(d, high);
digitalwrite(e, high);
digitalwrite(f, high);
digitalwrite(g, high);
digitalwrite(h, low);
case 9:
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(c, high);
digitalwrite(d, high);
digitalwrite(e, low);
digitalwrite(f, high);
digitalwrite(g, high);
digitalwrite(h, low);
}
switch (d){
case 1:
digitalwrite(d4, high)
digitalwrite(d3, low);
digitalwrite(d2, low);
digitalwrite(d1, low);
case 2:
digitalwrite(d3, high)
digitalwrite(d4, low);
digitalwrite(d2, low);
digitalwrite(d1, low);
case 3:
digitalwrite(d2, high)
digitalwrite(d3, low);
digitalwrite(d4, low);
digitalwrite(d1, low);
case 4:
digitalwrite(d1, high)
digitalwrite(d3, low);
digitalwrite(d2, low);
digitalwrite(d4, low);
}
int sevensegments::number(int _x)
{
if (_x >= 0 && _x < 10000){
x = _x;
}
else{
x = 9999;
}
if( x >= 0 && x <= 9){
unit = 1;
}
else if( x >= 10 && x <= 99){
unit = 2;
}
else if( x >= 100 && x <= 999){
unit = 3;
}
else if( x >= 1000 && x <= 9999){
unit = 4;
}
switch (unit){
case 1:
do{
stampa(x, 1);
} while(x = _x);
case 2:
do{
decina = x/10;
stampa(decina, 2);
delay(20);
unita = x - (decina*10);
stampa(unita, 1);
delay(20);
} while(x = _x);
case 3:
do{
centinaia = x/100;
stampa(centinaia, 3);
delay(10);
decina = (x - centinaia*100)/10;
stampa(decina, 2);
delay(10);
unita = (x - centinaia*100) - (decina*10);
stampa(unita, 1);
delay(10);
} while(x = _x);
case 4:
do{
migliaia = x/1000;
stampa(migliaia, 4);
delay(7);
centinaia = (x - migliaia*1000)/100;
stampa(centinaia, 3);
delay(7);
decina = (x - migliaia*1000 - centinaia*100)/10;
stampa(decina, 2);
delay(7);
unita = x - migliaia*1000 - centinaia*100 - decina*10;
stampa(unita, 1);
delay(7);
} while(x = _x);
}
}
sketch di prova
code: [select]
#include <sevensegments.h>
sevensegments ssg(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
void setup(){
}
void loop(){
ssg.number(5);
}
spero possiate aiutarmi
la definizione del metodo stampa è la seguente:
il metodo restituisce un dato di tipo int
mentre la dichiarazione (cioè il prototipo) nel file header è la seguente:
qui invece il metodo restituisce void
quindi dovresti risolvere modificando la definizione, togliendo int e al suo posto inserendo void
tutto qui.
ciao.
code: [select]
int sevensegments::stampa(int a, int d)
il metodo restituisce un dato di tipo int
mentre la dichiarazione (cioè il prototipo) nel file header è la seguente:
code: [select]
void stampa(int a, int d);
qui invece il metodo restituisce void
quindi dovresti risolvere modificando la definizione, togliendo int e al suo posto inserendo void
code: [select]
void sevensegments::stampa(int a, int d)
tutto qui.
ciao.
Arduino Forum > International > Italiano > Software (Moderator: leo72) > ERRORE NELLA SCRITTURA DI UNA LIBRERIA
arduino
Comments
Post a Comment