la mia prima libreria... :D

salve a tutti scrivo il mio post per porvi un problema... :grin: premetto che ho buone conoscenze di elettronica e programmazione quindi non ho bisogno delle basi su collegamenti ecc. ma adesso mi sto affacciando ad arduino dopo aver letto mooolto sul argomento e osservando programmi gia fatti... insomma le basi di arduino le so... ma voglio approfondire!!!

mi sono imbattuto nella creazione di una nuova libreria che, ha bisogno di tre file, file.h-file.cpp.-file.txt. tralasciando quest'ultimo i primi due sono essenziali!! il mio scopo è quello di avere su di un pin un onda quadra a frequenza variabile(per ora la vario variando il tempo mS) e che mi conti i fronti di salita(step)... e su un altro piedino una semplice operazione booleana per gestire il verso del motore (verso). il tutto serve per pilotare un driver(postep25) per motori passo passo...
ecco il file.h

#ifndef fontanaMotor_h
#define fontanaMotor_h
#include "arduino.h"

class fontanaMotor{
public:
fontanaMotor(int pingestione,int pinverso);
void gestione(int mS,int steps,boolean verso);
};
#endif

e gli errori della verifica sull'IDE

core.a(main.cpp.o): In function main': C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/main.cpp:40: undefined reference to setup'
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/main.cpp:43: undefined reference to `loop'

osservando gli errori ho salvato lo stesso pensando che arduino non avesse ancora capito che sto costruendo una nuova libreria.. e sono passato al file.ccp:

#include "arduino.h"
#include "fontanaMotor.h"

fontanaMotor::fontanaMotor (int pingestione,int pinverso){
pinMode(pingestione,OUTPUT);
pinMode(pinverso,OUTPUT);
}
void fontanaMotor::gestione(int mS,int steps,boolean verso){
if (verso=true){digitalWrite(pinverso,HIGH);}
else {digitalWrite(pinverso,LOW);}

for(int a=0; a<steps;a++){
digitalWrite(pingestione,HIGH);
delay(mS);
digitalWrite(pingestione,LOW);
delay(mS);
}
}

ma compilando ecco cosa mi appare...

sketch_oct24a:6: error: 'fontanaMotor' has not been declared
sketch_oct24a:6: error: ISO C++ forbids declaration of 'fontanaMotor' with no type
sketch_oct24a:10: error: 'fontanaMotor' is not a class or namespace
sketch_oct24a.ino: In function 'void gestionr(int, int, boolean)':
sketch_oct24a:11: error: 'pinverso' was not declared in this scope
sketch_oct24a:12: error: 'pinverso' was not declared in this scope
sketch_oct24a:15: error: 'pingestione' was not declared in this scope

si capisce che non riesce a trovare il file.h e di conseguenza tutto il resto... il file.h è stato salvato in arduino>libreries>fontanaMotor>fontanaMotor.h >fontanaMotor.h la stessa cosa vale per il cpp ma se salvo e chiudo non li riesco a riaprire.... come posso fare??? dove sbagliooo??? grazie a tutti in anticipooo !!! :grin: :grin:

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Devi studiarti le classi del C++.
Li troverai la soluzione ai tuoi problemi. :grin:

quindi le classi c++ sono uguali ad arduino ??

Si, Arduino si programma in C e C++ con alcune limitazioni. Ma il linguaggio è quello.

mastertreep:
quindi le classi c++ sono uguali ad arduino ??

No. Nella programmazione orientata agli oggetti una "classe" descrive un "oggetto", ossia un elemento logico riusabile.
Il linguaggio di Arduino è un insieme di oggetti che aggiungono delle funzioni al linguaggio C++ classico atte a poter accedere alle periferiche hardware del microcontrollore.

N.d.Leo72: post rimosso su richiesta dell'autore

Testato grazie per l'aiuto!!! ho visto le varie modifiche ma gli errori non cambiano... non so cosa sbaglio... io scrivo lo sketch salvo sotto librerie>fontanaMotorClass>fontanaMotorClass.h>fontanaMotorClass.h... ciò che cambia in confronto alle altre librerie(viste su alcuni link che mostrano immagini) che io ho una cartella denominata fontanaMotorClass.h e all'interno di essa c'è il fontanaMotorClass.h riconosciuta dal pc come arduino source code. il file non si apre una volta salvato dandomi come errore: launch4j "an error occurred while starting the application". :confused:

la cartella devi chiamarla come il file header ma senza l'estensione, quindi "fontanaMotorClass".
Perché usi 2 livelli di sotto-cartelle per contenere la libreria: fontanaMotorClass/fontanaMotorClass.h ?

mi viene creata automaticamente... io creo solo una cartella sotto libraries con lo stesso nome della classe ma poi,una volta salvato, se vado a vedere all'interno della cartella fontanaMotorClass mi trovo un altra cartella fontanaMotorClass.h e all'interno c'è fontanaMotorClass.h riconosciuto dal pc come codice arduino... non riesco a non creare la cartella fontanaMotorClass.h... la stessa cosa accade quando salvo il cpp...

Ma come la salvi, scusa?
Io tutte le librerie che creo le salvo manualmente.

Inizialmente ho creato in cartella_degli_sketch/ la cartella /libraries.
Poi all'interno di questa creo le cartelle /nome_libreria ed all'interno metto i file .h e .c/.cpp che salvo dall'editor con cui scrivo il codice delle librerie.

ecco... io salvo in documenti>arduino>libreries> cartella con nome della libreria... invece devo creare una cartella libraries all'interno della cartella degli sketch e successivamente le cartelle corrispondenti ai nomi delle librerie.. giusto ????

Se sei su Windows, Documenti/Arduino è la cartella degli sketch. E Documenit/Arduino/Libraries è giusta.
Quindi le tue lib le salvi lì dentro, ognuna con la sua bella cartellina. Controlla che non ci sia la doppia nidificazione (nomecartella.h/nomecartella).

si su windows,7.. ma se vado in documenti>arduino>libraries all interno non ho niente... cioè non ho neanche le librerie eeprom,esplora,stepper ecc. ma se vado su disco c> programmi>arduino1.0.6>libraries mi trovo tutte le altre librerie... dovrei salvarlo qui?? dove trovo le altre librerie???

Le librerie allegate con l'IDE stanno in un'altra cartella, contenuta all'interno della cartella /libraries che si trova nella cartella dove risiede l'eseguibile di Arduino.

E' sempre bene separare le proprie librerie da quelle di Arduino perché così, quando aggiorni l'IDE, non le perdi.

okok allora resto su documenti>arduino>libraries ma resta il fatto che non si apre una volta salvato...il file.ccp perchè non trova il file.h... quest ultimo mi dice:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
	at processing.app.Sketch.load(Sketch.java:189)
	at processing.app.Sketch.<init>(Sketch.java:137)
	at processing.app.Editor.handleOpenInternal(Editor.java:2193)
	at processing.app.Editor.<init>(Editor.java:304)
	at processing.app.Base.handleOpen(Base.java:709)
	at processing.app.Base.handleOpen(Base.java:674)
	at processing.app.Base$7.actionPerformed(Base.java:1108)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266)
	at java.awt.Component.processMouseEvent(Component.java:6263)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6028)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2475)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

chissà perchè Testano ha eliminato il suo sketch... non ricordo tutte le modifiche che ha fatto... :confused:

Il codice si include con gli appositi tag. :smiling_imp:

Fai una cosa, allega in uno zip sia lo sketch che stai usando sia la libreria almeno possiamo provarla e vedere cos'è che può generare l'errore che hai allegato

lo sketch che sto usando è lo stesso che ho postato all'inizio.. sto cercando di ricordare i cambiamenti di Testato... :confused:

Testato mi ha chiesto di rimuovere il suo post perché doveva modificarlo (come sai, attualmente c'è un bug sul forum che impedisce l'edit dei propri messaggi). Immagino che quando avrà pronti gli aggiornamenti, ripubblicherà il tutto.

PS: nel 1° post non c'è lo sketch