jau Levo buvo pasakyta: daryt viska interrupt'o funkcijoj.
"Laimis" wrote in message news:mkt98k$5qj$1@trimpas.omnitel.net...
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();
}