C++ 阿杜伊诺港比特希夫特酒店

C++ 阿杜伊诺港比特希夫特酒店,c++,c,arduino,bit-shift,C++,C,Arduino,Bit Shift,你知道骑士车的红色反光灯吗?我正在用我的Arduino建造类似的东西。我有一个有7个LED的Arduino Uno 我的问题是位移位。当我的程序运行时,我告诉它通过以下方式为引脚供电: PORTD = 0b00000001; 稍有延迟后,我不得不将电源切换到另一个引脚。所以它必须是这样的: PORTD = 0b00000010; 可以使用位移位对其进行归档。我曾想过这样的事情,但它不起作用: PORTD = PORTD << 1; PORTD=PORTD假设要打开PORTD的第

你知道骑士车的红色反光灯吗?我正在用我的Arduino建造类似的东西。我有一个有7个LED的Arduino Uno

我的问题是位移位。当我的程序运行时,我告诉它通过以下方式为引脚供电:

PORTD = 0b00000001;
稍有延迟后,我不得不将电源切换到另一个引脚。所以它必须是这样的:

PORTD = 0b00000010;
可以使用位移位对其进行归档。我曾想过这样的事情,但它不起作用:

PORTD = PORTD << 1;

PORTD=PORTD假设要打开
PORTD
的第n位


我把你们给我的各种答案和老师的一些建议结合起来,解决了这个问题

我已经做了两个无符号字符。一个用于if语句以确定我们是向上还是向下,另一个用于指示哪个led亮起。然后我在循环中做了一些if语句。您可以在下面看到

我在for循环中执行此操作:

1) 如果我们向上(向上向下为1),则将灯光设置为向上1。如果灯光大于或7,请设置为0

2) 否则设置灯亮1灭。如果灯光为0,则设置为1

3) 做位移位

4) 稍微耽搁一下

#include <avr/io.h>
#include <util/delay.h>

int main()
{
    UCSR0B = 0;
    DDRD = 0b11111111;

    unsigned char upDown=1; // start going with the ports up
    unsigned char cylon=0;  // says which LED is on

    for(;;)
    {
        if(upDown==1){
            cylon++;
            if(cylon>=7) upDown=0;      // Reached the last LED
        }
        else {
            cylon--;
            if(cylon==0) upDown=1;      // Reached min LED
        }
            PORTD = 1 << cylon;
            _delay_ms(100);             // a little wait
    }
}
#包括
#包括
int main()
{
UCSR0B=0;
DDRD=0b11111111;
unsigned char upDown=1;//开始向上移动端口
unsigned char cylon=0;//表示哪个LED亮起
对于(;;)
{
如果(向上向下==1){
赛昂人++;
如果(赛昂>=7)向上向下=0;//到达最后一个指示灯
}
否则{
赛昂人--;
如果(赛昂==0)向上向下=1;//达到最小发光二极管
}

PORTD=1我将在问题中添加我的所有代码,因为您的选项不起作用。如果您有
stdout
,您可以很容易地检查这一点:第一个是十进制1,第二个是十进制2。因此
int x=1;x您直接使用avr gcc库而不是Arduino库有什么原因吗?是的,这是因为我可以用它,不是吗?但是当我把它包括进去的时候,它给了我同样的错误。
PORTD <<= 1;
#include <avr/io.h>
#include <util/delay.h>

int main()
{
    UCSR0B = 0;
    DDRD = 0b11111111;

    unsigned char upDown=1; // start going with the ports up
    unsigned char cylon=0;  // says which LED is on

    for(;;)
    {
        if(upDown==1){
            cylon++;
            if(cylon>=7) upDown=0;      // Reached the last LED
        }
        else {
            cylon--;
            if(cylon==0) upDown=1;      // Reached min LED
        }
            PORTD = 1 << cylon;
            _delay_ms(100);             // a little wait
    }
}