Doel:€250.00
Donaties:€50.00

Per saldo:€-200.00

Steun ons nu!

Laatst bijgewerkt
op 03-01-2024

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Geluid NS Mat'46 vs NS Mat'54 door Rob Bennis
Vandaag om 21:54:12
Engelse wagon uit 1930 opgegraven in Antwerpen door willem2
Vandaag om 21:52:45
NS GLY omspuiten en opschriften door Rob Ellerman
Vandaag om 21:45:55
De Hondsrugbaan door cor_b
Vandaag om 21:40:07
welk jaar ging Marklin OVP voor wagons van blauw naar wit door Railman
Vandaag om 21:36:50
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
Vandaag om 21:22:18
Mijn eerste H0-modeltreinbaan in aanbouw door puntenglijder
Vandaag om 21:15:13
LokSound 4 decoders, files verbeteren (voor Roco b.v. TEE RAm, NS2400, etc) door mamory
Vandaag om 21:13:06
Bouw van materieel 40 treinstellen door Rob Bennis
Vandaag om 21:09:04
Gebruik je Arduino zonder te "programmeren" ;) door Menno
Vandaag om 20:58:29
30 maart Modelspoorbeurs Houten & HCC Kennisdag door basjuh1981
Vandaag om 20:54:43
US diorama in H0 door basjuh1981
Vandaag om 20:52:48
Raadplaatje door eemstede
Vandaag om 20:43:38
Hengelo in 1981-1982, maar dan anders: Kassenberg in N door 1200blauw
Vandaag om 20:32:41
Onlangs gespot - gefotografeerd, de foto's door eemstede
Vandaag om 20:31:17
Welke Vallejo kleur voor drijfstangen van een DB stoomlocomotief? door Ronald69
Vandaag om 20:00:39
Toon hier je nieuwe (model-) spooraanwinst(en)... door arnout
Vandaag om 19:53:27
Punt- en hartstukken door Klaas Zondervan
Vandaag om 19:41:21
MARDEC, de Multifunctionele ARduino dcc DECoder. door bord4kop
Vandaag om 19:34:37
De (3d) knutsels van Ronald. door gdh
Vandaag om 19:22:56
Piko NS 2015 stroomafname probleem door Ben
Vandaag om 19:08:30
Bauarbeiten im gange door ruudns
Vandaag om 18:50:26
HSM D1715 door vpeters1984
Vandaag om 17:34:25
Beekdaelen in H0 door Stieven76
Vandaag om 17:17:41
Al mijn goede ideeën... door Monobrachius
Vandaag om 17:10:33
Ombouw/Pimpen Bolle neuzen door bollen neus
Vandaag om 15:58:15
Kleine Baan in H0 (≤ 0.5m²) door Jack Black (NS1220)
Vandaag om 15:06:14
U-vorm beperkte ruimte (H0 C-rails) door Jelmer
Vandaag om 14:58:04
Onlangs gespot - gefotografeerd, de links door Jeroen Water
Vandaag om 14:33:00
N spur scenery elementen maken van gips of klei? door Dave.......
Vandaag om 14:30:06
  

Auteur Topic: Zonder fouten een Arduino programmeren  (gelezen 16002 keer)

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Zonder fouten een Arduino programmeren
« Reactie #45 Gepost op: 20 maart 2020, 12:26:16 »
Leuk die Duff's device ;D

millis() komt inderdaad nog met wat overhead om het atomic te houden. En inderdaad, je kunt gewoon een cast doen als je af kunt met minder bytes ;D Al met al vind ik de kleine performanceoverhead het meer dan waard om gebruikersgemak (= code schrijven performance ;D) er voor terug te krijgen.

En let erop, de 8-bit Arduino's hebben geen DIV of MUL instructie. Vandaar dat ze normaal kostbaar zijn als het geen macht van 2 is. Vandaar mijn opmerking over de if(!(_1ms % 10). Maar goed, die kun je vervangen door if(_1ms == 10).


