Hi, :-)

Ik wil meer structuur voor mijn Arduino code frutsels.
Maar hoe los ik dit goed op, de Arduino versie is voor bijna alle projectjes 2.3.7.

Eigenlijk zou ik de projectjes waar ik nu mee bezig ben op een netwerkshare willen hebben, laten we deze "R:\Arduino\projects" noemen.
Daarin kan b.v. een Pro-Mini-Oven folder in aangemaakt worden en wat ik dan wil is b.v. dat de .ino file in die folder komt,
maar ook de Libraries die bij dat project horen en dat de IDE dan niet gaat zoeken naar een ADS1115 librarie waar ik er vier van heb.
Dus de IDE moet het gene gebruiken wat in de project folder staat en niet buiten deze folder gaan neuzen.

Daarmee hoop ik ook te bereiken, dat als ik een ouder project heb, dat ik de bijbehorende files gewoon in de folder heb staan van dat project,
dat misschien ook al ge-archiveert is en ik het terug zet uit een back-up om het weer te gebruiken.
Voorlopig blijf ik bij de Arduino IDE, andere IDE-werkomgevingen heb ik nu geen zin in te gaan leren, programmeren is al lastig genoeg voor mij. ;)

Graag hoor ik van jullie hoe ik dit het beste kan aanpakken.
Alles wat netwerken en folders aanmaken betreft ken ik al, dit i.v.m. mijn IT-werkzaamheden. :-)

En deze URL in de Setting van de IDE voor de Arduino folder ken ik ook al waar de projecten staan en de libraries.
C:\Users\Joep-Meloen\Documents\Arduino\Libraries

Resume
Ik maak de volgende folder aan:
R:\Arduino\projects\Pro-Mini-Oven
In deze folder plaats ik de bestanden van de ADS1115 ADC converter en de versie die ik voor dit project wil gebruiken, het zelfde geld voor de Nokia-5110 LCD libraries van Rinky Dink.
En zo dan nog een paar libraries voor dit project.
Verder maak ik een nieuwe .ino file aan, zeg zoiets als dit: Pro-Mini-Oven-01.ino en frut daar de code in die ik nodig heb.

Vind de Arduino IDE nu de libraries in de door mij gemaakte project folder en/of
gaat hij ook "shoppen" in deze dikke librarie folder van mij: C:\Users\Joep-Meloen\Documents\Arduino\Libraries

Ik hoop dat het duidelijk is zo niet, dan hoor ik het wel van jullie of dit kan.

Dank en groet,
Bram

Je gaat ook de 'board' info moeten meenemen. Die staan meestal op je C schijf.

In de praktijk moet je alle files, die je ziet passeren tijdens het compileren, gaan verplaatsen. Library's erven vaak van andere library's. Ook die moet je erbij hebben. Bijvoorbeeld Adafruit_ILI9341.h vraagt ook achter Adafruit_GFX.h maar daar staan ook nog eens een reeks andere .h files en .cpp files.

Goede vraag. Bij Arduino heb je dat niet helemaal onder controle. Alles gaat automatisch, en daar kun je weinig in sturen.

Misschien een optie:
Onder ´file/preferences´ kun je een ´Sketchbook' lokatie instellen. Dat is een directory waar je alle sketches en ook alle libraries worden opgeslagen. Je kunt meerdere van die sketchbook directories aanmaken en dan switchen van de ene naar de andere. In elk sketchbook kun je dan een aantal projecten met bijbehorende libraries wegzetten.

Volgens mij werkt dat redelijk goed, maar ik weet niet of het voor jou voldoende is.

en dat de IDE dan niet gaat zoeken naar een ADS1115 librarie waar ik er vier van heb.

Die moeten alle 4 een andere naam hebben. En als je de goede naam opgeeft dat vind arduino die en gebruikt automatisch die met de naam de je opgegeven hebt onder include#

