所以,我很确定这里要做什么,但由于我需要在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);
}
我错过了什么吗?而且,如果我有上拉或下拉电阻,我还需要改变什么?
答案 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)
按钮,您可以使用INPUT
和INPUT_PULLUP
,设置
在setup()
。
要“读取”引脚使用val = digitalRead(inPin);
或只是在if语句中没有
为其分配变量。该值将根据我所说的关于上拉和下拉的内容。
可以通过某种方式实现LED序列的实现,在您的实施中,您必须在loop()
内制作内容。
定时会有一些问题,因为输入只会检查完整的序列,你必须按下按钮才能检查。对不起,我不会为你做这项工作,但我认为你有这个想法。
答案 1 :(得分:0)
首先,你需要做自己的工作,特别是如果你要参加考试的话!
但是,从开发自己的答案的角度来看,以增量方式解决这个问题。
首先,让你的代码版本适用于ONE Led,它处于打开状态然后关闭并按下按钮使其立即关闭(如果打开)或立即关闭(如果关闭)。即使这个版本也不容易,因为您需要编写中断服务程序(ISR)。
为一个Led工作后,创建一个代码副本并将其命名为版本2.获取版本2以适用于两个Led。为此,您需要使用在第一个版本中获得的所有知识。如果您遇到版本2的问题,您可以随时返回V1并进行一些小改动,使用您熟悉的代码进行测试!
最后,沿着相同的线做V3,仅适用于所有三个LED。
有人会给你答案,不可以帮助你在考试中取得好成绩。祝你好运,请回到StackOverflow并提出具体问题。