Timo
Verzonden vanaf mijn desktop met Firefox

meino

  • Offline Offline
  • Berichten: 2088
Re: Zonder fouten een Arduino programmeren
« Reactie #46 Gepost op: 20 maart 2020, 13:28:14 »
Duff's device, daar had ik inderdaad nog nooit van gehoord. Uit 1983, toen zat ik nog diep in mainframes (BAL,Cobol etc). Maar het is ook interessant wat er over de performance gezegd wordt. Destijds, in 1983, was de C compiler nog vrij simpel, alleen de K&R variant, later met GNU C en uitgekookte optimalisatie, werd dat anders. Bijvoorbeeld het gebruik van register voor variabelen. Uit de tijd dat ik met GNU C en performance bezig was, bleek uit de testen dat het gebruik van register niet nodig was en meestal contraproductief werkte, omdat je daarmee de mogelijkheden van de optimalisator beperkte.

Groet Meino
« Laatst bewerkt op: 20 maart 2020, 21:36:06 door meino »
A clean desk is a sign of an empty mind

Kranenberg
De CanBus komt naar Kranenberg

meino

  • Offline Offline
  • Berichten: 2088
Re: Zonder fouten een Arduino programmeren
« Reactie #47 Gepost op: 20 maart 2020, 13:40:19 »
Nu we toch bezig zijn, hebben jullie dit wel eens gelezen: http://yosefk.com/c++fqa/defective.html

Groet Meino
A clean desk is a sign of an empty mind

Kranenberg
De CanBus komt naar Kranenberg

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Zonder fouten een Arduino programmeren
« Reactie #48 Gepost op: 20 maart 2020, 15:10:45 »

 ;D
Verzonden vanaf mijn desktop met Firefox

PaulRoman

  • Offline Offline
  • Berichten: 165
Re: Zonder fouten een Arduino programmeren
« Reactie #49 Gepost op: 20 maart 2020, 18:08:20 »
Mede hobbyist,
...
Ik heb voor zowel beginnende als gevorderde programmeurs een korte driedelige cursus geschreven in Nederlands (In Jip en Janneke taal) over het programmeren van een Arduino. De hoofddoelen van deze cursus zijn om jou te helpen in het voorkomen van fouten, je te helpen met het opzetten met ingewikkelde processen en om je te helpen om je code zowel netjes, simpel als leesbaar te houden.
...

Hallo heren,

Was dit draadje niet ooit begonnen voor de beginnende en de gevorderde programmeur ? Ik denk dat de beginnende inmiddels wel is afgehaakt !  ;D
Jammer voor Bas die zich zoveel moeite heeft getroost. (Al ben ik het met zijn zienswijze lang niet altijd eens).

Groet,

Paul
Schäßburg an der Kokel

bask185

  • Online Online
  • Berichten: 4007
Re: Zonder fouten een Arduino programmeren
« Reactie #50 Gepost op: 20 maart 2020, 19:17:23 »
Deel 3 komt nog, dat is pas de bom  (y)
Train-Science.com
Train-Science github
It ain't rocket science ;-)

bask185

  • Online Online
  • Berichten: 4007
Re: Zonder fouten een Arduino programmeren
« Reactie #51 Gepost op: 31 maart 2020, 14:46:19 »
Ik ben bijna klaar met deel 3 maar aanvullend op deel 2 heb ik een functionerende AHOB geprogrammeerd voor gebruik met (nu nog) 2 sporen. Het werkt natuurlijk ook met 1 spoor en je kan er ook zelf een AKI van maken, dat zou niet moeilijk moeten zijn.

https://github.com/bask185/ahob

Ik heb hem alleen getest met de seriele monitor en led pin 13 en met een draadje heb ik inputs getriggerd. Alles lijkt goed gaan, er is geen onvoorspelbaar gedrag.

