Wat is er verkeerd met mijn code? Wanneer ik de code in m'n Uno laad stuurt deze onmiddelijk mn lamp1 uit. Ik gebruik 5V relais deze moet ik LAAG sturen om ze te doen optrekken.
const int speler1 = 0;
const int speler2 = 1;
const int speler3 = 2;
const int lamp1 = 5;
const int lamp2 = 6;
const int lamp3 = 7;
const int zoemer = 9;
const int juist = 10;
boolean tellen = false;
int punten1 = 0;
int punten2 = 0;
int punten3 = 0;
int var = 0;
const int zero = 0;
boolean done;
void setup() {
// put your setup code here, to run once:
for (int pinNumber = 0; pinNumber <= 2; pinNumber++) {
pinMode(pinNumber, INPUT);
}
for (int pinNumber = 5; pinNumber <= 9; pinNumber++) {
pinMode(pinNumber, OUTPUT);
}
pinMode(10, INPUT);
done = true;
Serial.begin(9600);
digitalWrite(lamp1, HIGH);
digitalWrite(lamp2, HIGH);
digitalWrite(lamp3, HIGH);
}
//void lampAan(int lamp) {
//done = false;
//digitalWrite(lamp, HIGH);
//tone(zoemer, 200, 1000);
//delay(1000);
//tone(zoemer, 200, 1000);
//digitalWrite(lamp, LOW);
//done = true;
//Serial.println(done);
//delay(1000);
//}
void loop() {
// put your main code here, to run repeatedly:
if ((digitalRead(speler1) == HIGH) && (done == true)) {
Serial.println("1 HIGH");
var = 10;
}
else if ((digitalRead(speler2) == HIGH) && (done == true)) {
Serial.println("2 HIGH");
var = 20;
}
else if ((digitalRead(speler3) == HIGH) && (done == true)) {
Serial.println("3 HIGH");
var = 30;
}
switch (var) {
case 10:
//do something when var equals 1
done = false;
digitalWrite(lamp1, LOW);
Serial.println("lamp1 brandt");
tone(zoemer, 200, 1000);
Serial.println("tijd start");
delay(10000);
Serial.println("tijd om");
tone(zoemer, 200, 1000);
digitalWrite(lamp1, HIGH);
if (digitalRead(juist) == HIGH) {
delay(1000);
punten1 += 10;
Serial.println(punten1);
}
done = true;
var = 0;
break;
case 20:
//do something when var equals 2
done = false;
digitalWrite(lamp2, LOW);
tone(zoemer, 200, 1000);
delay(10000);
tone(zoemer, 200, 1000);
digitalWrite(lamp2, HIGH);
if (digitalRead(juist) == HIGH) {
delay(1000);
punten2 += 10;
Serial.println(punten2);
}
done = true;
var = 0;
break;
case 30:
done = false;
digitalWrite(lamp3, LOW);
tone(zoemer, 200, 1000);
delay(10000);
tone(zoemer, 200, 1000);
digitalWrite(lamp3, HIGH);
if (digitalRead(juist) == HIGH) {
delay(1000);
punten3 += 10;
Serial.println(punten3);
}
done = true;
var = 0;
break;
default:
// if nothing else matches, do the default
// default is optional
break;
}
}
Die zijn lastiger te vinden, wat je hebt de commentaren van het voorbeeld dat je ergens hebt opgedoken niet aangepast aan je huidige code.
Speler 1 is in de getoonde code in het voordeel, want als die wordt het eerst bekeken, en zal dan als enige knopdrukker worden verwerkt door jouw code.
Dus een eventuele gelijktijdige knopdruk door anderen zal in het voordeel van drukker 1 worden beslecht.
Niet eerlijk.
Natuurlijk is de kans daarop erg klein, maar wel aanwezig.
Even verderop is drukker1 opnieuw in het voordeel.
Dit kun je niet helemaal voorkomen, maar je kan de kans hierop wel een heel stuk verkleinen door de code slimmer te maken.
Je gebruikt de seriële verbinding al voor allerlei informatie.
Wat zie je daar voorbij komen ?
En de relais, dat zijn toch zeker relais modules, of niet ?