Created
November 11, 2016 08:39
-
-
Save dubkov/3b5d843e526fb54c91f0ce1d1e3051f1 to your computer and use it in GitHub Desktop.
Arduino func array
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// допустим, функций три. Заведем макрос с количеством функций, | |
// чтобы потом при смене количества было меньше ошибок | |
#define FUNC_NUM 3 | |
// Напишем прототипы функций. | |
// Определения функций напишем потом внизу, | |
// чтобы они здесь не мозолили глаза | |
void f1(void); | |
void f2(void); | |
void f3(void); | |
// Теперь создадим три указателя | |
// и присвоим им адреса функций | |
void (*pf1)(void) = &f1; | |
void (*pf2)(void) = &f2; | |
void (*pf3)(void) = &f3; | |
// Прежде, чем сложить указатели в массив, | |
// нам придется создать для него тип. | |
// Вот мы создаем тип с названием FuncPtr | |
// который представляет собой указатель на функцию :) | |
typedef void (* FuncPtr) (); | |
// Теперь создадим массив длиной три | |
// и сложем в него указатели на функции. | |
// Массив имеет тип, который мы только что создали | |
FuncPtr funcArray[FUNC_NUM] = {pf1, pf2, pf3}; | |
// Здесь всё понятно | |
void setup(){ | |
Serial.begin(19200); | |
} | |
// А это переменная - счетчик функций. | |
// Она должна инкрементироваться каждый раз, | |
// когда приходит единица в юарт | |
// (ну и сбрасываться в ноль когда надо) | |
int i = 0; | |
// Тут пока всё понятно | |
void loop(){ | |
if (Serial.available()){ | |
if (Serial.read() == '1'){ | |
// Обращаемся к текущему элементу массива, | |
// тем самым делая вызов функции по очереди | |
funcArray[i](); | |
// Это тернарный оператор. Он проверяет на истинность | |
// выражение после знака = и перед знаком ?. | |
// если оно истинно, то переменной присваивается значение | |
// после знака ?, если ложно - то значение после знака :. | |
// здесь он нужен, чтобы листать индекс массива от 0 до | |
// длины массива минус один. | |
i = (i < FUNC_NUM-1) ? i+1 : 0; | |
} | |
} | |
} | |
// А вот и описания функций. | |
// Они все вместе должны написать в порт | |
// интересное сообщение, когда ты пришлешь 3 единицы | |
void f1(){ | |
Serial.println("PACANI"); | |
} | |
void f2(){ | |
Serial.println("VASCHE"); | |
} | |
void f3(){ | |
Serial.println("REBYATA"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment