用arduino在C中旋转位(8位)

时间:2015-10-29 22:00:18

标签: arduino bit-manipulation

我在学校项目上工作,我使用串行8 DIP开关点亮8个数字LED。我在我的arduino上使用盾牌按下一个按钮,让我的屏幕上的位开关。例如,用户单击第一个DIP开关和第二个DIP开关。然后第一个DE1和第二个DEL将亮起。之后,我按下盾牌上的一个按钮,这些位开始移动到它们的位置。

我的问题是,当它们到达它们在切换方向上遇到的最后一位时,如何使这些位恢复到原始值。就像一个旋转的位。

旋转示例:用户点亮第一个和第三个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);
    }
当用户切换DIP然后打印该值时,正在读取

数据 G用于切换位,如果G = 0,则返回原始数据值。 但我想要的是让它们旋转而不是让它们传送到原始值。我需要使用if函数来完成挑战。

谢谢!

1 个答案:

答案 0 :(得分:1)

此函数将try { bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true); return bitmap; } catch (OutOfMemoryError e) { bitmap.recycle(); bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true); return bitmap; } 向右旋转value位并返回旋转的值。 (amount是类型8的大小)

byte

byte rotateRight(byte value, int amount) { return (value >> amount) | (value << (8 - amount)); } 替换为G = G >> 1;