2013-08-14 7 views
0

Итак, я уверен, что делать здесь, но так как мне нужно будет это сделать за 10 минут в своем тесте, я должен настроить Arduino UNO для воспроизведения последовательности с 3 светодиодами в котором каждый светодиод включается на секунду, затем следующий слева, а затем третий, повторяется постоянно, пока вы не нажмете кнопку (аппаратное обеспечение, на плате), затем последовательность поворачивается, а третий светодиод теперь третий, первый из них является последним и т.д. Это то, что я сделал до сих пор:Нужна помощь Arduino UNO

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); 
} 

Я пропускаю что-нибудь? а также, что мне нужно изменить, если у меня есть сопротивление Pull-Up или Pull-Down?

ответ

0

О подтягивающих или выпадающих резисторах, которые изменят значение «значение» контакта ввода/вывода. Если у вас есть подтяжка и кнопка на землю, порт будет 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 без , назначив ему переменную. Значение будет соответствовать тому, что я сказал о подтягивании и вытаскивании.

Внедрение последовательности светодиодов может быть сделано в некотором роде, в вашем, вам нужно будет сделать вещи внутри loop().

У вас будут проблемы с синхронизацией, так как на входе будет проверяться только полная последовательность, и вы должны нажимать кнопку до тех пор, пока она не проверит. Мне жаль, что я не буду делать за вас работу, но я думаю, что у вас есть идея.

0

Прежде всего, вам нужно сделать свою работу, особенно если вы собираетесь пройти тест!

Однако, с точки зрения разработки собственного ответа, подходите к этой проблеме с шагом.

Прежде всего, получите версию своего кода для работы с ONE Led, где он включен, а затем выключен и нажатие кнопки приводит к немедленному отключению (если включено) или сразу же (если выключено). Даже эта версия НЕ легка, потому что вам нужно будет закодировать процедуру обслуживания прерываний (ISR).

После того, как вы работаете над одним светодиодом, создайте копию кода и назовите его версией 2. Получите версию 2, чтобы работать для TWO Leds. Для этого вам нужно будет использовать все знания, которые вы получили в первой версии. Если у вас есть проблема с версией 2, вы всегда можете вернуться к V1 и сделать небольшое изменение, чтобы протестировать проблему, используя код, который, как вы знаете, работает!

Наконец, сделайте V3 по тем же линиям, только для всех трех светодиодов.

Кто-то, дающий вам ответ, будет не поможет вам справиться с тестом. Удачи, и, пожалуйста, вернитесь в StackOverflow с конкретными вопросами.