Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Liliput L382003 Wagen set Rheingold HO - Handleiding door martr
Vandaag om 00:42:14
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Twinkie
Vandaag om 00:18:49
Raadplaatje door Lars Smelter
Vandaag om 00:01:04
Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
Vandaag om 00:00:16
Magneet koppelingen voor Bemo door martijn v m
23 August 2025, 23:45:55
Gekke/vreemde/rare filmpjes en video's met treinen erin. door Eric B
23 August 2025, 23:28:25
Veevervoer ss/ ns door klusser
23 August 2025, 23:15:58
Ronald doet de Fork Challenge! door Ronald Halma
23 August 2025, 23:15:49
23 augustus modelspoorbeurs Houten door Hans van de Burgt
23 August 2025, 23:12:14
Bouw spoor nul modulebaan, Bahnhof Königshofen, tijdperk III door bernhard67
23 August 2025, 23:11:41
Länderbahn en Reichsbahn locomotieven. door Wim Vink
23 August 2025, 23:09:09
De bouw van mijn modelbaan in Thailand door Wim Vink
23 August 2025, 23:07:08
Brezelbahn in H0, Duitsland tp III. door Wim Vink
23 August 2025, 23:05:47
Toon hier je nieuwe (model-) spooraanwinst(en)... door Vonkentrekker
23 August 2025, 22:50:58
De overeenkomst tussen een Ovaalramer en een Motorpost. door lrrw
23 August 2025, 22:31:32
Nederland jaren 50 op basis van mijn roots door defender
23 August 2025, 21:38:37
Vele baanplannen online gezet door Ton Kuipers
23 August 2025, 21:28:38
PB models: koplopers (voorbespreking) door barry1972
23 August 2025, 21:03:02
Roco Loc trilt 1 kant op bij optrekken icm klokanker door Sylvester
23 August 2025, 21:01:58
Ombouw Hornby LMS Class 2P 4-4-0 naar NS 2100 door Ronald69
23 August 2025, 20:34:06
De bouw van “Bahnstrecke Lahr” door Peter.v.L
23 August 2025, 20:08:19
Am Ende der Strecke, modulebaan op 1 M2 door Frank 123
23 August 2025, 20:01:18
Stalen rijtuigen van NS door Rob Moerkerken
23 August 2025, 19:40:15
Fleischmann Anna ombouw. door puntenglijder
23 August 2025, 19:34:08
Trix DXI van DC naar AC door wob
23 August 2025, 19:32:07
pantograaf vastzetten door zofman
23 August 2025, 19:21:17
Pfarrerwinkel bahn door Wim Vink
23 August 2025, 18:49:04
Bentheimer Eisenbahn, gisteren, vandaag en morgen. door lrrw
23 August 2025, 18:48:42
De Passage, een minimalistisch tentoonstellingsbaantje (H0) door barry1972
23 August 2025, 18:21:52
24e smalspoormodelbouwdagen 30 en 31 augustus 2025 bij Stoomtrein Katwijk Leiden door MOVisser
23 August 2025, 17:56:24
  

Auteur Topic: Pret met Arduino  (gelezen 59408 keer)

RudyB

  • Offline Offline
  • Berichten: 629
  • EMV
    • RudysModelRailway
Pret met Arduino 06 Automatische Dag-Nacht Cyclus met Schakelaar en LED
« Reactie #30 Gepost op: 17 January 2019, 13:25:08 »
In de zesde video gaan we een automatische dag-nacht sequencer maken, met een aan/uit schakelaar en een indicator LED op ons schakelpaneel. De dag en nacht tijden willen we kunnen instellen in seconden.

Link naar Fun with Arduino 06 Automatic Day & Night Cycle with on/off Switch



RudyB

  • Offline Offline
  • Berichten: 629
  • EMV
    • RudysModelRailway
Pret met Arduino 07 Dag / Nacht Cyclus met Meerdere Lichtgroepen, met Variatie
« Reactie #31 Gepost op: 20 January 2019, 12:08:58 »
Onze dag / nacht module van de vorige video werkt perfect, maar hij schakelt maar 1 lichtgroep. Op onze layout hebben we waarschijnlijk meerdere lichtgroepen ... huisjes, straatverlichting, een station of industrie. In deze video kijken we hoe we deze kunnen schakelen in een dag / nacht cyclus, maar natuurlijk niet allemaal tegelijk en ook zonder dat het eentonig wordt.

Link naar Pret met Arduino 07 Dag / Nacht Cyclus met Meerdere Lichtgroepen, met Variatie



tuurtje

  • Offline Offline
  • Berichten: 4695
Re: Pret met Arduino
« Reactie #32 Gepost op: 20 January 2019, 12:21:27 »
Hallo Rudy,

Kom dit nu pas tegen, echt real fun en goed uitgelegd voor de ouderen zoals ik  (y) (y) (y)


Groetjes


Arthur
Arthur is helaas in januari 2025 overleden

RudyB

  • Offline Offline
  • Berichten: 629
  • EMV
    • RudysModelRailway
Re: Pret met Arduino
« Reactie #33 Gepost op: 20 January 2019, 12:28:58 »

Dank voor je feedback Arthur, dat is fijn om te horen.

Haas67

  • Offline Offline
  • Berichten: 31
Re: Pret met Arduino
« Reactie #34 Gepost op: 20 January 2019, 22:29:24 »
Leuke serie Rudy!
Hopelijk gaat de serie nog verder de DCC richting op. Ben benieuwd!

RudyB

  • Offline Offline
  • Berichten: 629
  • EMV
    • RudysModelRailway
RudyB
« Reactie #35 Gepost op: 21 January 2019, 00:22:19 »
Bedankt voor de feedback 'haas67’. Waarschijnljk gaat in deze serie DCC niet aan bod komen, dat is qua code toch meer 'advanced'. Arduino software voor een DCC decoder (servo en/of accessory), voor een 'DCC sniffer' en voor een S88 bus is te downloaden op de software pagina van mijn blog (rudysmodelrailway). En natuurlijk bij Nico's arcomora.
« Laatst bewerkt op: 21 January 2019, 00:26:19 door RudyB »

bask185

  • Offline Offline
  • Berichten: 5009
Re: Pret met Arduino
« Reactie #36 Gepost op: 21 January 2019, 13:33:52 »
Rudy,

Ik zit zo ff te lezen en te kijken. Het ziet er wel leuk uit voor d'n beginner.

Het was ook al opgemerkt, maar ik zie nogal veel delay() voorkomen. Ik snap dat het voor dummies wel handig is voor een simpel dingetje maar ik vroeg me af. Ga je ook een aflevering maken waar je iets gaat multitasken? 3 functies ofzo parallel laten lopen, elk met een eigen interval zonder delay maar met millis()? En een simpel state machine'tje met een switch case ofzo?

Wat misschien voor jou ook welk leuk is, om voor deze doeleinden je eigen timer library te maken. De code in de lirary laat je dan weg voor de lezers. Maar het gebruik er van is misschien wel grappig. Ik programmeer voor m'n werk complexe machines in C en daarvoor had ik een simpele library gemaakt. Ik gebruik alleen maar een struct en een array en ik kan zo x aantal functies laten uitvoeren met een willekeurige interval.

Ik roep dan bijvoorbeeld aan:

start(TIMER_1,foo,500);

En functie foo() wordt elke 500ms uitgevoerd.

Aanvullend kon ik dan de interval veranderen en natuurlijk de timer stoppen. Het kan allemaal heel simpel gehouden worden zodat de dummies (no offense) onder ons ook makkelijk kunnen multi tasken en dingen automatiseren.

Met 13 + 6 I/O pinnen en een modeltreinbaan, is het denk ik goed mogelijk dat iemand misschien wel 3 afzonderlijke lichtcircuits wilt bedienen met verschillende tijden en dan nog bedenkt, goh een spoorweg overgang kan er ook nog wel bij.

Bas.
Train-Science.com
Train-Science github
It ain't rocket science ;-)

RudyB

  • Offline Offline
  • Berichten: 629
  • EMV
    • RudysModelRailway
RudyB
« Reactie #37 Gepost op: 21 January 2019, 17:26:36 »
Ja, natuurlijk gaan we binnenkort van de delay() afstappen. Voor de huidige sequencer was het gewoon lekker gemakkkelijk, maar zodra we een spoorwegovergang gaan maken, met knipperende LED's, een servo en sensors om de trein te detecteren, dan kan het knipperen van de LEDs niet meer met een delay(), omdat we dan meer te doen hebben.

RudyB

  • Offline Offline
  • Berichten: 629
  • EMV
    • RudysModelRailway
Pret met Arduino 08 User Interface met Serial.print()
« Reactie #38 Gepost op: 24 January 2019, 16:29:01 »
Onze manier van de dag/nacht tijd veranderen leek wel handig, met de #define helemaal bovenaan de code, maar je moet wel elke keer als je een andere cycle time wilt de code aanpassen en opnieuw uploaden. Kan dat misschien gemakkelijker?

Ja ... dat kan. We gaan een User Interface maken waarmee de cycle time 'on the fly' aangepast kan worden. Dat kan via hardware of via software. We gaan ze alletwee proberen. In deze video de eerste werkzaamheden ... text en variabelen naar het beeldscherm schrijven via Serial.print().

Link naar Fun with Arduino 08 User Interface met Serial.print()



Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Pret met Arduino
« Reactie #39 Gepost op: 24 January 2019, 22:26:45 »
Hoi RudyB,

