Gå til innhold

Sitter fast inne i if-løkken (?)


Anbefalte innlegg

Hei

 

Progammet mitt skal virke som følger;

når jeg trykker bryter 1; slå på LED (PB0)

når jeg trykker bryter 2; blink LED

 

Problem:

Når jeg kjører dette programmet og trykker bryter 1 slik at varThree blir lav, så lyser LED'en koblet til PB0, men når jeg slipper bryteren og varThree blir høy så slukkes ikke LED'en, hvorfor gjør den ikke det?

 

Det funker når jeg trykker bryter 2 slik at varTwo blir lav, da blinker LED'en, og når jeg slipper bryteren og varTwo blir høy så slukkes LED'en.

 

Takk for hjelp.

int varTwo;
int varThree;

void setup()
{
  DDRD &=~(1<<3);    //INPUT
  DDRD &=~(1<<2);    //INPUT
  DDRB |=(1<<0);     //OUTPUT
  PORTD |=(1<<3);    //ENABLE PULL UP RESISTOR
  PORTD |=(1<<2);    //ENABLE PULL UP RESISTOR  
}

void loop()
{
  varThree = PIND & (1<<PIND2);
  varTwo = PIND & (1<<PIND3);

  if(varThree == LOW)
  {
    PORTB |=(1<<0);
  }
  if(varTwo == LOW)
  {
    PORTB |=(1<<0);
    delay(250);
    PORTB &=~(1<<0);
    delay(250);
  }
}
Lenke til kommentar
Videoannonse
Annonse

Takk for hjelp

 

Men hvorfor funker ikke koden under? Jeg bytter ut if med while.

Jeg ser egentlig ingen grunn til at det ikke skulle funke.

 

Bruker jeg koden under fungerer systemet slik:

Trykker f.eks. på bryter 1, LED'en slår seg på, og den slår seg ikke av hvis jeg slipper bryteren, trykker jeg på bryter 2, så skjer det heller ingenting.


int varOne;
int varTwo;

void setup()
{
  DDRB &=~(1<<3);    //INPUT
  DDRB &=~(1<<2);    //INPUT
  DDRB |=(1<<0);     //OUTPUT
  PORTB |=(1<<3);    //ENABLE PULL UP RESISTOR
  PORTB |=(1<<2);    //ENABLE PULL UP RESISTOR
}

void loop()
{
  varOne = PINB & (1<<PINB2);
  varTwo = PINB & (1<<PINB3);

  while(varOne == LOW)
  {
    PORTB |=(1<<0);
  }
  while(varTwo == LOW)
  {
    PORTB |=(1<<0);
    delay(250);
    PORTB &=~(1<<0);
    delay(250);
  }
}
Lenke til kommentar

Du endrer jo ikke varOne og varTwo inne i løkkene, så spørsmålet blir da: Er det noen andre deler av koden (som du ikke har vist) som endrer disse variablene? Hvis ikke er jo løkkene perfekte eksempler på uendelige løkker...

 

Men vanskelig å si noe fornuftig om koden din, jeg aner ikke hva PORTB, DDRB, PINB osv. er og hva som gjør at de evt. endrer verdi, eller hva som skjer hvis du selv endrer verdi på PORTB f.eks. Jeg ser heller ikke hvordan loop()-metoden og setup()-metoden blir brukt.

Lenke til kommentar

Skjønner, takk for hjelp. Funker nå. Tror jeg skal se litt på hvordan de diverse løkkene fungerer, og hvordan man skal bruke variabler skikkelig


int varOne;
int varTwo;

void setup()
{
  DDRB &=~(1<<3);    //INPUT
  DDRB &=~(1<<2);    //INPUT
  DDRB |=(1<<0);     //OUTPUT
  PORTB |=(1<<3);    //ENABLE PULL UP RESISTOR
  PORTB |=(1<<2);    //ENABLE PULL UP RESISTOR
  
}

void loop()
{

  varOne = PINB & (1<<PINB2);
  varTwo = PINB & (1<<PINB3);

  while(varOne == LOW)
  {
    PORTB |=(1<<0);
    delay(100);
    PORTB &=~(1<<0);
    delay(100);
    varOne = PINB & (1<<PINB2);
  }
  
  while(varTwo == LOW)
  {
    PORTB |=(1<<0);
    delay(250);
    PORTB &=~(1<<0);
    delay(250);
    varTwo = PINB & (1<<PINB3);
}
}
Endret av traaoni
Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...