Arduino Asksin library

Begonnen von trilu, 06 August 2013, 10:02:17

Vorheriges Thema - Nächstes Thema

trilu

hab das mal getestet, aber das mit dem Makefile scheint bei mir nicht zu klappen - wo muss dass hin?

jab

Hi trilu,

ich habe das mal exemplarisch angepasst. Wichtig ist, dass die Einrückungen Tabs sind. Make ist da penibel. Das Makefile liegt im sketch Ordner. Die Lib liegt im Unterordner "lib" und wird dann in das File "LibAskSin.h" zusammengefasst. Im Sketch bindet man dann nur noch letztere ein.

PREPROCESS=g++ -E -C -x c -iquote ./lib
OUTPUT=LibAskSin.h

# -E : Stop after preprocessing.
# -C : Don't discard comments.
# -x c : Treat the file as C code.
# -iquote ./src : Use ./src for the non-system include path.


all: process

clean:
        rm $(OUTPUT)

process:
        $(PREPROCESS) lib/*.h lib/*.cpp -o $(OUTPUT)



Gruß,
Jan

trilu

vermutlich bin ich zu doof...

ich habe jetzt mal das Makefile erzeugt.
Ordnerstruktur ist:

HM6TastenSwitch
  HM6TastenSwitch.ino
  Makefile

  lib
    LibAskSin.h
    AskSin.h/cpp
    usw.


Egal wie ich es drehe, ich bekomme ein ungültiges Verzeichnis wenn ich die LibAskSin.h vom main sketch aufrufen will.
Packe ich die LibAskSin.h ins sketch Verzeichnis, dann wird sie gefunden, aber ich bekomme dann die Meldung das er den Rest, der in der LibAskSin.h angegeben ist nicht findet... 

trilu

#498
@dirk

habe gerade zwei Probleme gefixt. Die Wiederholrate eines long repeated keypress ist jetzt bei 300ms.
Long Keypress Time > 1 Sekunde hat wegen des Tiefschlafs der CPU nicht funktioniert. Ich halte die CPU jetzt einfach für 2 Sekunden wach nachdem eine Taste gedrückt wurde. Die Zeit verlängert sich dann jeweils, solange etwas gesendet wird...

Ach ja, das Batteriemessen habe ich nach Helpers ausgelagert, damit bleibt der Main sketch übersichtlicher...

Viele Grüße und guten Rutsch
Horst

jab

Hi trilu,

Die generiert lib liegt danach wie das Makefile im Sketch Ordner. Dann müsste es gehen.


Gruß
Jan

Dirk

#500
Ich habe noch ein Bisschen Modularisiert.
Jetzt ist alles entsprechend ausgelagert und damit etwas übersichtlicher.

ABER:
Das mit dem Makefile funktioniert bei mir auch nicht.
Daher ist Register.h hier im Moment im Library-Ordner.

Mein Vorschlag:
Sämtliche Register, Einstellungen usw. auch in eine Klasse Kapseln und die von außen entsprechen mit "reingeben"
Dann sollte das unabhängig werden.

Die Batteriemessung ist hier noch im Sketch. Das mit den Konstanten will ich da noch ändern und das auch eine Klasse packen die von außen entsprechend konfiguriert wird. So bekommen wir das etwas unabhängiger.

Zitathabe gerade zwei Probleme gefixt.
Hab ich schon mit übernommen.

zu Git:
Ich würde das etwas Strukturieren. Vielleicht so:

/Devices/ - Hier kommen die Sketches der einzelnen Devices rein (jeweils in einen Ordner) (z.B. HM6TastenSwitch)
/Lib/ - Hier kommt die Library rein

Gruß
Dirk

trilu

Hi Dirk,
So eine Struktur wollte ich ja eigentlich auch,  aber wenn ich nach lib kapsle,  dann kommt Arduino damit nicht klar.
Momentan ist der Git nach Arduino Standard. Du musst im Library Ordner von Arduino nur ein Verzeichnis erzeugen und den Git eins zu eins reinkopieren.
Viele Grüsse
Horst

Dirk

Ich habe Batteriemessung im vorherigen Beitrag noch mal angepasst.

getBatteryVoltage ist wieder in Helpers allerdings ohne Klasse.
Die Bandgap-Reference-Spannung wird der Funktion als Parameter übergeben, somit configurierbar.
Mit der Configuration der ADC-Register müsste man sich ggf. noch was überlegen.

Gruß
Dirk

Dirk

Zitat
So eine Struktur wollte ich ja eigentlich auch,  aber wenn ich nach lib kapsle,  dann kommt Arduino damit nicht klar.
Das ist klar. Es ging mir auch "nur" um die logische Trennung.
Also ein Library-Ordner, der muss dann ins Libs-Verzeichniss und je ein Ordner für die "Geräte". Als eine Art "Sammelstelle"

Gruß
Dirk

trilu

ZitatMein Vorschlag:
Sämtliche Register, Einstellungen usw. auch in eine Klasse Kapseln und die von außen entsprechen mit "reingeben"
Dann sollte das unabhängig werden.

Für die peer database bekomme ich das hin, aber für das eeprom Handling sehe ich da nicht viele Chancen.
Weil auch so eine Kapsel will ja übergeben werden und dazu muss die Struktur bekannt sein. Bekanntmachen geht über die Register.h...

Völlig ärgerlich.....

ZitatDas ist klar. Es ging mir auch "nur" um die logische Trennung.
Also ein Library-Ordner, der muss dann ins Libs-Verzeichniss und je ein Ordner für die "Geräte". Als eine Art "Sammelstelle"

Aber die haben wir doch jetzt schon - kopier das ganze Verzeichnis in den Library Ordner, innerhalb des Ordners gibts die Struktur Examples, das ist Arduino Standard, aber du kannst den hinlegen wo immer du willst...
Kopie oder Hardlink, geht beides. Mir lässt das mit dem Makefile ja keine Ruhe. Ich werde da Morgen noch ein wenig spielen....


Dirk

Zitat... Aber die haben wir doch jetzt schon - kopier das ganze Verzeichnis in den Library Ordner
Mir ging es eher um die Sketches für die unterschiedlichen Devices. Oder sollen die dann alle in examples?
Können wir auch machen.

ZitatMir lässt das mit dem Makefile ja keine Ruhe.
Ich finde das Konzept der Arduino-IDE hier auch ziemlich bescheiden.

jab

Abend,

Das Makefile geht bei mir unter Linux ganz gut. Unter lib liegen dann alle Header und cpp Files. Der Präprozessor erzeugt dann daraus ein File und legt es in den Sketch Ordner. Letztes wird in der IDE eingebunden. Als Nebeneffekt kann der Compiler sogar noch etwas besser optimieren.

Was für einen Fehler bekommst du denn? Ggf kannst du auch den avr-g++ nehmen oben im Makefile.


Gruß
Jan

Dirk

Zitatbei mir unter Linux ganz gut
Das war das "Zauberwort"
Wir haben hier ein Windows-System.
Die IDE verhält sich bei mir so, als ob kein Makefile da währ.

trilu

Hallo Zusammen,

nachdem ich die letzten 2 Tage nur gesucht und gelesen habe wie Arduino IDE funktioniert, GCC Kompendium, etc studiert habe und immer noch keine passende Lösung für das Problem bzgl der Register.h und AskSin.h/cpp in einem Library Ordner habe. Habe ich mich entschlossen das Register Handling für die AskSin noch einmal neu zu machen.
Bei der Gelegenheit gehe ich auch den Interrupt an und baue ihn etwas universeller ein.

Deshalb bitte in nächster Zeit keine Änderungen in der AskSin.h/cpp

Viele Grüße
Horst

jab

Moin trilu,

ich habe einen Bug in der RL/Relay Klasse gefunden. Wenn man lgActionType auf 0 setzt sollte er keine Aktionen durchführen. Das funktioniert nur solange nxtStat==0. Wenn man allerdings shActionType=1 setzt dann kann nxtStat durchaus einen anderen Wert annehmen. In poll_rly wird dann die (lastTrig == 40) Logik aufgerufen und er schaltet das Relay.

Lange Rede kurzer Sinn: In trigger40 muss ein nxtStat=0 gesetzt werden:


        if (actTp == 0) {                                                                                                                        // off
                nxtStat=0;
        } else if ((actTp == 1) && (lngIn == 1)) {                                                                        // jmpToTarget
                // SwJtOn {no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}
                if (curStat == 6) nxtStat = srly->lgSwJtOff;                                                // currently off


Soll ich dir einen Pushrequest auf github schicken oder bist du eh gerade am Refactorn?


Gruß,
Jan