Je hebt er nogal een dikke vette bug in geschreven ;) Preistertjes moeten nu 49,7 dagen wachten voor het weer licht is ;D Rekenen met literals kan een beetje tricky zijn.

Twee andere dingen,

- als je toch variabelen introduceert kunnen de macros ook weg. Krijg je eindelijk minder cryptische errors.
- je breekt nogal met de normale "Arduino stijl" door niet gebruik te maken van camelCaseVariabelen


Timo
Verzonden vanaf mijn desktop met Firefox

bask185

  • Offline Offline
  • Berichten: 5009
Re: Pret met Arduino
« Reactie #40 Gepost op: 25 January 2019, 08:23:20 »
@Timo
Die bug? Ik zie hem niet.

Als DAY_NIGHT_CYCLE_ON_OFF_PIN is ingedrukt (en dus LOW is) dan wordt  LIGHTS_PIN elke 180 seconde van state getoggled en LED_PIN gaat uit nadat je die knop uitzet en die delays zijn verlopen.

En er wordt niet gerekend met de literals. Die #defines geven alleen I/O namen aan en die int 'cycle_time is desondanks hij niet gewijzigd wordt, technisch gezien geen literal omdat het noch een const noch een #define is. Hij is veranderlijk.

En het is heel gebruikelijk om #defines te gebruiken om I/O pinnen aan te duiden. Dit vreet namelijk geen extra geheugen. En er kan niks mee gebeuren. De pre compiler vervangt al die #define namen door de constantes. Als je variabelen gaat toewijzen aan I/O dan gebruik je minimaal 1 byte per I/O pin.

@RubyB
Ik vind het opvallend dat je eigenlijk nu pas met variabelen komt. Ik zou dit zelf in les #1 behandelen en misschien ook alle logic operators en anders zou ik die in les #2 behandelen.

En waarom? Nu heb je net Serial.print() uitgelegd en delay() is ook al aan bod gekomen. Deze functies kunnen allemaal variabelen meenemen als argumenten. Vooral voor de print() die verscheidene soorten aan variabelen kan hebben, zou het handig te zijn om een string of een integer te kunnen manipuleren. En dan kan je ook andere dingen gaan doen zoals een potmeter uitlezen en diens waarde in een delay of print gooien.

Een goede arduino/C oefening zou zijn om met je arduino te rekenen en waardes op het scherm te dumpen zodat je ziet wat de arduino uitspuugt, zo kan je ook heel goed overflows en unsigned/signed waardes demonstreren.

Vooral als je straks Serial.Read() gaat behandelen, is het noodzakelijk dat je goed kan rekenen, want stel nou dat je cycle_time nu wilt instellen met de terminal? Dan moet je '1', '8' en '0' apart inlezen, er 48 of '0' van aftrekken, vermenigvuldigen met 100 of 10 en dan de boel bij elkaar optellen.

En dan zou ik voor les #3 dus functies in het algemeen behandelen zodat je ook meteen snapt wat print, read en delay zijn en wat ze doen en waar die () voor zijn en wat ze kunnen returnen.

Train-Science.com
Train-Science github
It ain't rocket science ;-)

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Pret met Arduino
« Reactie #41 Gepost op: 25 January 2019, 10:29:45 »
En er wordt niet gerekend met de literals. Die #defines geven alleen I/O namen aan en die int 'cycle_time is desondanks hij niet gewijzigd wordt, technisch gezien geen literal omdat het noch een const noch een #define is. Hij is veranderlijk.

En het is heel gebruikelijk om #defines te gebruiken om I/O pinnen aan te duiden. Dit vreet namelijk geen extra geheugen. En er kan niks mee gebeuren. De pre compiler vervangt al die #define namen door de constantes. Als je variabelen gaat toewijzen aan I/O dan gebruik je minimaal 1 byte per I/O pin.

Een stukje code:
#define ledPin 4
.
// allerlei andere statements
.
#define ledPin 13
Is volledig legale code. Echter na de laatste regel  wordt LedPin voortaan vertaald door 13.
Het gevolg kan dan zijn dat je programma totaal niet doet wat je verwacht. Het zoeken naar zo'n "fout" is beslist niet gemakkelijk.

Nog een stukje code:
const int ledPin = 4;
.
// allerlei andere statements
.
const int ledPin = 13;
Levert een foutmelding op van de compiler, omdat je een const niet mag veranderen. Je bent daarmee gewaarschuwd, dat je iets doet wat mogelijk niet wenselijk is.
Als je beide stukjes compileert, levert dat dezelfde hoeveelheid bytes in programmageheugen en geen ruimtegebruik bij de variabelen op in je microcontroller.
Daarom wordt er al geruime tijd in de Arduino-wereld aangeraden bij dit soort toekenningen const te gebruiken i.p.v. #define.

groet Cees
Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.

