Ik probeer iets te maken maar het lukt mij gewoon niet om dit toegepast te krijgen. Ik heb het voorbeeld statechangedetection bekeken maar het lukt mij gewoon niet..
Ik heb een 'deur staat detectie' systeem dat doormiddel van lichtinval kan zeggen of een deur open of dicht is.
Het probleem is nu dat het programma gewoon loopt en dus telkens zijn stand zegt zonder dat er iets aan de staat veranderd. bv:
Code: [Select]
deur open
deur open
deur open
...
wanneer de staat dan wel aanpast ziet het er zo uit:
Code: [Select]
deur open
deur open
deur open
deur gesloten
deur gesloten
deur gesloten
...
Nu probeer ik om een statechangedetection toe te passen zodat hij eenmaal zegt 'deur open' wanneer open en 'deur gesloten' wanneer hij sluit en niet telkens alles blijft herhalen. Alleen lukt dit echt niet, ik begin dan zelf methodes te zoeken om dat te maken maar dat slaagt dan helemaal nergens op. Ik heb het voorbeeld met die led bekeken maar heb momenteel het inzicht in programmeren nog niet om dit dan met mijn LDR te doen.
Dit is mijn code:
Code: [Select]
int sensorReading;
int LDR = A4;
int delay1 = 1000;
leuk begin.
als je geprint hebt dat de deur open is moet je een flag zetten dat je deuropengeprint hebt.
als deur dicht is geprint, dan de deuropengeprint op false zetten
shooter:
leuk begin.
als je geprint hebt dat de deur open is moet je een flag zetten dat je deuropengeprint hebt.
als deur dicht is geprint, dan de deuropengeprint op false zetten
Hoe kan ik een flag zetten, is dat een functie of moet ik dat via een andere weg doen?
Hoi Tom, welkom in het Nederlandstalige gedeeelte.
Wat een gevaarlijke naam heb je gekozen.
Wat je nu als programma hebt is inderdaad erg basis.
In je programma heb je maar 2 mogelijkheden:
Je print een "open" bericht, of je print een "gesloten" bericht.
Je hebt niet de mogelijkheid geen bericht te printen, terwijl je dat wel wil kunnen doen.
Een deel van het probleem is dat je alleen maar kijkt of de deur open is.
Als de deur niet open is, dan neem je aan dat ie dicht is.
Dat klinkt wel als een veilige aanname, maar is dat ook zo ?
Je hebt schijnbaar ergens iets gehoord over 'state machine', maar daar is geen spoor van te vinden in je huidige code.
Een flag is niet iets dat je uit een library moet halen of zo.
Het is een hulpopslag waarin je kunt bijhouden wat je allemaal al gedaan hebt.
In dit geval is het zelfs voldoende als je er de kleinst mogelijke ruimte voor reserveert, een enkele bit.
Je gebruikt al wat opslag, namelijk voor de pin waar je de LDR aan hebt hangen, en voor de vertraging die je wil gebruiken.
Die voor de LDR is zelfs een verwijzing naar een verwijzing, wel grappig.
Om dit voor mekaar te krijgen moet je meer controleren dan alleen wat je LDR ziet.
Je moet ook controleren wat ie daarnet zag.
Er zijn nog wel veel meer tips te geven, maar laten we eerst eens kijken of je al begrijpt welke richting dit op gaat.
O ja.
Als je wat veranderd hebt en het hier wil laten zien, dan word het wel op prijs gesteld (lees: van je verwacht) dat je die code in [code] [/code] tags zet.
Dat voorkomt allerlei mogelijke problemen, en is voor helpers handiger om mee te werken.
MAS3:
Hoi Tom, welkom in het Nederlandstalige gedeeelte.
Wat een gevaarlijke naam heb je gekozen.
...
Hoi MAS3,
Bedankt voor je hulp!
Ik zal zeker het vervolg mijn programma hier posten als bijdrage aan de community.
Ik heb inderdaad die statechangedetection functie uit 'voorbeelden' binnen het Arduino platform leren kennen maar ik snap niet hoe ik deze toepas op mijn code van mijn LDR..
Bovenstaand programma is één van de vele versies die ik heb proberen maken, ik heb er ook gemaakt waarbij ik dat met die statechange probeer te gebruiken maar dat lukt mij echt totaal niet. Kan jij misschien tonen hoe ik dat toepas op mijn code?
Ik zie liever wat jij al geproduceerd hebt.
Dat weggooien kan altijd nog, maar is wel zonde van de tijd die je er al in hebt gestoken.
Als je die code hier laat zien, mag je er gerust van uitgaan dat we je niet (meteen ) gaan uitlachen of op andere manier gaan afkraken.
Maar we kunnen dan hopelijk wel zien waar je allemaal al mee bezig bent geweest en welke kant jij op neigt te gaan.
Zo kunnen we met je mee gaan die kant op, of je vertellen dat dat de verkeerde kant uit gaat en je proberen bij te sturen.
Daar leer je meer van volgens mij en heb je dus in de toekomst ook veel meer aan.
Een stukje voorbeeldcode wat werkt maar waar je zelf nog geen jota van snapt, heb je helemaal niets aan als je er eens iets aan wil gaan veranderen in de toekomst.
Ik zie liever wat jij al geproduceerd hebt.
Dat weggooien kan altijd nog, maar is wel zonde van de tijd die je er al in hebt gestoken.
Als je die code hier laat zien, mag je er gerust van uitgaan dat we je niet (meteen ) gaan uitlachen of op andere manier gaan afkraken.
Maar we kunnen dan hopelijk wel zien waar je allemaal al mee bezig bent geweest en welke kant jij op neigt te gaan.
Zo kunnen we met je mee gaan die kant op, of je vertellen dat dat de verkeerde kant uit gaat en je proberen bij te sturen.
Daar leer je meer van volgens mij en heb je dus in de toekomst ook veel meer aan.
Een stukje voorbeeldcode wat werkt maar waar je zelf nog geen jota van snapt, heb je helemaal niets aan als je er eens iets aan wil gaan veranderen in de toekomst.
Mijn probeersels van vandaag heb ik niet apart opgeslagen maar ik heb een hoop 'eigen' methodes geprobeerd waarmee ik niet bekwam wat ik wou.
Uiteraard heb ik meer aan zelf proberen i.p.v. iemand anders het voor mij laten doen maar momenteel zit ik vast. Ik heb te weinig inzicht op het vlak van programmeren om te zeggen ("Zo ga ik dat proberen oplossen"). Ik weet wat ik wil bereiken en ik weet dat ik iets nodig heb dat de verandering ziet en de rest negeert maar hoe ik dat moet doen weet ik niet. Ik weet nu dat ik een flag moet proberen zetten of uitleg moet zoeken over die statechangedetection.
In mijn eerste antwoord zei ik al dat je niet alleen maar moet kijken of de deur open staat.
Dat gaf je zelf al aan.
Je wil alleen dat er geschreven word als er niets veranderd is.
Dus moet je niet alleen kijken hoe het er nu voor staat, maar ook hoe het de keer ervoor was.
Wanneer die twee niet gelijk zijn, dan moet er geschreven worden.
Je kunt dit op een aantal verschillende manieren doen, en ik vind het interessant om te zien waar je uit eindelijk op uit gaat komen.
Op het risico dat ik op een oude grammofoonplaat ga lijken die maar steeds het zelfde stukje herhaalt:
Schrijf op wat je allemaal wenst in je programma.
Doe dat op een stuk papier dat ruim genoeg is dat je er nog dingen aan toe kunt voegen.
Bekijk elk stukje dat je zo opschrijft eens een paar keer en bedenk hoe je alleen dat stukje zou kunnen aanpakken.
Het woord "stukje" vervang ik nu door het woord "probleem".
Deel elk probleem op in kleinere problemen.
Als je dat vaak genoeg doet, word elk probleem al eigenlijk geen probleem meer omdat het gemakkelijk op te lossen is.
Als die die oplossingen allemaal hebt, hoef je ze alleen nog samen te vegen om tot je code te komen.
(zo ziet het er uit als je code in code tags zet).
Dat is het hart van je sketch.
Jakkes, er zit een delay in, maar voor jouw voorbeeld is dat voorlopig nog OK.
Probeer hier eens of je het zelfde kunt bereiken door twee keer een test te doen, in plaats van een enkele keer zoals nu.
De test is waar je kijkt hoe het er met de LDR voor staat.
Dit vraag ik je met een reden, dus probeer het eens gewoon.
Hiermee ga je niet ineens je wens vervullen.
Als je laat zien waar je dan op uit komt, zal ik proberen een volgende stap te zetten.