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