Het programma reageerde in grote lijnen precies zoals verwacht. Er zat geen fout in de flow van de drie state-machines.

Ik had natuurlijk een paar kleine foutjes. De servo's stuurde ik verkeerd om aan (1 en 2 omgewisseld), ze bleven atlijd open. Ik was ergens een digitalRead vergeten dus ik tikte if(input == false) ipv if(digitalRead(input) == false; Ik kon met de teksten op de seriele montitor echter in no-time deze bugs opsporen. Maar er waren verder geen grote dealbreakers.

Het coderen heeft me denk ik net een uur gekost.

Treinen kunnen beide kanten op beide sporen rijden. Volgorde doet er niet toe. Het gaat ook goed als de bomen al openen en er komt een nieuwe trein binnen, dan gaan de bomen weer dicht vanaf het punt waar ze gebleven waren.

Ik zou zeggen: test het uit, bekijk de source code en met name de state machines (railCrossing.cpp, readTrack1.cpp en readTrack2.cpp) (en bouw een werkende AHOB in je modelbaan  :P).

Overzicht van de IO:
2 detector1 INPUT_PULLUP
3 detector2 INPUT_PULLUP
4 detector3 INPUT_PULLUP
5 detector4 INPUT_PULLUP
6 servoPin1 OUTPUT
7 servoPin2 OUTPUT
10 led1 OUTPUT
12 blinkLed1 OUTPUT
13 blinkLed2 OUTPUT

Als iemand vragen heeft, hoor ik het graag.

Mvg,

Bas

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

Martin Hornis

  • Offline Offline
  • Berichten: 1413
Re: Zonder fouten een Arduino programmeren
« Reactie #52 Gepost op: 31 maart 2020, 16:02:26 »
Is er een filmpje van?

a) Bij gewoon dubbelspoor kun je met 4 detectors volstaan.
b) Maar bij dubbel enkelspoor heb je minimaal 6 detectors nodig.

Heb jij het systeem voor a) gemaakt?
Märklin K-rails met boogstralen > 500 mm; NS-lichtseinen met cijferbak: 4, 6 en 8 in één bak; iTrain; Intellibox I; OC32;
eigen treindetectiesysteem aangesloten op OC32;
controleprogramma voor OC32.

bask185

  • Online Online
  • Berichten: 4007
Re: Zonder fouten een Arduino programmeren
« Reactie #53 Gepost op: 31 maart 2020, 17:04:54 »
Mijn implementatie: Elk spoor heeft 2 detectors. Een trein kan van beide kanten aankomen. Het maakt niet uit welke van de detector als eerst wordt getriggerd. De andere detector wordt dan gebruikt om te te bepalen of de trein er voorbij is. De trein moet eerst naar deze detector toe rijden, vanaf dat punt moet de detector minimaal 10 seconde vrij zijn geweest om het blok weer vrij te geven. Deze tijd kan je natuurlijk aanpassen.

Dit heeft misschien het nadelige effect dat de bomen relatief laat open gaan. Die 10 seconde zit er meer tussen voor als de detector kleiner is dan de grootste as-afstanden. De tijd kan ook makkelijk naar 0 toe.

Wat je zou ook kunnen doen, en ik denk dat jij dit ook bedoelt, je kan op de overgang zelf een detector maken. Dan kan je de buitenste 2 detectors parallel aansluiten op 1 van de 2 arduino ingangen en dan doe je de middelste aansluiten op de andere ingang. Dat zou ook moeten werken en het maakt niet hoe je ze op de ingangen aansluit. Maar bijwerking: als de middelste sensor dus 10 seconde verbroken is, en de trein is nog net aan in contact met een van de buitenste sensors dan zouden de bomen weer dicht gaan. Je kan die 10 seconde ophogen tot max 255 om er zeker van te zijn dat je trein er voorbij is

