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ä.
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);
}
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);
}
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]