【发布时间】:2016-01-30 06:04:21
【问题描述】:
我正在做一个学校项目,我使用串行 8 个 DIP 开关点亮 8 个数字 LED。我在我的 Arduino 上使用一个盾牌来按下一个按钮,让我的屏幕上的位切换。例如,用户点击第一个 DIP 开关和第二个。然后第一个 LED 和第二个 LED 将亮起。之后,我按下盾牌上的一个按钮,位开始移动到它们所在的位置。
我的问题是,当它们到达它们在切换方向上遇到的最后一个位时,我怎样才能使这些位恢复到它们的原始值。就像位的旋转。
旋转示例:用户点亮第一个和第三个 LED,当同一用户按下按钮时它们开始切换。然后,当第二个 LED 到达第 0 位时,它会回到第 7 位,而第一个 LED 仍处于第 1 位等...
byte G;
byte A = 0b00000001;
char data,newData; `
void modeRotationGauche(void)
{
G = (data);
while (digitalRead(KEY_2) == LOW)
{
if ( G == 0)
{
G = data;
}
G = G >> 1;
delay(200);
Serial.write(G);
G = G >> 1;
delay(200);
Serial.write(G);
G = G >> 1;
delay(200);
Serial.write(G);
G = G >> 1;
delay(200);
Serial.write(G);
}
用户切换拨码时正在读取数据,然后打印值
G 用于切换位,如果 G = 0 则返回原始数据值。
但我想要的是让它们旋转而不是让它们传送到原始值。我需要使用 if 函数来完成这项挑战。
【问题讨论】:
-
对不起,我不能很好地理解这个问题。无论如何,如果您只需要一个旋转功能,您可以执行
G = ((byte)G >> 1) | ((G&1)?0x80:0);之类的操作。这样,您将移动旧值,然后如果设置了最低位,则添加最高位。注意:这是一个 8 位变量!如果您需要更大的,则必须编辑 0x80 值
标签: c arduino bit-manipulation