De 2 sporen hebben geen afhankelijkheden van elkaar. Zolang 1 van de sporen zegt, 'ik ben nu bezet' dan sluit de overgang. Als beide sporen zeggen: 'ik ben niet meer bezet' dan gaan de bomen weer open. De overgang zelf en de bezetmeldingen zijn 3 parallele processen.

Als je (of iemand anders) nog een verzoeknummer heb, kunnen we altijd wat regelen. Ik kan de software sws ook geschikt maken voor een AKI.

Overigens de sluit/open tijd van de bomen instelbaar in config.h. De open en sluit posities van de servo's zijn ook daar instelbaar. De servo's delen alleen nog wel dezelfde posities op het moment. Als servo 1 van 10 naar 100 graden draait dan doet servo 2 dat ook.

Mvg,

Bas

PS.
Ik zelf nog geen overgang gebouwd. De software stuurt serieel feedback over alles wat het doet. Zo kon ik bevestigen dat het goed werkt desondanks ik nog geen servo daadwerkelijk heb aangestuurd. Ik kan eventueel een filmpje maken van de seriele monitor, maar je kan ook zelf het programma in een arduino stoppen en de detectors nabootsen met een draadje.
« Laatst bewerkt op: 31 maart 2020, 17:07:20 door bask185 »
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Martin Hornis

  • Offline Offline
  • Berichten: 1413
Re: Zonder fouten een Arduino programmeren
« Reactie #54 Gepost op: 01 april 2020, 00:19:58 »
Een overwegschakeling voor dubbel enkelspoor behoort er uit te zien zoals in de bijlage staat. De uitgangen 300 en 302 stellen de overweg in werking. De geheugenschakelingen 301 en 303 "onthouden" dat de trein op de overweg (contacten 01 en 04) is geweest. Uitgang 10 is het overwegsignaal dat de lampen, bellen en slagbomen aanstuurt.
« Laatst bewerkt op: 01 april 2020, 00:21:32 door Martin Hornis »
Märklin K-rails met boogstralen > 500 mm; NS-lichtseinen met cijferbak: 4, 6 en 8 in één bak; iTrain; Intellibox I; OC32;
eigen treindetectiesysteem aangesloten op OC32;
controleprogramma voor OC32.

Eric B

  • Offline Offline
  • Berichten: 6810
  • NS tijdperk III (a)b/c
    • Obdam in h0
Re: Zonder fouten een Arduino programmeren
« Reactie #55 Gepost op: 01 april 2020, 08:30:43 »
Wow krijg ik me daar even een flashback naar de TI PM550 met program terminal ... Bedankt Martin  ;D
Fotodijkje en fotodiorama
Obdam
Als alles meeloopt hebben we morgen een optocht.

bask185

  • Online Online
  • Berichten: 4007
Re: Zonder fouten een Arduino programmeren
« Reactie #56 Gepost op: 01 april 2020, 10:36:12 »
Dit is zo verwarrend  ??? Van alle talen in de wereld (NL, Chinees, C, assembly, arabisch) krijg ik net de enige taal voor me die ik niet kan behappen, Logic Ladder Diagram. Chinees kan ik tenminste nog in Google translate gooien  ;D

Ik heb misschien elektrotechniek gestudeerd maar van logic ladder diagrammen snap ik echt niks. Ik vind het echt heel knap dat mensen er ook maar iets mee kunnen maken.

Ik kan opmaken dat je 6 detectors heb 00 t/m 05 en dat 01 en 04 de middelste zijn? Maar hoe het nu precies werkt, is me echt een mysterie? Betekent |/| hier 'niet'

Ik kan ook niet helemaal opmaken of je nu wel of niet hebt begrepen wat ik bedoelde ??? Ik dacht dat ik het vrij duidelijk uitlegde ???

Mvg,

Bas

EDIT:

