• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino Uno Int0 dziwne zachowanie?
#1
Witam,


Mam problem z programem poniżej (używam Arduino Uno).


Program powinien przełączać zmienna state na przerwaniu generowanym na pinie2 (na zbocze RISING)

(do pinu 2 podłączony jest pilot rc na układzie PT2262-generujący stan wysoki na naciśniecie przycisku)

(Dodam, że na zbocze FALLING działa poprawnie)


Czy któś może mi powiedzieć, dlaczego program poniżej bez tej linijki działa ok, a z nia juz nie?

Kod:
//digitalWrite(Usb1, StateCopy);






Program:


Kod:
const byte button1Pin = 2;     // the number of the pushbutton pin
const byte Usb1 =  4;      // the number of the LED pin
const byte interruptPin = 2;

volatile byte state = 0;
byte StateCopy=0;

void setup() {
  pinMode(Usb1, OUTPUT);
  pinMode(button1Pin, INPUT);
  //pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING);
  Serial.begin(9600);
  }

void loop() {
 
noInterrupts();
StateCopy=state;
interrupts();

//digitalWrite(Usb1, StateCopy);          /////////////////////////////////bez tego dziala///////                            

Serial.print("state = ");
Serial.println(StateCopy);

delay(10);



}


void blink() {
  state=!state;  
}

Z góry dziękuję za pomoc
 
Odpowiedź
#2
dodam jeszcze, żeby było śmiesznie, że jeżeli
pod Usb1 (w linijce ponizej) ustawie diode na Pinie13, to działa,
ale jak ustawie przekaźnik na Pinie4, do nie działa
(zarówno przy zasilaniu z portu usb pc jak i z zasilacza usb)

//digitalWrite(Usb1, StateCopy);          /////////////////////////////////bez tego dziala///////
 
Odpowiedź
#3
Kod:
//pinMode(interruptPin, INPUT_PULLUP);
dlaczego masz to za komentowane to bardzo ważna linijka
Kod:
noInterrupts();

interrupts();
gdzie są te pod programy
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#4
z tą linijką, czy bez działa tak samo.

Interrupts()
NoInterrpts()
to funkcje, skoro się skompilowało tzn, że raczej są dodane (tak myślę, w końcu działają, prawie dobrze Wink )
podobnie używam

attachInterrupt

a nigdzie nie deklarowałem dodania przerwań
 
Odpowiedź
#5
Słuchaj pullup musi być do button to niweluje hazard ja mam na to iny sposób ale to sposób twórców po 2 skąd wiesz czy pod programach kuter są niewiadome nie masz twardej definicji pinu dlatego programy pisze od zera a nie z innych programów.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#6
dla pin13 działa, dla pin4 nie. dziwne
 
Odpowiedź
#7
Kod:
const byte button1Pin = 2;     // the number of the pushbutton pin
const byte Usb1 =  4;      // the number of the LED pin
const byte interruptPin = 2;

volatile byte state = 0;
byte StateCopy=0;

void setup() {
  pinMode(Usb1, OUTPUT);
  pinMode(button1Pin, INPUT);
  //pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING);
  Serial.begin(9600);
  }

void loop() {


noInterrupts();
StateCopy=state;
digitalWrite(Usb1, StateCopy);  
interrupts();

//       /////////////////////////////////bez tego dziala///////                            

Serial.print("state = ");
Serial.println(StateCopy);

delay(10);



}


void blink() {
  state=!state;  
}
Sprawdz to.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#8
też próbowałem i jest to samo.

przerwanie jest generowane przez układ pilot/odbiornik pt2262/2272

jak zbliże je do siebie na odległośc 1cm to działa dla przekaźnika

(dla diody dystans może być znacznie większy i działa)
 
Odpowiedź
#9
bo przekaźnik ma duży pobór mocy i możne robić spadki w zasilaniu pokaż schemat połączeń
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#10
arduino relay shield v2. mało bierze prądu. z zewnętrznego zasilacza usb tak samo jest
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości