首页 文章

需要Arduino UNO帮助

提问于
浏览
0

所以,我非常肯定这里要做什么,但由于我需要在10分钟内完成测试,我必须设置一个Arduino UNO来播放3-LED序列,其中每个LED都打开一秒钟,然后是下一个,然后是第三个,不断重复,直到你按下一个按钮(硬件,在板上),然后序列转过来,第三个LED现在是第三个,第一个是最后一个,等等 . 这是我到目前为止所做的:

void setup()
{
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  digitalWrite(ledPin1, HIGH);   
  delay(1000);                  
  digitalWrite(ledPin2, LOW);    
  delay(1000);
  digitalWrite(ledPin3, LOW);    
  delay(1000); 

}
if (<Button Pressed condition>) 
{
  digitalWrite(ledPin3, HIGH);   
  delay(1000);                  
  digitalWrite(ledPin2, LOW);    
  delay(1000);
  digitalWrite(ledPin1, LOW);    
  delay(1000);
}
else
{
digitalWrite(ledPin1, HIGH);   
  delay(1000);                  
  digitalWrite(ledPin2, LOW);    
  delay(1000);
  digitalWrite(ledPin3, LOW);    
  delay(1000); 
}

我错过了什么吗?而且,如果我有上拉或下拉电阻,我还需要改变什么?

2 回答

  • 0

    关于上拉或下拉电阻,它将改变I / O引脚的“值” . 如果您有一个上拉按钮并且按钮接地,则按下按钮时端口将为1,按下按钮为0,如果按下正极和下拉电阻,则为反向(考虑常开按钮) .

    请记住,ATMega328在某些端口有内部上拉电阻,所以在某些情况下你不需要外部上拉电阻,虽然上拉电阻的值不低,所以如果EMI高,RFI,则可能会出现问题 . 等等,大多数按钮线很长 .

    对于代码,我是一名C程序员,但你只需要一些读数:

    http://arduino.cc/en/Reference/PinMode http://arduino.cc/en/Reference/DigitalRead

    使用 pinMode(pin, mode) 按钮,您可以使用 INPUTINPUT_PULLUP ,在 setup() 上设置 .

    要"read"引脚使用 val = digitalRead(inPin); 或仅在if语句内部而不为其分配变量 . 该值将根据我所说的关于上拉和下拉的值 .

    可以通过某种方式实现LED序列的实现,在你的一个中,你必须在 loop() 中制作内容 .

    您将在定时方面遇到一些问题,因为输入将仅检查完整序列,并且您必须按下按钮直到检查 . 对不起,我不会为你做这项工作,但我认为你有了这个想法 .

  • 0

    首先,你需要做自己的工作,特别是如果你要参加考试!

    但是,从开发自己的答案的角度来看,以增量方式处理此问题 .

    首先,获取一个版本的代码,以便在ONE Led上工作,然后关闭并按下按钮使其立即关闭(如果打开)或立即打开(如果关闭) . 即使这个版本也不容易,因为您需要编写中断服务程序(ISR) .

    一旦你有一个Led工作,创建一个代码副本并命名为版本2.获取版本2以适用于两个Led . 为此,您需要使用在第一个版本中获得的所有知识 . 如果您遇到版本2的问题,您可以随时返回V1并进行一些小改动,使用您知道可行的代码来测试问题!

    最后,沿相同的线做V3,仅适用于所有三个LED .

    有人给你答案 not 帮助你做好测试 . 祝你好运,请回到StackOverflow并提出具体问题 .

相关问题