Go Down

Topic: problem med 4 knapper (Read 3538 times) previous topic - next topic

Antonps

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:
Code: [Select]
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 :)

JaneWay

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

Antonps

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

Erni

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)

Antonps

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

Antonps

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

Erni

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

Antonps

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

Erni

"Virker ikke" er ikke særligt beskrivende

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

Antonps

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

Erni

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

Antonps

hvordan ved jeg at de vender rigtigt?

Erni

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.



Erni

#13
Jan 03, 2014, 04:40 pm Last Edit: Jan 03, 2014, 04:41 pm by Erni Reason: 1
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)
Code: [Select]
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  :D

Code: [Select]
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
 }

}

Antonps

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

Go Up