Hoi Natasja.
Ik vind het jammer dat men nogal snel verleid is om een code op te duiken en dan te proberen die code te hacken om m te laten doen wat je wil.
Heel vaak lukt dat niet, omdat de hacker niet weet met welk idee de originele schrijver de code heeft gebouwd (en uiteraard het gebrek aan ervaring).
Hoe goed is je Italiaans, lees je dat vloeiend ?
Zo niet, dan raad ik je aan om de eigenwijze commentaren in het Italiaans eens te vertalen naar het Nederlands (voor jezelf) of het Engels (om zoveel mogelijk mensen te bereiken in het geval je het ooit gaat publiceren).
Gisteren heb ik een nieuw Engels werkwoord geleerd: "to obfuscate".
Dat is dat men iets heel moeilijk laat lijken door er zoveel mogelijk ingewikkelde termen tegenaan te gooien.
Bij deze code is dat door een pin aan een drukknop uit te lezen, en dan te kijken of het de hexadecimale waarde 0x00 heeft.
Want dat ziet er wel erg indrukwekkend uit.
Maar het is precies hetzelfde als kijken of het 0 (nul) is, of LOW.
De maker van dit hele zwakke excuus voor een voorbeeld maakt zich daar dus schuldig aan, en dat spreekt al boekdelen.
De code die je hier laat zien, bestaat uit meerdere functies die worden aangeroepen.
3 van die functies behandelen het menu (en dat is alweer een discutabele werkwijze, want dat kan veel eenvoudiger en overzichtelijker).
Nadat het menu voor de zoveelste keer werd afgebeeld op je LCD, wordt er gekeken of er op een of andere enter of select knop wordt gedrukt.
Die knop word P genoemd, er zal vast een Italiaans woord zijn waarvan de eerste letter met een P begint en dat overeen komt met "enter" of "select".
Wanneer er inderdaad op de P knop werd gedrukt, dan word dit opgeslagen.
Nu kan aan de hand van deze opgeslagen informatie de gekozen actie worden uitgevoerd.
Maar daarmee houd de code op.
Er is door het menu geteld, en daarna is er geregistreerd dat de keuze is gemaakt.
Maar wat er daar verder mee gedaan moet worden, zie ik er niet in staan.
Dus dit voorbeeld is een zeer omslachtige en inefficiënte wijze om een menu te maken, maar verder niets.
Jij moet dan iets gaan doen met de gemaakte keuze, en je kan zien dat er een keuze gemaakt is, omdat er is opgeslagen dat de P knop werd ingedrukt.
De myDFPlayer word nooit aangeroepen.
Want de enige keer dat die er in staat, is de regel die is uitgeschakeld door er een commentaarregel van te maken.
In die regel staan vaste waardes ingevuld, en dat is heel onhandig en kan ook anders.
Wanneer je dat voor mekaar hebt, dan moet je ook nog voorkomen dat ie blijft hangen in het steeds maar weer afspelen van een bestand dat eenmaal gekozen is.
En dat kun je voor mekaar krijgen door te vergeten dat je hebt gezien dat de P knop werd ingedrukt, nadat je de daarbij behorende actie eenmaal in gang hebt gezet.
Echt, dit is een ongelofelijk monster van een voorbeeld, en de maker ervan moet een harde straf krijgen.
Als je in het bovenste stuk van het commentaar kijkt, dan zie je staan wat die myDFPlayer verwacht om een bestand af te spelen.
Ik vermoed dat je dat zelf hebt geschreven, vanwege de foutjes in de Engelse tekst die duiden op Nederlandse invloed.
Het eerste getal dat er meegegeven moet worden, is het getal dat staat voor de folder, het 2e getal staat voor het bestand in die folder.
Wanneer je je menu wat dat betreft wil laten werken, dan moet je dus als eerste de waarde van je teller meegeven.
Dan krijg je dus dit:
myDFPlayer.playFolder(menu, 2);
Verder dus vergeten dat de P knop werd ingedrukt, en bovenstaande alleen uitvoeren als die P knop gezien is.
void loop() {
changeMenu();
dispMenu();
if t_butP { // Dit wordt uitgevoerd als t_butP niet nul is
myDFPlayer.playFolder(menu, 2); // Speel het bestand af
t_butP = 0; // Maak t_butP weer nul
} // Klaar met het uitvoeren van iets dat van t_butP afhankelijk moet zijn
}
Dit moet doen wat jij voor ogen had, en dit is hoe je code overzichtelijk en leesbaar maakt.
De commentaren zijn nu een hulp in plaats van een partij moeilijkdoenerij.
Dat menu ga ik niet voor je herschrijven, maar die aanpak slaat echt helemaal nergens op en meer ga ik er ook niet meer over zeggen.
Succes met de volgende stappen.