Tema: Re: Padekit pagaut bug'a (Arduino)
Autorius: Laimis
Data: 2015-06-06 01:53:08
ig rašė:

> Zodziu biski konfuze. Gal kas turi minciu ?

Kaip jau minėjo — ISR nebaigus skaityti 2 counter'io baitų (int). Reikia 
tiesiogiai išjungti interrupt'us, kad operacija būtų atomic.
Bet šiaip tai keista, kad volatile dokumentacijoje apie tai neužsiminta.


volatile unsigned int c = 0;  // counter
volatile boolean forward = 1; // direction

int fwdrevPin = 9;

void setup() {
   attachInterrupt(0, tacho, CHANGE);
   pinMode(fwdrevPin, OUTPUT);
}

void loop() {
   cli();
   if (c > 623) {
     c = 0;                       // Reset counter
     sei();

     forward = !forward;          // Switch direction
     if (forward) {
       analogWrite(fwdrevPin, 140);
     }
     else {
       int t = 128 - torque;      // WTF?
       analogWrite(fwdrevPin, 100);
     }
   }
   sei();
}