Arduino programozás segítség

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Arduino programozás segítség

Hozzászólás Szerző: kapu48 »

Gondol át újra az egészet!
Mert most minden olyan else ág mindig végrehajtódik, ahol nincsen megnyomva a gomb.
GITTER55
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2024. február 7. szerda, 11:31

Re: Arduino programozás segítség

Hozzászólás Szerző: GITTER55 »

Üdv! Segítséget szeretnék kérni! Arduino megea 2560, két nyomómbbal szervó vezérlés. (Vasútmodell váltó vezérlés) Egy nyomógom-párral tökéletesen működik. Megpróbáltam kiterjeszteni két nyomógomb-párra, de a fordításnál állandóan hibaüzenetet kapok. Már minden tőlem telhetőt kipróbáltam, de nem tudom megszüntetni a problémát. Az eredeti (működi kód):
#include <Servo.h> // add servo library
#define sw1_pin 5
#define sw2_pin 6
Servo myservo; // create servo object to control a servo

volatile boolean sw1 = false;
volatile boolean sw2 = false;

uint8_t sw1ButtonState = 0;
uint8_t sw2ButtonState = 0;

uint8_t lastsw1ButtonState = 0;
uint8_t lastsw2ButtonState = 0;

void setup() {
pinMode(sw1_pin, INPUT_PULLUP);
pinMode(sw2_pin, INPUT_PULLUP);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {

checkIfSw1ButtonIsPressed();
checkIfSw2ButtonIsPressed();

if( sw1){
sw1 = false;
myservo.write(75);
delay(15);
}
else if( sw2){
sw2 = false;
myservo.write(105);
delay(15);
}

// waits for the servo to get there
}

void checkIfSw1ButtonIsPressed()
{
sw1ButtonState = digitalRead(sw1_pin);

if (sw1ButtonState != lastsw1ButtonState)
{
if ( sw1ButtonState == 0)
{
sw1=true;
}
delay(50);
}
lastsw1ButtonState = sw1ButtonState;
}

void checkIfSw2ButtonIsPressed()
{
sw2ButtonState = digitalRead(sw2_pin);

if (sw2ButtonState != lastsw2ButtonState)
{
if ( sw2ButtonState == 0)
{
sw2=true;
}
delay(50);
}
lastsw2ButtonState = sw2ButtonState;
}
GITTER55
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2024. február 7. szerda, 11:31

Re: Arduino programozás segítség

Hozzászólás Szerző: GITTER55 »

A kiterjesztett verzió:
#include <Servo.h>;

Servo myservo1, myservo2, myservo3;

const int sw1_pin = 22;
const int sw2_pin = 23;
const int sw3_pin = 24;
const int sw4_pin = 25;


volatile boolean sw1 = false;
volatile boolean sw2 = false;
volatile boolean sw3 = false;
volatile boolean sw4 = false;


uint8_t sw1ButtonState = 0;
uint8_t sw2ButtonState = 0;
uint8_t sw3ButtonState = 0;
uint8_t sw4ButtonState = 0;


uint8_t lastsw1ButtonState = 0;
uint8_t lastsw2ButtonState = 0;
uint8_t lastsw3ButtonState = 0;
uint8_t lastsw4ButtonState = 0;


void setup() {
pinMode(sw1_pin, INPUT_PULLUP);
pinMode(sw2_pin, INPUT_PULLUP);
pinMode(sw3_pin, INPUT_PULLUP);
pinMode(sw4_pin, INPUT_PULLUP);

myservo1.attach(2); // attaches the servo on pin 9 to the servo object
myservo1.attach(3);
myservo1.attach(4);

}

void loop() {


checkIfSw1ButtonIsPressed();
checkIfSw2ButtonIsPressed();


if( sw1){
sw1 = false;
myservo1.write(60);

delay(15);
}
else if( sw2){
sw2 = false;
myservo1.write(105);

delay(15);
}

// waits for the servo to get there
}

void checkIfSw1ButtonIsPressed()
{
sw1ButtonState = digitalRead(sw1_pin);

if (sw1ButtonState != lastsw1ButtonState)
{
if ( sw1ButtonState == 0)
{
sw1=true;
}
delay(50);
}
lastsw1ButtonState = sw1ButtonState;
}

void checkIfSw2ButtonIsPressed()
{
sw2ButtonState = digitalRead(sw2_pin);

if (sw2ButtonState != lastsw2ButtonState)
{
if ( sw2ButtonState == 0)
{
sw2=true;
}
delay(50);
}
lastsw2ButtonState = sw2ButtonState;
}

checkIfSw3ButtonIsPressed(); // Itt jelzi a problémát!!!
checkIfSw4ButtonIsPressed();


if( sw3){
sw3 = false;
myservo2.write(60);
myservo3.write(60);
delay(15);
}
else if( sw4){
sw4 = false;
myservo2.write(105);
myservo3.write(105);
delay(15);
}

// waits for the servo to get there


void checkIfSw3ButtonIsPressed()
{
sw3ButtonState = digitalRead(sw3_pin);

if (sw3ButtonState != lastsw3ButtonState)
{
if ( sw3ButtonState == 0)
{
sw3=true;
}
delay(50);
}
lastsw3ButtonState = sw3ButtonState;
}

void checkIfSw4ButtonIsPressed()
{
sw4ButtonState = digitalRead(sw4_pin);

if (sw4ButtonState != lastsw4ButtonState)
{
if ( sw4ButtonState == 0)
{
sw4=true;
}
delay(50);
}
lastsw4ButtonState = sw4ButtonState;
}

Ha valaki tud, kérem segítsen!!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Arduino programozás segítség

Hozzászólás Szerző: kapu48 »

Igy lefordul! Ha csak ennyi volt a baj?

Kód: Egész kijelölése

//A kiterjesztett verzió:
#include <Servo.h>

Servo myservo1, myservo2, myservo3;

const int sw1_pin = 22;
const int sw2_pin = 23;
const int sw3_pin = 24;
const int sw4_pin = 25;


volatile boolean sw1 = false;
volatile boolean sw2 = false;
volatile boolean sw3 = false;
volatile boolean sw4 = false;


uint8_t sw1ButtonState = 0;
uint8_t sw2ButtonState = 0;
uint8_t sw3ButtonState = 0;
uint8_t sw4ButtonState = 0;


uint8_t lastsw1ButtonState = 0;
uint8_t lastsw2ButtonState = 0;
uint8_t lastsw3ButtonState = 0;
uint8_t lastsw4ButtonState = 0;


void setup() {
  pinMode(sw1_pin, INPUT_PULLUP);
    pinMode(sw2_pin, INPUT_PULLUP);
pinMode(sw3_pin, INPUT_PULLUP);
  pinMode(sw4_pin, INPUT_PULLUP);

  myservo1.attach(2); // attaches the servo on pin 9 to the servo object
  myservo1.attach(3);
  myservo1.attach(4);

}

void loop() {


  checkIfSw1ButtonIsPressed();
  checkIfSw2ButtonIsPressed();


  if( sw1){
    sw1 = false;
    myservo1.write(60);

    delay(15);
  }
  else if( sw2){
    sw2 = false;
    myservo1.write(105);

    delay(15);
  }

// waits for the servo to get there
}

void checkIfSw1ButtonIsPressed()
{
  sw1ButtonState = digitalRead(sw1_pin);

  if (sw1ButtonState != lastsw1ButtonState)
  {
    if ( sw1ButtonState == 0)
    {
      sw1=true;
    }
    delay(50);
  }
  lastsw1ButtonState = sw1ButtonState;
}

void checkIfSw2ButtonIsPressed()
{
  sw2ButtonState = digitalRead(sw2_pin);

  if (sw2ButtonState != lastsw2ButtonState)
  {
    if ( sw2ButtonState == 0)
    {
      sw2=true;
    }
    delay(50);
  }
  lastsw2ButtonState = sw2ButtonState;
//}

  checkIfSw3ButtonIsPressed(); // Itt jelzi a problémát!!!
  checkIfSw4ButtonIsPressed();


  if( sw3){
    sw3 = false;
    myservo2.write(60);
    myservo3.write(60);
    delay(15);
  }
  else if( sw4){
    sw4 = false;
    myservo2.write(105);
    myservo3.write(105);
    delay(15);
  }
}
// waits for the servo to get there


void checkIfSw3ButtonIsPressed()
{
  sw3ButtonState = digitalRead(sw3_pin);

  if (sw3ButtonState != lastsw3ButtonState)
  {
    if ( sw3ButtonState == 0)
    {
      sw3=true;
    }
    delay(50);
  }
  lastsw3ButtonState = sw3ButtonState;
}

void checkIfSw4ButtonIsPressed()
{
  sw4ButtonState = digitalRead(sw4_pin);

  if (sw4ButtonState != lastsw4ButtonState)
  {
    if ( sw4ButtonState == 0)
    {
      sw4=true;
    }
    delay(50);
  }
  lastsw4ButtonState = sw4ButtonState;
}

Válasz küldése