Onder Linux zou ik zeggen... mik dat hele gedoetje daar waar het staan wil en zorg dat dat iets wat gemount wordt is. Dan mount je wat je nodig hebt.
En ja, het zou ff gedoe kunnen zijn met wat symlinks voor files die min of meer onvermijdelijk op moeilijke plekken staan.

Hi, :-)

Dank voor alle antwoorden!

Benleentje, dat is nu het pobleem, de libraries en hun files zouden een andere naam moeten hebben, maar ik heb nu twee of drie stuks ADS1115.h files in de librarie folder staan.

Voor een enkel librarie niet zo'n probleem, maar voor ieder project libraries verplaatsen, dat komt bij mij niet echt over als een goede structuur.
Ook wat deKees zegt zou ik kunnen uitvoeren, maar dat wordt misschien ook een zooitje.
Dus voor ieder nieuw project een ander project path aanmaken met daarin de librarie folder waar mijn project libraries dan in komen.

Het een en ander moet ik even mentaal laten indalen, het moet ook buiten de deur goed toegankelijk worden en
alles op één plek(de project directory en libraries), mijn plek en niet MS-Blop of Google-graai Cloud oplossingen. :-)

De netwerk infrastructuur voor intern en extern is hier al aanwezig, dat is dus het probleem niet, het gaat om de IDE en zijn gedrag.
Ik denk eens na over deKees oplossing, misschien een script schrijven om het handiger te maken, wat ik zij eerst even wat opties laten indalen.

Dank en groet,
Bram

Op maandag 23 februari 2026 19:11:00 schreef blackdog:
Voorlopig blijf ik bij de Arduino IDE, andere IDE-werkomgevingen heb ik nu geen zin in te gaan leren, programmeren is al lastig genoeg voor mij. ;)

Dan ga ik ook niet proberen je te overtuigen ;)
Dus alleen ter info: met PlatformIO icm Visual Studio Code wordt het meeste al voor je geregeld, inclusief libraries installeren in aparte folders met de versienummers van dat moment.
Op het moment is PlatformIO al zo 'volwassen' dat het als een simpele plugin in VSC kan worden geïnstalleerd en 'out of the box' werkt.
Ik gebruik het zelf onder Linux (Debian) en Windows naar vrij grote tevredenheid - en ik ben een kritische gebruiker ;)

Ik heb een specifieke x:\Arduino Projects\... folder en daarin zet ik alle projectjes in ieder z'n eigen subfolder met libs.
Die folder wordt door PlatformIO al goed aangemaakt zodra je een nieuw project start.
En ik gebruik daarbij ook nog GIT ter backup om makkelijk tussen PC's (Linux en Windows) te kunnen sync'en.

Ik zou niet voor elk project een nieuwe Sketchbook aanmaken. Dat wordt inderdaad nogal bewerkelijk omdat je dan alle libraries telkens weer opnieuw moet installeren.

Maar het kan wel handig zijn om bijv de UNO-R3 en de Teensy uit elkaar te houden. Waarschijnlijk heb je nu meerdere ADS1115 libraries omdat verschillende processors andere eisen hebben.

Dat wordt inderdaad nogal bewerkelijk omdat je dan alle libraries telkens weer opnieuw moet installeren.

Nou ja... alle... die paar die je nodig hebt.
Maar dat was toch min of meer de bedoeling? Libraries per project?

ClearCase kan dit trouwens heel mooi. Maar dat zal zowel financieel als qua beheer een paar stappen te groot zijn.

Qua beheer is dat Arduino spul een drama. Mooi hoor, alles in 1 stuk software... Ik ben toch weer terug naar de directory structuur en 'hand made' make files. En gewoon op de commandline. Ja, dat kost soms wat tijd. Maar minder tijd en frustratie dan een IDE temmen.

