Librerie e schermi per i numeri

Ciao, sono XX21b.
Ho un problema con una libreria che vorrei creare per controllare i display a 7 segmenti come questo:

Negli allegati ho messo il file .ino, .h e .cpp.
Questo è l’errore che mi compare nell’ IDE:

Arduino:1.6.0 (Windows 8), Scheda:"Arduino Uno"

D:\XX21b\Arduino\Arduino IDE/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -ID:\XX21b\Arduino\Arduino IDE\hardware\arduino\avr\cores\arduino -ID:\XX21b\Arduino\Arduino IDE\hardware\arduino\avr\variants\standard C:\Users\XX21b\AppData\Local\Temp\build6197656272652764153.tmp\displayLibrary_1.cpp -o C:\Users\XX21b\AppData\Local\Temp\build6197656272652764153.tmp\displayLibrary_1.cpp.o 

displayLibrary_1.ino:1:27: fatal error: NumbersScreen.h: No such file or directory
compilation terminated.
Errore durante la compilazione

displayLibrary_1.ino (121 Bytes)

NumbersScreen.cpp (2.39 KB)

NumbersScreen.h (374 Bytes)

Ciao, sono XX21b. Ho un problema con una libreria che vorrei creare per controllare i display a 7 segmenti tipo questo:

This is the English language part of the forum. Why are you posting here in Italian? Would you like the answers in Russian?

Se il file NumbersScreen.h e NumbersScreen.cpp sono nella stessa directory del .ino allora devi usare
#include “NumbersScreen.h”

Se usi #include <NumbersScreen.h> devi mettere i due file di libreria in una sottocartella dentro a LIBRARIES

Ho fatto come mi hai detto ma non funziona:

Arduino:1.6.0 (Windows 8), Scheda:"Arduino Uno"

Uso la libreria NumbersScreen nella cartella: D:\Marco\Arduino\Arduino IDE\libraries\NumbersScreen (legacy)



D:\Marco\Arduino\Arduino IDE/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -ID:\Marco\Arduino\Arduino IDE\hardware\arduino\avr\cores\arduino -ID:\Marco\Arduino\Arduino IDE\hardware\arduino\avr\variants\standard -ID:\Marco\Arduino\Arduino IDE\libraries\NumbersScreen C:\Users\Marco\AppData\Local\Temp\build7946516534611108855.tmp\example1.cpp -o C:\Users\Marco\AppData\Local\Temp\build7946516534611108855.tmp\example1.cpp.o 

In file included from example1.ino:1:0:
D:\Marco\Arduino\Arduino IDE\libraries\NumbersScreen/NumbersScreen.h:7:26: error: ISO C++ forbids declaration of 'nscreen' with no type [-fpermissive]
     nscreen(int screen[8]);
                          ^
example1.ino:2:1: error: 'Screen' does not name a type
example1.ino: In function 'void setup()':
example1.ino:4:3: error: 's1' was not declared in this scope
Errore durante la compilazione

Ho fatto una sola modifica: ho cambiato 'Screen' in nscreen perchè essendo una "parola" già usata non funzionava bene lo stesso.

***********************************For PaulS************************************************

Привет, это XX21b. У меня есть проблема с библиотекой, которую я хотел, чтобы создать для управления 7-сегментный дисплей вроде этого:


Ma che c'entra con l'errore di prima ? Ora il primo è risolto. Questo è un altro errore. :fearful:

Non so come risolvere questo dilemma... Tutta colpa degli schermi a 7 segmenti!! s1 non dichiarato... ma cosa mi dice non si sa. Glielo devi scrivere in cirillico che sta scritto dentro il setup 's1'?

1.Nel file NumbersScreen.h hai scritto NumbersSceen senza la r
2.Se la classe la vuoi chiamare NumbersScreen allora la variabile s1 deve essere di tipo NumbersScreen e non Screen. Infatti il compilatore ti dice che Screen è una parola che non conosce.

Ti do un consiglio spassionato, leggiti per bene un libro di C++ su come si creano le classi, perchè mi pare ti manchino molte basi (e non solo di programmazione ad oggetti).
Il tuo costruttore non si può chiamare Screen, ma deve avere il nome della classe. Inoltre se passi come parametro un array screen, questo è visto solo in quella funzione, non puoi di certo usarlo come ad esempio fai nella displayClear()

Quindi questo

Screen s1(13, 12, 11, 10, 9, 8, 7, 6);

dovrebbe essere

NumbersScreen s1(13, 12, 11, 10, 9, 8, 7, 6);

E se passi 8 parametri, la funzione HA 8 parametri e non 1 parametro array/vettore

class NumbersSceen {
  private:
    int screen[8];  // membro non visibile fuori
  public:
    NumbersScreen(int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8);
...
NumbersScreen::NumbersScreen(int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8) 
{ int sinx=0;
  screen[0]=p1;
  screen[1]=p2;
  // fallo per tutti ed 8 i parametri... io non ho voglia
  while (sinx < 8) {
    pinMode(screen[sinx], OUTPUT);
    sinx++;
  }
}

Grazie, ora proverò con i tuoi consigli!

Inoltre nota che il tuo topic va nella sezione Software ma tu hai postato nella sezione Hardware chissà per quale ragione. Pensa se fra un mese cerchi nella sezione Software il tuo topic e non lo trovi.

Presta attenzione, il forum deve essere tenuto in ordine e gli utenti sono tenuti a contribuire a questo ordine, diversamente ci vorrebbe un esercito di moderatori.

Ciao.