Здравствуйте, форумчане!
В процессе написания скетча возник у меня вопрос. Допустим мне надо опросить десять цифровых портов и считать их состояние в десять переменных. Перед этим, конечно, эти десять переменных нужно объявить и инициализировать. Затем, допустим, в зависимости от состояния этих переменных, нужно изменить состояние цифровых портов. Во всех этих случаях происходят одинаковые рутинные операции.
Нельзя ли сделать массив из номеров опрашиваемых портов, запустить по нему цикл for. Внутри цикла в зависимости от номера итерации (0…9) присваивать значения переменным (например input0… input9). То есть, чтобы имя переменной составлялось из двух частей: слова input и номера итерации (в php такое можно было делать). Или может есть какой-то более изящный способ?
Какие проблемы? Имеете массив входных и выходных пинов, в цикле считываете состояние входных в массив переменных, в цикле изменяете состояние выходных. Один из вариантов.
В С/С++ так нельзя.
Правильный подход - вместо десяти отдельных переменных input0… input9 использовать массив
Чего нельзя то ?
Можно.
Только нужно массив с нужными пинами для начала создать.
Типа:
const int myInputPinsArr[]={2,7,8,12,6};//массив с пинами входов
constexpr int arrLen=sizeof(myInputPinsArr)/sizeof(myInputPinsArr[0]);
bool myInputState[arrLen];// массив состояний входных пинов
void setup(){
for (int i=0;i<=arrLen;i++){pinMode(myInputPinsArr[i],INPUT);
}
}
void loop(){
for(int i=0;i<=arrLen;i++){
myInputState[i]=digitalRead(myInputPinsArr[i]);
}
}
<= ?
ИМХО защита от выхода за пределы. Но лучше, наверное, так:
for (int i=0;i >= 0 && i<arrLen;i++)
Нет, нужно так
for (int i=0; i<arrLen; i++)
меньше нуля i не может быть, т.к. она инициализируется нулем
вот этого:
Да, я так и подозревал, что нельзя.
Спасибо, действительно с массивами будет проще, чем с переменными. Так и сделаю наверное.
Вот такие ошибки обычно потом и отлавливаю.
Хреново когда код на автомате не думая набиваешь.