Toen ik de titel van dit topic zag dacht ik ook meteen aan platformio, daar kun je libraries laden als "Global" , zodat ze in alle projecten gebruikt kunnen worden, of, specifiek voor een bepaald project, alles komt netjes in een folder structuur waarvan je zelf de locatie op kunt geven. Bij mij is dat een projecten directory in mijn OneDrive folder zodat alles ook meteen gesynched word naar de cloud en het op alle PC's / Laptops beschikbaar is. Bij mij OneDrive maar kan ook een NAS drive zijn, daar ik ook wel eens offline werk is dat mijn OneDrive folder.

Tja, dit is wel een beetje de keerzijde van het Arduino gebeuren. Leuk om snel te starten, maar zodra je wat serieuzer meerdere projecten naast elkaar hebt, loop je hier tegenaan. Maar goed, daar heb je nu niets aan :)

Het probleem zit hem vooral in hoe Arduino met libraries omgaat. Alles is globaal en er is geen versiebeheer. Dus als jij een library aanpast of update, kan het zomaar zijn dat oudere projecten ineens niet meer werken. Dat kan komen doordat jij iets wijzigt, maar ook omdat libraries online veranderen.

In de industrie lossen ze dit op met versiebeheer. Elke library heeft daar zijn eigen repository met versies, en een project verwijst naar een specifieke versie van die library. Daardoor blijven oude projecten gewoon werken, ook als een library verder ontwikkeld wordt. PlatformIO en ESP-IDF doen dit bijvoorbeeld ook zo: daar heeft een project een lijst met dependencies inclusief versies, en de omgeving zorgt dat precies die versies gebruikt worden.

Dat is netjes, maar voor Arduino is dat niet echt hoe het werkt.

Dus terug naar jouw situatie. Je wilt eigenlijk dat een project volledig op zichzelf staat, inclusief de juiste versies van libraries.

---------------------------

Optie A:
Wat werkt, is om de library gewoon in dezelfde map te zetten als je .ino, of in een submap daarvan, en dan eventueel je includes aan te passen naar relatieve paden. Dus in plaats van een globale include zoals <ADS1115.h> ga je dan iets doen als "ADS1115/ADS1115.h". Het is misschien wat minder netjes, maar het zorgt er wel voor dat je project volledig geïsoleerd is en altijd blijft werken zoals het bedoeld was.


#include "ADS1115/ADS1115.h"

Pro-Mini-Oven/
|-- Pro-Mini-Oven.ino
|-- ADS1115/
    |-- ADS1115.h
    |-- ADS1115.cpp

Dat werkt technisch gewoon, maar Arduino behandelt dit niet als "echte" library. Eventuele afhankelijkheden moet je dan dus ook zelf meenemen.

---------------------------

Optie B:
Wat deKees voorstelt is eigenlijk ook best een interessante oplossing. Je kunt meerdere sketchbook directories gebruiken en daar tussen wisselen in de Arduino instellingen. Elke sketchbook heeft dan zijn eigen set libraries. Daarmee hou je projecten gescheiden zonder dat je alles per project hoeft te kopieren. Nadeel is dat je handmatig moet schakelen, maar het blijft wel binnen hoe Arduino "bedoeld" is te werken.

Hier kun je gewoon je normale includes blijven gebruiken:


#include <ADS1115.h>

R:\Arduino\Sketchbook_Oven\
|-- libraries/
|   |-- ADS1115/
|-- Pro-Mini-Oven/
    |-- Pro-Mini-Oven.ino

R:\Arduino\Sketchbook_Display\
|-- libraries/
|   |-- ADS1115/
|-- DisplayProject/
    |-- DisplayProject.ino

---------------------------

En als je ooit denkt"ik ben hier echt klaar mee", dan kom je vanzelf uit bij iets als Git of PlatformIO. Dat lost dit probleem structureel op, maar heeft inderdaad een wat steilere leercurve. Overigens valt dat in de praktijk vaak mee als je het beperkt houdt tot de basis.

Mocht je zin hebben om eens een avondje wat te lezen: Let op meerdere pagina's.
https://www.atlassian.com/git/tutorials/what-is-version-control