# 2 nappulaa koodi arduino

**URL:** https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012
**Category:** 🇫🇮 Elektroniikka ja ohjelmointi
**Created:** [29 January 2013 14:14 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012 "2013-01-29T14:14:11Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![sarvinen](https://f.ruuvi.com/letter_avatar_proxy/v4/letter/s/edb3f5/32.png) [@sarvinen](https://f.ruuvi.com/u/sarvinen)
#### Post date: [29 January 2013 14:14 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012/1 "2013-01-29T14:14:11Z")

</div>

Tämä on nyt todella typerä kysymys, mutta kun en itse saa pähkäillyksi…  
Eli miten menisi arduinossa koodi jossa on 2 nappulaa. Kun nappula yksi käy hetkellisesti painettuna, menee ledi päälle. Uudelleen saman nappulanpainamine ei tee mitään. Jos nappula 2 käy hetkellisesti painettuna meneee ledi pois päältä.

Ehdotuksia?

---

<div class="post-metadata">

### Author: ![Limba](https://f.ruuvi.com/letter_avatar_proxy/v4/letter/l/90ced4/32.png) [@Limba](https://f.ruuvi.com/u/Limba)
#### Post date: [29 January 2013 15:18 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012/2 "2013-01-29T15:18:21Z")

</div>

alusta initissä lehi haluttuun tilaan.

Loopissa tarkastele onko jompi kumpi nappi pohjassa ja muuta ledin tilaa.

Tee myös ehto sille, jos kumpikin nappi on pohjassa.

Tälläinen rakenne loop function sisään:

[code]if(nappi1 == 1) then  
{  
if(nappi2 == 1) then  
{  
Haluttu tila kun kumpikin nappi on pohjassa  
}  
else  
{  
Haluttu tila kun nappi1 on pohjassa  
}

}  
elsif (nappi2 == 1) then  
{  
Haluttu tila kun nappi2 on yksistään painettu  
}[/code]

---

<div class="post-metadata">

### Author: ![sarvinen](https://f.ruuvi.com/letter_avatar_proxy/v4/letter/s/edb3f5/32.png) [@sarvinen](https://f.ruuvi.com/u/sarvinen)
#### Post date: [29 January 2013 15:39 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012/3 "2013-01-29T15:39:08Z")

</div>

Muodostin nyt koodin tuon perusteella. Mutta eipä oikeen toimi. Oman erikoisuutensa tähän luo se, että käytössäni on msp430 jota ohjelmoin energia ohjelmalla.

Tässä muodostamani koodi:

[code]const int nappi1 = PUSH2; // the number of the pushbutton pin  
const int nappi2 = 6;  
const int ledPin = GREEN\_LED; // the number of the LED pin

void setup() {  
// initialize the LED pin as an output:  
pinMode(ledPin, OUTPUT);  
// initialize the pushbutton pin as an input:  
pinMode(nappi1, INPUT\_PULLUP);  
pinMode(nappi2, INPUT\_PULLUP);  
}  
void loop(){  
if(nappi2 == 1)  
{  
if(nappi1 == 1)  
{  
digitalWrite(ledPin, LOW);  
}  
else  
{  
digitalWrite(ledPin, HIGH);  
}

}  
else if (nappi1 == 1)  
{  
digitalWrite(ledPin, LOW);  
}  
}[/code]

---

<div class="post-metadata">

### Author: ![Tomin1](https://f.ruuvi.com/letter_avatar_proxy/v4/letter/t/a9a28c/32.png) [@Tomin1](https://f.ruuvi.com/u/Tomin1)
#### Post date: [29 January 2013 16:09 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012/4 "2013-01-29T16:09:51Z")

</div>

Jos voit käyttää keskeytyksiä (engl. interrupt), niin tuo loop vapautuisi muuhun käyttöön.  
[arduino.cc/en/Reference/AttachInterrupt](http://arduino.cc/en/Reference/AttachInterrupt)

Muokkaus: Katsoin tuota koodiasi. Tuo nappi1 == 1 ei oikein toimi, koska nyt testaat napin pinnin numeroa vasten etkä sitä pinnin tilaa. Tarvitset siihen digitalRead:in:  
[arduino.cc/en/Reference/DigitalRead](http://arduino.cc/en/Reference/DigitalRead)

---

<div class="post-metadata">

### Author: ![sarvinen](https://f.ruuvi.com/letter_avatar_proxy/v4/letter/s/edb3f5/32.png) [@sarvinen](https://f.ruuvi.com/u/sarvinen)
#### Post date: [29 January 2013 18:36 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012/5 "2013-01-29T18:36:12Z")

</div>

No juu, mutta siis kun haluaisin niin että painaessani nappia kerran, jäisi led palamaan kunnes toista nappia painettu. Nyt sain tällaisen koodin tehtyä, mutta led palaa vain silloin kun nappi on pohjassa. Kuinka tuo koodi pitää muokata, että se toimisi haluamallani tavalla?

[code]const int nappi1 = PUSH2; // the number of the pushbutton pin  
const int nappi2 = 6;

const int ledPin = GREEN\_LED; // the number of the LED pin

int nappitila1 = 0;  
int nappitila2 = 0;

void setup() {  
// initialize the LED pin as an output:  
pinMode(ledPin, OUTPUT);  
// initialize the pushbutton pin as an input:  
pinMode(nappi1, INPUT\_PULLUP);  
pinMode(nappi2, INPUT\_PULLUP);  
}  
void loop(){  
nappitila1 = digitalRead(nappi1);  
nappitila2 = digitalRead(nappi2);  
if(nappitila2 == HIGH)  
{  
if (nappitila1 == HIGH)  
{  
digitalWrite(ledPin, LOW);  
}  
else  
{  
digitalWrite(ledPin, HIGH);  
}

}  
else if (nappitila1 == HIGH)  
{  
digitalWrite(ledPin, LOW);  
}  
}[/code]

---

<div class="post-metadata">

### Author: ![Juchen](https://f.ruuvi.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Juchen](https://f.ruuvi.com/u/Juchen)
#### Post date: [29 January 2013 19:08 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012/6 "2013-01-29T19:08:57Z")

</div>

Voisit laittaa jonkunlaisen muuttujan, boolean tai bitti, jota vaihdat aina kun sytytät tai sammutat ledin. En ole varma voiko output pinnin tilaa lukea suoraan totuusarvona. sitten siltä pohjalta

jos ledi kiinni -\> sytytä jos napit tietyllä tavalla  
muuten jos ledi päällä -\> sammuta jos napit tietyllä tavalla

ja arduino energian kanssa kannattaa olla tarkkana että on piuhat oikeassa pinnissä koska niiden numerointi lähtee ykkösestä joka on virtapinni, itse käytän mieluummin 1\_2 jne.

---

<div class="post-metadata">

### Author: ![sarvinen](https://f.ruuvi.com/letter_avatar_proxy/v4/letter/s/edb3f5/32.png) [@sarvinen](https://f.ruuvi.com/u/sarvinen)
#### Post date: [29 January 2013 19:40 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012/7 "2013-01-29T19:40:10Z")

</div>

Kiitos Juchen! Sain nyt toimimaan haluamallani tavalla. Tässä typerä sotkuinen koodini:

[code]const int buttonPin = PUSH2; // the number of the pushbutton pin  
const int buttonPin2 = 7;  
const int ledPin = RED\_LED; // the number of the LED pin

// variables will change:  
int buttonState = 0; // variable for reading the pushbutton status  
int buttonState2 = 0;

int buttonpaalle = 0;  
int buttonpaalle2 = 0;  
void setup() {  
// initialize the LED pin as an output:  
pinMode(ledPin, OUTPUT);  
// initialize the pushbutton pin as an input:  
pinMode(buttonPin, INPUT\_PULLUP);  
pinMode(buttonPin2, INPUT\_PULLUP);  
}

void loop(){  
// read the state of the pushbutton value:  
buttonState = digitalRead(buttonPin);  
buttonState2 = digitalRead(buttonPin2);  
// check if the pushbutton is pressed.  
// if it is, the buttonState is HIGH:  
if (buttonState == LOW) {  
buttonpaalle = 1;// turn LED on:

}  
if (buttonpaalle == 1){  
digitalWrite(ledPin, HIGH);  
}  
if (buttonState2 == LOW) {  
buttonpaalle2 = 1;  
buttonpaalle = 0;  
}  
if (buttonpaalle2 == 1){  
digitalWrite(ledPin, LOW);  
}  
else {  
// turn LED off:  
digitalWrite(ledPin, LOW);  
}  
}[/code]

---

<div class="post-metadata">

### Author: ![Limba](https://f.ruuvi.com/letter_avatar_proxy/v4/letter/l/90ced4/32.png) [@Limba](https://f.ruuvi.com/u/Limba)
#### Post date: [29 January 2013 20:53 UTC](https://f.ruuvi.com/t/2-nappulaa-koodi-arduino/2012/8 "2013-01-29T20:53:54Z")

</div>

Toimiskahan se noin yksinkertaistettuna.  
Muuten tossa sun koodissa sammutettiin tuo ledi loopin lopussa.

[code] const int buttonPin = PUSH2; // the number of the pushbutton pin  
const int buttonPin2 = 7;  
const int ledPin = RED\_LED; // the number of the LED pin

```
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
int buttonState2 = 0;

int buttonpaalle = 0;
int buttonpaalle2 = 0;
void setup()
{
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);     
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT_PULLUP); 
  pinMode(buttonPin2, INPUT_PULLUP); 
}

void loop()
{
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState2 == LOW)
  {
    digitalWrite(ledPin, LOW);
  }
  else if (buttonState == LOW)
  {     
    digitalWrite(ledPin, HIGH);
  }
}[/code]
```
