Pages: [1] 2   Go Down
Author Topic: problem med 4 knapper  (Read 2918 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 smiley

* knap_problem.ino (1.1 KB - downloaded 16 times.)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

virker ikke.  smiley-neutral
alle LED'erne er tændte og blinker en gang imellem.
Logged

Denmark
Offline Offline
Edison Member
*
Karma: 35
Posts: 1057
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Denmark
Offline Offline
Edison Member
*
Karma: 35
Posts: 1057
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 (17.19 KB, 181x257 - viewed 32 times.)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Virker ikke smiley-cry smiley-cry
jeg har vedhæftet hvordan det ser ud.


* foto-1.JPG (1461.69 KB, 2048x1536 - viewed 58 times.)
Logged

Denmark
Offline Offline
Edison Member
*
Karma: 35
Posts: 1057
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

"Virker ikke" er ikke særligt beskrivende

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

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Denmark
Offline Offline
Edison Member
*
Karma: 35
Posts: 1057
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hvordan ved jeg at de vender rigtigt?
Logged

Denmark
Offline Offline
Edison Member
*
Karma: 35
Posts: 1057
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.


Logged

Denmark
Offline Offline
Edison Member
*
Karma: 35
Posts: 1057
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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-grin

Code:
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
  }

}
« Last Edit: January 03, 2014, 10:41:52 am by Erni » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1] 2   Go Up
Jump to: