traaoni Skrevet 18. oktober 2013 Del Skrevet 18. oktober 2013 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
BlueEAGLE Skrevet 18. oktober 2013 Del Skrevet 18. oktober 2013 (endret) Du har ikke noen kode som setter PORTB når varThree ikke er low. if(varThree == LOW) { PORTB |=(1<<0); } else { // Her må du sette PORTB slik at LED slukker. PORTB &=~(1<<0); } Endret 18. oktober 2013 av BlueEAGLE Lenke til kommentar
traaoni Skrevet 20. oktober 2013 Forfatter Del Skrevet 20. oktober 2013 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
jonny Skrevet 20. oktober 2013 Del Skrevet 20. oktober 2013 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
traaoni Skrevet 20. oktober 2013 Forfatter Del Skrevet 20. oktober 2013 (endret) 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 20. oktober 2013 av traaoni Lenke til kommentar
Lycantrophe Skrevet 28. oktober 2013 Del Skrevet 28. oktober 2013 Det er så mange ting som er galt her. :-----) Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå