需要Arduino UNO帮助

时间:2013-08-14 17:07:26

标签: arduino

所以,我很确定这里要做什么,但由于我需要在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 :(得分: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()

要“读取”引脚使用val = digitalRead(inPin);或只是在if语句中没有 为其分配变量。该值将根据我所说的关于上拉和下拉的内容。

可以通过某种方式实现LED序列的实现,在您的实施中,您必须在loop()内制作内容。

定时会有一些问题,因为输入只会检查完整的序列,你必须按下按钮才能检查。对不起,我不会为你做这项工作,但我认为你有这个想法。

答案 1 :(得分:0)

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

但是,从开发自己的答案的角度来看,以增量方式解决这个问题。

首先,让你的代码版本适用于ONE Led,它处于打开状态然后关闭并按下按钮使其立即关闭(如果打开)或立即关闭(如果关闭)。即使这个版本也不容易,因为您需要编写中断服务程序(ISR)。

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

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

有人会给你答案,可以帮助你在考试中取得好成绩。祝你好运,请回到StackOverflow并提出具体问题。