我正在使用Arduino编程,我相信使用C作为基本语言。我有这个循环:
int i = 0;
void loop()
{
//Set The output pin to the MIDI note number - 60.
int pinNumber = noteNumber - 60;
if (midiMessage == 144) {
if (velocity == Triggered) {
registerWrite(pinNumber, HIGH);
i = pinNumber;
}
}
if (midiMessage == 128) {
if ((i % 8) == (pinNumber % 8)) {
if (velocity == Stopped) {
registerWrite(pinNumber, LOW);
}
}
}
}
我知道上面的代码不正常,但我要做的是在满足第一个条件i
的情况下分配if (velocity == Triggered)
变量,然后才能使用它当满足midiMessage == 128
条件时。
答案 0 :(得分:4)
i
是一个全局变量,意味着它在程序启动时初始化为0(显式),然后可以通过任何可以看到它的代码进行更改。
所以,如果您的问题是:
它会在
loop()
函数的不同调用之间保持其值吗?
(似乎是根据你在问题中留下的评论)然后答案是肯定的。
换句话说,当您输入loop()
midiMessage
等于144时,它会将i
设置为pinNumber
(noteNumber - 60
)。
然后,当您下次loop()
midiMessage
等于128时,它将使用当前i
(无论上次设置的是什么)。
当然,如果您在之前输入loop()
midiMessage
等于128 ,则在midiMessage
等于144时调用它,{{1}的值将为零。
如果i
的声明在i
函数内,那么每次调用该函数时都会重新初始化,但这不是这里的情况。
当然,良好的编程习惯会建议您将它放在函数中,如果这是您使用它的唯一地方(可能不是这种情况)。
这限制了它对该函数的“可见性”(a),因此其他代码不可能无意中使用它(这对于一个名为尤其的变量是一个问题loop()
- 您可能想要一个更好的名称)。
要限制其可见性,同时仍然允许它在函数调用之间存在,您可以使用类似:
i
这仍然在程序启动时初始化一次(即使它在函数内部)并且在void loop (void) {
static int persistentVar = 0;
:
:
}
的不同调用之间保持其值。它还会阻止来自该函数外部的代码“看到”变量。
(a)请注意,此处使用的“可见性”不是ISO标准使用的术语。我将这个术语用于我的入门编码类,因为“可见性”比“范围”更容易理解。