PONG?
mein unten angeführter Code funktioniert nicht richtig, kann irgendwer den fehler findenn es handelt sich um eine einfache version des spieles pongs das mit 8 leds und zwei tastern gespielt wird:
int led[8] = { 2, 3, 4, 5, 6, 7, 8, 9 };
int button[2] = { 10, 11 };
#define PRESSED LOW
#define OFF 0
#define ON 1
#define WAIT_TIME 1000
int status = 0;
unsigned long starttime = 0;
int i = 0;
void setup() {
for (int i = 0; i < 2; i++) {
pinMode(button[i], INPUT_PULLUP);
}
for (int i = 0; i < 8; i++) {
pinMode(led[i], OUTPUT);
}
}
void loop() {
if ((i == 8) && (digitalRead(button[1]) == PRESSED)) status = 1;
else if((digitalRead(button[1]) == PRESSED) && i!=8) status = 2;
if ((i == -1) && (digitalRead(button[0]) == PRESSED)) status = 0;
else if((digitalRead(button[0]) == PRESSED) && i!=-1) status = 2;
if (millis() - starttime > WAIT_TIME) {
switch (status) {
case 0:
digitalWrite(led[i], HIGH);
digitalWrite(led[i - 1], LOW);
i++;
if (i == 9) status = 2;
break;
case 1:
digitalWrite(led[i], HIGH);
digitalWrite(led[i + 1], LOW);
i--;
if (i == -2) status = 2;
break;
case 2:
for(int j = 0; j < 8; j++)
{
digitalWrite(led[j], HIGH);
}
break;
}
starttime = millis();
}
}
1 Antwort
`i` wird standardmäßig auf 0 gesetzt, es wird bei dir im Code aber nicht sichergestellt, dass dies der Ausgangswert für i ist.
Wenn `i` gleich 8 oder -1 ist, ändert sich der Status nur, wenn der entsprechende Knopf gedrückt wird (gewollt?).
In Fall 1 wird der Status nur geändert, wenn i gleich 8 ist, was wahrscheinlich nicht das gewünschte Verhalten ist. In Fall 2 wird der Status auf 2 geändert, ohne dass i geändert wird.
Ich bin grad zwar nur am Handy, versuchs aber mal so:
```cpp
int led[8] = { 2, 3, 4, 5, 6, 7, 8, 9 };
int button[2] = { 10, 11 };
#define PRESSED LOW
#define OFF 0
#define ON 1
#define WAIT_TIME 1000
int status = 0;
unsigned long starttime = 0;
int i = 0;
void setup() {
for (int i = 0; i < 2; i++) {
pinMode(button[i], INPUT_PULLUP);
}
for (int i = 0; i < 8; i++) {
pinMode(led[i], OUTPUT);
}
}
void loop() {
if ((i == 8) && (digitalRead(button[1]) == PRESSED)) {
status = 1;
}
else if((digitalRead(button[1]) == PRESSED) && i!=8) {
status = 2;
}
if ((i == -1) && (digitalRead(button[0]) == PRESSED)) {
status = 0;
}
else if((digitalRead(button[0]) == PRESSED) && i!=-1) {
status = 2;
}
if (millis() - starttime > WAIT_TIME) {
switch (status) {
case 0:
digitalWrite(led[i], HIGH);
digitalWrite(led[i - 1], LOW);
i++;
if (i == 9) {
status = 2;
}
break;
case 1:
digitalWrite(led[i], HIGH);
digitalWrite(led[i + 1], LOW);
i--;
if (i == -2) {
status = 2;
}
break;
case 2:
for(int j = 0; j < 8; j++) {
digitalWrite(led[j], HIGH);
}
break;
}
starttime = millis();
}
}
```
Naja du aktualisiert die Leuchten dementsprechend nicht um das Spiel zurück zu setzen (status aber auf 0)
es geht ja aus status 0 raus in status 1 wenn button 1 gedrückt ist
das funktioniert ja noch aber dann bei button 0 gehts sofort aus status 2
Ja. Du aktualisierst die LED-Leuchten dementsprechend nicht, so wie es aussieht
kann mans irgendwie ohne reset machen oder muss ichs so machen weil wills gerne so einfach wie möglich
naja das nach rechts gehts ja hald status null es geht button 1 funktioniert das es dann rüber geht aber wenns dann bei butzon 0 is hängts