Вчера победил многозадачность в Arduino и решил не делать 4 переменные 2 из которых копия других 2. Засунул одинаковые переменные в разные функции. Заливаю... Светодиоды загорелись, но тухнуть не хотят. В чём я накосячил?
Вот код (кот):
int main() {
init();
while (1) {
led13_ne(), led12_ne();
}
}
void led13_ne() {
DDRB |= B10000000;
//init();
unsigned long previousMillis = 0;
const long interval = 1000;
byte port13read = 0;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
//currentMillis = 0;
port13read = bitRead(PORTB, 7);
if (port13read == 0) {
PORTB |= B10000000;
//port13read = 1;
} else {
PORTB &= ~B10000000;
//port13read = 0;
}
}
}
void led12_ne() {
DDRB |= B01000000;
unsigned long previousMillis = 0;
const long interval = 500;
byte port12read = 0;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
//currentMillis = 0;
port12read = bitRead(PORTB, 6);
if (port12read == 0) {
PORTB |= B01000000;
//port13read = 1;
} else {
PORTB &= ~B01000000;
//port13read = 0;
}
}
}
Переменная previousMillis должна быть или глобальной:
unsigned long previousMillis = 0;
void led13_ne() {
...
}
или статичной:
void led13_ne() {
static unsigned long previousMillis = 0;
...
}
Тогда она будет обнуляться только при рестарте микроконтроллера. А сейчас она обнуляется при каждом вызове функции.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей