Klopt wel.

Maar zo kun je wel laten zien dat er meerdere methoden mogelijk zijn om hetzelfde doel te bereiken.

Die had je beter initializeButton() ...

Of nog beter een member funktie. Al gaat dat voor hier wel wat te ver.


void setup()
{  Button1.setup(3, 9);
   Button2.setup(4,10);
   .. enz
}

[Bericht gewijzigd door deKees op (51%)]

Als je echt stoer bent gebruik je bit manipulation. Heb je geen for-loops of structs nodig en is heel veel compacter en sneller. Inputs op PB[0:5] en outputs op PC[0:5]. Als ik me niet vergis:


uint8_t oldState = 0;
uint8_t currentState = 0;
DDRC = 0b00111111;

while(1)
{
    currentState = (PINB & 0b00111111);
    PORTC ^= (currentState & ~(oldState));
    oldState = currentState;
    _delay_ms(100);
}

Op 1 januari 2020 20:49:58 schreef Deskinspin:
[...]

DRY; Don't Repeat Yourself. En de oplossing daarvoor heb ik al gegeven, dus die ga ik ook niet herhalen, want DRY.

Kennelijk heb ik ergens iets verkeerds gedaan waar je je aan stoort.
Dat spijt me oprecht.

Ik ben hier ook niet zo goed in, dus nogmaals sorry.

Op 1 januari 2020 22:12:04 schreef Deskinspin:
Als je echt stoer bent gebruik je bit manipulation. Heb je geen for-loops of structs nodig en is heel veel compacter en sneller. Inputs op PB[0:5] en outputs op PC[0:5]. Als ik me niet vergis:

Het optimaliseren van de code om het sneller te laten gaan moet je uitstellen totdat het nodig is. Het optimaliseren om de boel leesbaarder te maken, of de code kleiner /dat/ is WEL prettig om te doen.

In het onderhavige geval heeft deKees een nette manier getoond om de boel compacter te maken waardoor het leesbaarder wordt. In de code van TS kan makkelijk een gecopieerde 3 van "button3" in de het deel voor button4 blijven staan. Lastig te zien. Ik ben er pas nog ingestonken. 4x vrijwel identieke code, dus copy-paste en dan de benodigde woordjes veranderen. 1 van de 6 die veranderd moesten worden vergeten. En dan werkt het ineens niet. (Ik zag het niet, deKees wel.).

Op 2 januari 2020 09:25:41 schreef Boudie:
[...]

Kennelijk heb ik ergens iets verkeerds gedaan waar je je aan stoort.
Dat spijt me oprecht.

Ik ben hier ook niet zo goed in, dus nogmaals sorry.

Dit was niet aan jouw bedoeld als kritiek. Sorry. Ik wijdde uit over het geen waar je op wees. Je commentaar was namelijk volledig terecht.

Op 2 januari 2020 09:40:39 schreef rew:
[...]Het optimaliseren van de code om het sneller te laten gaan moet je uitstellen totdat het nodig is. Het optimaliseren om de boel leesbaarder te maken, of de code kleiner /dat/ is WEL prettig om te doen.

In het onderhavige geval heeft deKees een nette manier getoond om de boel compacter te maken waardoor het leesbaarder wordt. In de code van TS kan makkelijk een gecopieerde 3 van "button3" in de het deel voor button4 blijven staan. Lastig te zien. Ik ben er pas nog ingestonken. 4x vrijwel identieke code, dus copy-paste en dan de benodigde woordjes veranderen. 1 van de 6 die veranderd moesten worden vergeten. En dan werkt het ineens niet. (Ik zag het niet, deKees wel.).

Mijn commentaar was ook bedoeld met een knipoog en om te laten zien dat er meerdere manieren zijn en dat het vooral ook veel korter kan. Persoonlijk vind ik zijn code nog steeds onnodig lang en complex. Mijn laatste code was inderdaad zwaar overgeoptimaliseerd en overcompact voor de use case. Er is een mooi midden wat beknopt genoeg is, maar toch (of juist daardoor) toch heel leesbaar is; namelijk wat ik als eerste heb gepost onderaan pagina 1. Maar goed, dat is mijn mening. TS moet gewoon gebruiken wat hij het meest leesbaar en begrijpbaar vindt. Ik moet werken aan de toon die ik zet wanneer ik schrijf.

Ik vind het wel grappig. Vier compleet verschillende oplossingen voor hetzelfde probleem. Met elk zo hun voor- en nadelen.

- De stoere methode is super compakt in source code en in uiteindelijke code, maar voor de meeste arduino programmeurs volkomen onbegrijpelijk. Werkt ook alleen als de pinnen allemaal binnen dezelfde port zitten, en geeft ook strakke beperkingen aan de koppeling Switch naar Led.

- De oplossing met array variabelen is al beter leesbaar en nog steeds erg kompakt. Geeft wel vrijheid in de keuze van pinnen.

- De oplossing met structs is al iets groter, maar de eerste methode die je in een library zou kunnen zetten.

- En de oplossing van TS om alle stukken volledig uit te schrijven is dan weer beter te begrijpen als je net begin met programmeren. Maar is gevoelig voor programmeerfouten. En geeft de meeste code.