2 nappulaa koodi arduino

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?

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]

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]

Jos voit käyttää keskeytyksiä (engl. interrupt), niin tuo loop vapautuisi muuhun käyttöön.
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

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]

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.

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]

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]