RudyB

  • Offline Offline
  • Berichten: 629
  • EMV
    • RudysModelRailway
Re: Pret met Arduino
« Reactie #42 Gepost op: 25 January 2019, 11:03:25 »
@Timo @Bas

Het plan is om in de volgende video iets te vertellen over (unsigned) int en long variabelen en hoe we de delay(cycle_time * 1000) , die nu niet doet wat je zou verwachten, aan de praat krijgen.
« Laatst bewerkt op: 25 January 2019, 11:40:13 door RudyB »

bask185

  • Offline Offline
  • Berichten: 5009
Re: Pret met Arduino
« Reactie #43 Gepost op: 25 January 2019, 12:20:05 »
Als je beide stukjes compileert, levert dat dezelfde hoeveelheid bytes in programmageheugen en geen ruimtegebruik bij de variabelen op in je microcontroller.
Oe dat wist ik niet, excuus.

Ik heb ff gecheckt met arduino, maar je kan een defined waarde ook geen waarde toewijzen. Als je doet #define x 5  en later x = 7; dan krijg je ook een compiler fout. Dus daarvoor maakt het niet uit wat je kiest.

Maar dan alsnog. Als je gewoon de syntax aanhoudt en hoofdletters gebruikt voor constantes dan zou je zeggen dat het bijna niet mis kan gaan. Als ik een regel code tik, heeft die regel een rede, een doel. Ik kan me nooit geen rede bedenken om ooit te tikken

#define LED_PIN 13
LED_PIN = 12; // wat moet dit nu doen?
Je ziet aan de syntax alleen al dat je een waarde in een constante probeert te proppen. Als je je bedenkt: "wat doet deze regel", dan moet je tot de conclusie komen dat je iets nutteloos doet. Maar goed, het maakt in dit voorbeeld niet uit of je een #define of een const int gebruikt, je krijgt in beide gevallen een compiler fout.

dit:
const int ledPin = 4;
.
// allerlei andere statements
.
const int ledPin = 13;
is trouwens een slecht voorbeeld omdat de compiler eerst al struikelt over het feit dat je 2x een variabele declareert met dezelfde naam dan dat je een const probeert te wijzigen. Als je hier geen const tikt, wordt de compiler ook al boos
const int ledPin = 4;
.
// allerlei andere statements
.
ledPin = 13;
illustreert het probleem beter. Maar er is een maar....

Ik had nog iets geprobeerd en daarmee een argument gevonden om geen const te gebruiken.
Wat zonder fouten compileert is de volgende code. Een lokale variabele, const of geen const, kan dezelfde naam hebben als een globale variabele.
const int x = 5;

void setup()
{
  const int x = 6; // compileert prima
}

void loop()
{

}

zodoende
const int x = 5;

void setup()
{
  int x = 6;

  x = 10; // kan gewoon
}

void loop()
{

}
compileert dit ook prima.

Ik heb nog een 2e argument om geen const te gebruiken.
In C++ weet ik het niet, maar bij ansi C heeft const bij lokaal gebruik in een functie body een compleet andere functie dan als een globale variabele. In Keil's C compiler kan je const in een functie gebruiken. Dit is dan een variabele die bij het 1e keer aanroepen van de functie een waarde krijgt, die je kan wijzigen en die zijn waarde niet verliest als de functie opnieuw wordt uitgevoerd.

voorbeeld:
void foobar()
{
  const int x = 5;

  x++;
  Serial.println(x); // 6,7,....16
}
Als je deze functie in je programma 10x aanroept, dan heeft x een waarde van 16. De eerste keer krijgt x 5 aangewezen en wordt opgehoogd met 1 en alle andere keren wordt hij alleen opgehoogd.

Dus daarom zie ik geen voordelen in het gebruik van const tov #define en wel nadelen.[/code]
« Laatst bewerkt op: 25 January 2019, 12:22:01 door bask185 »
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Pret met Arduino
« Reactie #44 Gepost op: 25 January 2019, 15:50:38 »
Even korte reactie want zit in België alleen op een mobiel
@Timo
En er wordt niet gerekend met de literals. Die #defines geven alleen I/O namen aan en die int 'cycle_time is desondanks hij niet gewijzigd wordt, technisch gezien geen literal omdat het noch een const noch een #define is. Hij is veranderlijk.
De macro en de int's inderdaad niet, maar 1000 is wel een literal. En aangezien het in een int past is het een signed int literal. De compiler pakt voor het rekenwerk altijd het grootste gebruikte type, niet groter! Voor int maal int literal een signed int dus. Maar de vermenigvuldiging past niet in een signed int! Overflow is het gevolg. En pas daarna vind de impliciete cast naar unsigned long plaats voor delay(). Waarna je dus een delay hebt van 47 dag....


Timo
Verzonden vanaf mijn desktop met Firefox