Так что я пишу эту небольшую функцию для некоторых штырей для банкнот. Горшок посылает значение только тогда, когда его поворачивают, в покое он ничего не посылает. Вот как я хочу, чтобы он функционировал.Как написать функцию для нескольких аналоговых контактов? (arduino)
Он отлично работает с одним булавкой.
Я получил его до такой степени, что он работает с несколькими контактами. Поэтому, если я назову его дважды в цикле с двумя выводами, я верну правильные значения на обоих этих выводах. Но я теряю функциональность оператора if. В принципе, я не могу понять последнюю половину этого. Были предложены массивы. Я просто не уверен, как действовать.
Предложения? Спасибо.
byte pots[2] = {A0, A2};
int lastPotVal = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
// get the pin out of the array
rePot(pots[0]);
rePot(pots[1]);
delay(10);
}
void rePot(const int potPin){
// there is probably an issue around here somewhere...
int potThresh = 2;
int potFinal = 0;
int potVal = 0;
// set and map potVal
potVal = (analogRead(potPin));
potVal = map(potVal, 0, 664, 0, 200);
if(abs(potVal - lastPotVal) >= potThresh){
potFinal = (potVal/2);
Serial.println(potFinal);
lastPotVal = potVal;
} // end of if statement
} // end of rePot
Только один вопрос для своих собственных целей обучения: пересаживать (структура Пот * банк) ... это просто переименование «Пот» на «горшок»? Я привык к умножению, поэтому задаюсь вопросом, что это означает в этом утверждении и почему его сделано. –
В этом случае * указывает указатель. Таким образом, функция принимает указатель на структуру Pot, и этот указатель называется «pot». Использование «struct» в определении функции - это немного странный угол C, и один из способов отличается от C++. Вы можете в принципе игнорировать «struct» и просто читать его как «rePot (Pot * pot)», который переводится как «функция, называемая rePot, которая берет указатель на банк с именем Pot. Возможно, было бы проще назвать это что-то вроде rePot (Pot * theInputPot) – admsyn
Дополнительный вопрос: у меня есть небольшая функция blinkLED в другом месте программы, я использую его только для кнопок в основном. Он просто делает onlength/offlength, где offlength является задержкой. Я пытался использовать его w/this. Но задержка, если ее выше 50 приведет к тому, что банк перепутал показания. Почему это происходит? Я предполагаю, что это связано с тем, что замедление замедляет скорость чтения банкнот, когда он проходит через точку? –