problem med 4 knapper

jeg forsøgte at lave et kredsløb med 4 knapper og 4 LED'er.
så når jeg trykkede en knap tænder der en LED.
mit program ser såden her ud:

const int switchPin1 = 8;
const int switchPin2 = 9;
const int switchPin3 = 10;
const int switchPin4 = 11;
const int ledPin1 = 2;
const int ledPin2 = 3;
const int ledPin3 = 4;
const int ledPin4 = 5;
int switchState1 = 0;
int switchState2 = 0;
int switchState3 = 0;
int switchState4 = 0;
void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(switchPin1, INPUT);
  pinMode(switchPin2, INPUT);
  pinMode(switchPin3, INPUT);
  pinMode(switchPin4, INPUT);
}
void loop() {
  switchState1 = digitalRead(switchPin1);
  switchState2 = digitalRead(switchPin2);
  switchState3 = digitalRead(switchPin3);
  switchState4 = digitalRead(switchPin4);
  if (switchState1 == HIGH) {
    digitalWrite(ledPin1, HIGH);
  }
  if (switchState2 == HIGH) {
    digitalWrite(ledPin2, HIGH);
  }
  if (switchState3 == HIGH) {
    digitalWrite(ledPin3, HIGH);
  }
  if (switchState4 == HIGH) {
    digitalWrite(ledPin4, HIGH);
  }
  else {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
  }
}

håber at i kan hjælpe :slight_smile:

knap_problem.ino (1.1 KB)

Hvis det er meningen at knap 1 skal tænde LED 1 ved første tryk og slukke ved næste osv. er der flere problemer.
Du sætter konstant hver knaps "huske" variabel = med kanppens tilstand (altså "0" eller "1"). Det betyder at LEDerne kun er tændt når der er trykket på en eller flere knapper. Der ud over vil den "else" der er til sidst bevirke at der kun er "hul" igennem hvis der er trykket på knap 4 ("else" er bundet til din sidste "if" hvor du tester knap 4). Er der ikke trykket på knap 4 vil alle udgange blive sat til "0", også selv om f.eks. knap 1 er trykket ned.

prøv istedet det her efter setup (switchstat variablerne skal måske være af type "Boolean" i stedet for "int"):

void loop() {
digitalWrite(ledPin1, switchState1);
digitalWrite(ledPin2, switchState2);
digitalWrite(ledPin3, switchState3);
digitalWrite(ledPin4, switchState4);
if (digitalRead(switchPin1) == HIGH) {
switchState1 =!switchState1; // !=toggel
}
if (digitalRead(switchPin2) == HIGH) {
switchState2 =!switchState2; // !=toggel
}
if (digitalRead(switchPin3) == HIGH) {
switchState3 =!switchState3; // !=toggel
}
if (digitalRead(switchPin4) == HIGH) {
switchState4 =!switchState4; // !=toggel
}

}

Prøv også at se på det her for at undgå "prel" fra knaptrykket: http://arduino.cc/en/Tutorial/Debounce

virker ikke. :expressionless:
alle LED'erne er tændte og blinker en gang imellem.

Hvordan er dine knapper forbundet til Arduino.

De blinkende LEDs tyder på at de ikke er forbundet til noget når de ikke er aktiveret (de flyder elektrisk set)

Mine knapper er forbundet til jord og digital pin; 8, 9, 10 og 11.

Hov, glemte at skrive at de er forbundet til jord via en 220ohm modstand

Hvis jeg forstår dig rigtigt har du forbundet knapperne som i vedhæftede diagram.
Det er ikke nogen god ide. Tænk på at hvis knappen ikke er aktiveret, er pin 8 ikke forbundet til noget, og den er derfor ikke hverken HIGH eller LOW, eller måske er den. Det kaldes en flydende tilstand.

Prøv at forbinde diine knapper ligesom her:

http://arduino.cc/en/tutorial/button

knap.jpg

Virker ikke =( =(
jeg har vedhæftet hvordan det ser ud.

"Virker ikke" er ikke særligt beskrivende

Hvad er den positive række, på højre side af dit breadboard forbundet til ?

ups, nu har jeg forbundet højre side, men alle LED'erne lyser hele tiden.

Hvis dine knapper er ligesom mine tilsvarende vender de forkert.
Lav en test med et multimeter eller en LED+modstand.

hvordan ved jeg at de vender rigtigt?

Når du trykker på knappen skal de to tilledninger være sluttet, når du slipper skal de ikke være forbundet.
Som sagt lav en test med et multimeter eller en LED+modstand.

Det vil måske være en ide at starte med en knap. Når du har fået den til at virke kan du udvide til 4.

Denne sketch er med kun een knap, og bruger ikke så mage komponenter.

Denne linje betyder at den indbyggede pull-up modstand bliver aktiveret, du behøver altså ikke at forbinde en ekstern modstand. (det svare til at forbinde en modtand fra pin 8 til +5V)

 pinMode(switchPin1, INPUT_PULLUP);

Og så har jeg brugt pin13, der jo har en LED forbundet istedet.
Du skal så bare forbinde din knap fra pin 8, til Gnd, så kan du også teste hvordan den skal vende :smiley:

const int switchPin1 = 8;
const int ledPin1 = 13;
int switchState1 = 0;


void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(switchPin1, INPUT_PULLUP);
}

void loop() {
  digitalWrite(ledPin1, switchState1);

  if (digitalRead(switchPin1) == LOW) {
    switchState1 =!switchState1; // !=toggel 
  }

}

det for LED'en til at lyse og når jeg trykker på knappen slukker den. :fearful:

Og hvad sker når du trykker igen?

altså når jeg holder knappen inde er LED'en slukket, og når jeg ikke holder den inde lyser LED'erne.

Meningen med sketchen var at hvert tryk på knappen skulle skifte skifte fra tændt til slukket.

Måske er det kontaktprel der driller som JaneWay var inde på tidligere i tråden.

Prøv omk du har mere held med denne sketch, der netop tager højde for dette

LED'en er slukker hele tiden også når jeg trykker på knappen =(

Det lyder da utroligt at så simpelt et projekt skulle give så mange problemer.

Har du fulgt vejledningen:

The circuit:

  • LED attached from pin 13 to ground
  • pushbutton attached from pin 2 to +5V
  • 10K resistor attached from pin 2 to ground

I stedet for knappen prøv med en ledning i pin 2 og en i 5V, og lad dem røre hinanden et kort øjeblik.
Hvis det ikke virker tror jeg efterhånden der er et eller andet helt galt, som jeg ikke kan gennemskue.