Ik heb de state-diagrams toegevoegd waarmee ik de code grotendeels gegenereerd heb. Werkt zoals in de beschrijving van mn vorige post. als in wacht positie eerst sw1 gemaakt is, dan wordt sw2 in de gaten gehouden. Als sw2 gemaakt is, wordt er gewacht totdat deze niet meer gemaakt is. De trein is er dan voorbij. Sw3 en Sw4 werken hetzelfde. Beide blokken vertellen de overweg met 2 globale variabelen of er een trein is of niet.
« Laatst bewerkt op: 01 april 2020, 10:47:55 door bask185 »
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Martin Hornis

  • Offline Offline
  • Berichten: 1413
Re: Zonder fouten een Arduino programmeren
« Reactie #57 Gepost op: 01 april 2020, 12:49:19 »

Citaat
Betekent |/| hier 'niet'
Ja: een verbreekcontact.
Komt een waarheidstabel je bekend voor?

Nu ik er even over nadenk, besef ik dat dit schema voor volledige detectie geldt -> zoals het Märklin-systeem.
« Laatst bewerkt op: 01 april 2020, 14:04:56 door Martin Hornis. Reden: aanvulling »
Märklin K-rails met boogstralen > 500 mm; NS-lichtseinen met cijferbak: 4, 6 en 8 in één bak; iTrain; Intellibox I; OC32;
eigen treindetectiesysteem aangesloten op OC32;
controleprogramma voor OC32.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Zonder fouten een Arduino programmeren
« Reactie #58 Gepost op: 01 april 2020, 13:03:56 »
Op zich zijn ladder diagrammen niet zo lastig. Je moet het vooral vergelijken met een schema met echte schakelaars en gloeilampen/relais (tri-state/float/zweven bestaat niet, ofwel iets niet aansturen betekend uit). Echt 1 op 1 de relais techniek die het verving. Links heb je de voedingsrail en rechts GND (of andere voedingsrail). Vervolgens ga je er van boven naar beneden per circuitje doorheen.

-| |- is een NO knop (of relais) contact
-|/|- is een NC knop (of relais) contact
-( )- is de lamp/relais

In de basis dus erg simpel. Alleen als het complex wordt dan wordt het snel minder overzichtelijk.

@Martin Hornis Het lijkt me alleen een beetje complex voor wat het doet... Waarom niet direct 300 en 302 als geheugen gebruiken? Maar komt misschien vooral dat ik even mis wat de andere 2 ingangen (per helft) doen.


Timo
Verzonden vanaf mijn desktop met Firefox

bask185

  • Online Online
  • Berichten: 4007
Re: Zonder fouten een Arduino programmeren
« Reactie #59 Gepost op: 01 april 2020, 13:35:47 »
Ja die ken ik van digitale techniek. OR en AND poorten, pulsentellers, flip-flops dat vond ik wel leuk om te doen. Ik heb ooit een digitale wekker er mee ontworpen, kreeg er een 9.6 voor met natuurkunde  (y)

Ik snap het hele punt niet meer van die LLD behalve om mij te laten zien hoe volgens jou de ahob zou moeten werken. Het voelt voor mij ook een beetje als mosterd na de maaltijd. Ik ben er al klaar mee, ik heb in details uitgelegd hoe mijn implementatie werkt omdat je het schijnbaar niet helemaal snapt, dat kan, niks mis mee. En vervolgens krijg ik een LLD voor m'n neus van een of ander programma dat waarschijnlijk hetzelfde doet als de mijne??? Je geeft ook niet echt concreet antwoord op de vraag of je m'n implementatie nu wel of niet snapt? Ik vermoed van wel, maar we lopen hier dus helemaal langs elkaar heen.

Ik heb slechts een Arduino programma gepost die een ahob met servomotors en met ledjes kan aansturen en ik heb uitgelegd hoe die werkt. Mijn voornaamste reden is om mijn programmastructuur en werkwijze te demonstreren. De 2e reden is om andere mensen simpelweg een werkend ahob programma kado te geven. Dat zijn mijn bedoelingen.

Mvg,

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