ik heb reeds met een variant van C geprogrammeerd en het gebruik van enums werd daar zeer vaak gebruikt, is het mogelijk om het zelfde in Arduino te doen?
Kan prima,
echter ik heb wat bezwaren tegen de semantiek van je voorbeeld.
Een Buttonstate zou mijn insziens
enum ButtonState { Pressed, Released, Pressing, releasing, Unknown }
moeten zijn.
Verder lastButtonState, en timesButtonPushed, klinkt meer als variabelen
Naamgeving is cruciaal om code over 6 maanden te begrijpen
robtillaart:
Kan prima,
echter ik heb wat bezwaren tegen de semantiek van je voorbeeld.
Een Buttonstate zou mijn insziens
enum ButtonState { Pressed, Released, Pressing, releasing, Unknown }
moeten zijn.
Verder lastButtonState, en timesButtonPushed, klinkt meer als variabelen
Naamgeving is cruciaal om code over 6 maanden te begrijpen
De reden waarom ik trachtte het zo te doen is omdat ik 4 buttons heb, en ik tel het aantal keer een specifieke knop is ingedrukt.
Ik behoud graag de blokken omdat het in mijn ogen overzichtelijker is, dat ligt dan aan de persoonlijke smaak. Niet?
ik sluit me aan bij robtillaart. De semantiek van je voorbeeld is bedenkelijk.
Niet alleen de enums zelf (een state die ButtonState of timesButtonPushed noemt?) maar zeker ook
int bState[MAX_BUTTONS][ButtonState];
Wat bedoel je dan met bv
bState[FirstButton,ButtonState]=1;
robtillaart:
@!#$%^& new forum copy functionality ...
Och ja lastXXXXState gebruik ik ook heel vaak maar dan wel als laatste state. Dan kan je iets doen als
for(state=0;state<lastXXXXstate;state++){ do something}
om bijvoorbeeld alles te wissen. Extra states bij voegen geeft dan geen code verandering.
Jantje
Ja, dat werkt naar behoren. Het probleem nu is dat alleen de button aangesloten aan pin 0 werkt om de led van de ene kleur naar de andere te veranderen.
Een concreet voorbeeld:
Ik heb 1 RGB ledje waarvan blauw en groen zijn aangesloten aan mijn UNO board.
Ik heb daarbij 4 buttons geplaatst, ook aangesloten aan mijn UNO board aan pin 1, 2, 3 4 respectievelijk.
In mijn IDE heb ik een array gemaakt als volgt:
int pinButtons[4] = { 1, 2, 3, 4 };
//Ik heb i.p.v int ook al byte geprobeerd.
De struct, setup en loop volgen daarna.
buttons[MAX_BUTTONS];
//Dit heb ik veranderd naar buttons[sizeof(pinButtons)];
Alleen de button aangesloten aan pin 0 werkt naar behoren, de rest doet het niet.
Hier is mijn code, voor 1 button constructief werkend naar de 4 buttons die ik op het einde wil hebben (Daarom zijn er alvast 4 pins in de array). Ook moet ik even melden dat ik de JustPressed en JustReleased er van tussen heb gelaten om het probleem met pin 0 te fixed (Wat me niet is gelukt):
const int ledBlue = 10;
const int ledGreen = 11;
const int ledRed = 12;
const int pinRelay = 7;
int pinButtons[4] = { 1, 2, 3, 4 };
struct buttonInfo {
int pin;
int state;
int prevState;
unsigned long count;
} bInfo[sizeof(pinButtons)];
void setup() {
pinMode(ledBlue, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(pinRelay, OUTPUT);
for(int i = 0; i < sizeof(pinButtons); i++) {
pinMode(bInfo[i].pin, INPUT);
}
digitalWrite(ledBlue, HIGH);
digitalWrite(ledGreen, LOW);
digitalWrite(pinRelay, HIGH);
}
void loop() {
for(int i = 0; i < sizeof(pinButtons); i++) {
bInfo[i].state = digitalRead(bInfo[i].pin);
bInfo[i].prevState = bInfo[i].state;
if(bInfo[i].prevState == LOW) {
digitalWrite(ledBlue, LOW);
digitalWrite(ledGreen, HIGH);
digitalWrite(pinRelay, LOW);
}
if(bInfo[i].prevState == HIGH) {
digitalWrite(pinRelay, HIGH);
digitalWrite(ledGreen, LOW);
digitalWrite(ledBlue, HIGH);
}
}
nicoverduin:
Dan ben ik wel nieuwsgierig naar de gehele code.... Ik pleur mijn buttons vrijwel altijd in een tabel. Dus laat maar zien
Wat bedoel je met "een tabel"? Kan hier ook wat dieper op in gaan, indien mogelijk?
robtillaart:
pas op pin 1 is je Serial waar je ook mee upload...
ik zou daar zeker een andere voor nemen
(assuming you're using UNO/MEGA)
Dus de pins in mijn array aanpassen naar een waarde boven de 1? Dus 2, 3, 4, 5 respectievelijk en dan mijn buttons ook in die volgorde aansluiten?
Ja, ik gebruik een UNO.
Volgens mij klopt het dat alleen pin 0 werkt. En dat is dan alleen nog toeval:
a) je hebt een tabel gemaakt met pin nummers
b) die pinnummers worden nimmer gezet in binfo en hebben toevallig allemaal de waarde 0 (RAM kan onvoorspelbaar zijn zonder initialisatie)
c) Je leest vervolgens de pinnen via bInfo[].pin. En dus elke keer alleen pin 0
En zo werkt het naar behoren. Dank je wel: Jantje, Rob en Nico voor de hulp.
Ik heb geleerd dat ik pins beter apart kan definiëren en ze daarna in mijn array moet stoppen voor zulke toestanden (enkel pin 0 werkt) te vermijden. Daarbovenop heb ik de struct geleerd.