Скетч большой и даже выполняется, но не могу самостоятельно понять эту его часть: //************** char state = 1; int loww = 3; //******************** void State(byte state) { if(state) { static char flag = 0; //...... if(state == 2) //....... { loww += flag; //....... Display(); Serial.println(loww); flag = 0; } else if(state == 1) flag = 1; else if(state == 3) flag = -1; Просьба расшифровать помеченные строки. Благодарю заранее.
static char flag = 0; //...... При объявлении переменной в функции, ключевое слово static указывает, что переменная сохраняет свое состояние между вызовами этой функции. при этом видимость переменной только внутри функции. Полагаю, что в ардуиновском языке С так же. В данном случае переменная при запуске программы инициализируется нулем, а при вызовах функции State сохраняет свое значение. if(state == 2) //....... серия условий (можно было бы использовать switch), в зависимости от значений параметра функции state устанавливается значение переменной flag: При этом в случае state == 2 в глобальной переменной loww накапливаются колебания значений переменной flag. loww += flag; //....... Текущее значение flag добавляется к loww. Значение loww при запуске программы равно 3, и в процессе выполнения при каждом вызове функции State то увеличивается на 1, то уменьшается на 1, то "замирает". При этом следует понимать, что глобально объявленная переменная state и параметр функции state - разные сущности. Внутри функции будет виден параметр (по крайней мере в теории, пока не доводилось проверять. что на этот счет полагает компилятор Arduino IDE), вне ее будет видна глобальная переменная.