Форум по Роботика
Контролери => Ардуино (Arduino) => Темата е започната от: saint в Февруари 22, 2014, 11:42:42 pm
-
здравейте,
и аз нагазих яко с ардуино.
Започнах един проект- не комерсиален е :-)
БИхте ли ми помогнали за нещо , което ме побърка :
Три бутона Б1, Б2, Б3
задачката:
1.
- Ако Б1 и Б2 са натиснати - диода свети
- ако Б1, Б2 и Б3 са натиснати - диода гасне и остава загаснал, докато не се натиснат отново Б1 и Б2
2.
- Ако Б1 и Б2 са натиснати - диода свети
- ако Б1, Б2 и
натиснем Б3 три пъти - диода гасне и остава загаснал, докато не се натиснат отново Б1 и Б2
Четох за идеята със статуси, може ли примерен код за да се понауча?
за 2. ще ми свърши ли работа?
или тогава трябва да вкарам стойност (ако А= 3 пъти натиснат бутон тогава леда гасне?)
благодаря ви
-
Ако въведа променлива, която се променя от натискането на бутона, след това я нулирам със загасването на диода?
-
Добре де, никой ли не иска да помогне?
-
Здрасти.Тука малко бавно се получават отговори.Та: за идеята - можеш да ползваш променлива тип bool, която ще приема само true и false.
Тъй бутоните си ги свързал предполагам правилно ето ти код за първата задача като приемем че като са натиснати идват 5 волта в пина и пиновете са съответно digital 1,2,3 :
if (digitalRead(1) == HIGH && digitalRead(2) == HIGH) // ако си натиснал двата бутона едновременно
{
if (digitalRead(3) == HIGH) // проверява дали и 3тия е натиснат
{
digitalWrite(тук е пина на светодиода, LOW); // ако е натиснат и той заедно с тях гасне светодиода
}
else // в противен случай(ако са натиснати само 1 и 2 без 3)
{
digitalWrite(тук е номера на пина на диода, HIGH); // светва светодиода(може да ти трябва съпротивление пред него)
}
}
Предполагам имаш setup() {} и loop() {} (длъжен съм да спомена, в случай че не знаеш)
пробвай кода,който се слага в loop() {тук пишеш кода} и кажи какво става
Поздрави!
-
Tsоni, имаш от мен добър 4 1/2 за решението. Що толкова - ми щото все пак предлагаш някакво решение. А защо не е повече:
1. Показаното НЕ отговаря на условието ( приемаме, че то е коректно, ама аз се съмнявам ): "и остава загаснал, докато не се натиснат отново Б1 и Б2" При твоето решение ще остане загаснал само докато Б3 е натиснат. Липсва обработка на събитието "натискане". Т.е. налага се да помниш кога са били отпуснати, за да разбереш кога се натискат ОТНОВО двата бутона.
2. Въпреки, че ще работи коректно, не намирам идеята за loop за добра. Няма да навлизам в подробности, оставям на тебе тълкуването.
А иначе ме кефиш, давай така!
-
Тук идеята в моето предложение е че светодиода запазва последното си състояние и мисля че кода е напълно коректен.
Ако човека вече иска да свети само докато са задържани 1 и 2, то вече е друга работа.
И какво за идеята за луупа - просто споменах, в случай че не знае. :)
-
int ledPin = 12; // pin za svetodioda
int BB1 = 2; //SELEKTOR MAN
int BB2 = 3; //SPUSUK
int BB3 = 4; // BROIA4
int inPin4 = 5;
int inPin5 = 6;
int inPin6 = 7;
// pin za otchitane na pokazaniyata ot butona
int val = 0; // promenliva za pokazaniyata ot vhodniya pin
void setup() {
pinMode(ledPin, OUTPUT); // deklarira pina na svetodioda kato izhod
pinMode(BB1, INPUT);
pinMode(BB2, INPUT);
pinMode(BB3, INPUT);
pinMode(inPin4, INPUT);
pinMode(inPin5, INPUT);
pinMode(inPin6, INPUT); // deklarira pina na butona kato vhod
}
void loop(){
if (digitalRead(BB1) == HIGH && digitalRead(BB2) == HIGH) // ако си натиснал двата бутона едновременно
{
if (digitalRead(BB3) == HIGH) // проверява дали и 3тия е натиснат
{
digitalWrite(ledPin , LOW); // ако е натиснат и той заедно с тях гасне светодиода
}
else // в противен случай(ако са натиснати само 1 и 2 без 3)
{
digitalWrite(ledPin, HIGH); // светва светодиода(може да ти трябва съпротивление пред него)
}
}
къде греша?
-
butoni:21: error: function definition does not declare parameters
това изписва
-
нямаш скоба на края на лууп-а
-
къде да я сложа ? сори за тъпотата ми
-
void loop() { // това е отварящата
if (digitalRead(BB1) == HIGH && digitalRead(BB2) == HIGH) // ако си натиснал двата бутона едновременно
{
if (digitalRead(BB3) == HIGH) // проверява дали и 3тия е натиснат
{
digitalWrite(ledPin , LOW); // ако е натиснат и той заедно с тях гасне светодиода
}
else // в противен случай(ако са натиснати само 1 и 2 без 3)
{
digitalWrite(ledPin, HIGH); // светва светодиода(може да ти трябва съпротивление пред него)
}
}
} // ето тази скоба ти липсва тя затваря горе отварящата скоба на лууп-а
Като сложиш курсора до някоя скоба, програмата ти маркира другата скоба, която затваря или отваря.Така че като сложиш горе на отварящата курсора ако не ти маркира никоя скоба, то трябва да сложиш една :)
-
да, сега вече го разбрах...
с този код се случва:
при натискане на BB1 i BB2 диода светва.
при натискане на BB3 загасва..
обаче :
диода остава светнат , дори, когато пусна 1 и 2.
гасне само , ако е натиснат 3
задачката ми е да накарам диода да загасне , когато се натисне 3.
диода да не свети , ако 1 и 2 не са натиснати.....
-
Значи искаш докато 1 и2 са натиснати да свети, а ако и 3 се цъкне през това време да изгасне светодиода докато не се пуснат всички бутони и 1 и 2 се натиснат отново?
-
Да точно ;-)
-
Най - отгоре ще си обявиш една променлива bool x = FALSE;
if (digitalRead(BB1) == HIGH && digitalRead(BB2) == HIGH)
{
if (digitalRead(BB3) == HIGH && x == FALSE) {digitalWrite(ledPin, 0); x = TRUE;}
else { if ( x == FALSE) digitalWrite(ledPin, 1); }
}
else {x = FALSE; digitalWrite(ledPin, 0);}
Почти съм сигурен, че ще работи.Пробвай и кажи какво става.
-
boolean ledstate = true;
boolean m = true;
//тук си обяви пиновете на бутоните
void setup()
{
//и тук си сложи pinMode за бутоните
}
void loop()
{
if (digitalRead(BB1) == HIGH && digitalRead(BB2) == HIGH)
{
if (m == true) {m = false; ledstate = true; digitalWrite(ledPin, ledstate;}
if (digitalRead(BB3) == HIGH && ledstate == true) {ledstate != ledstate; digitalWrite(ledpin, ledstate);}
}
else {ledstate = false; digitalWrite(ledPin, ledstate); m = true;}
}
-
ledstate != ledstate;
що е туй ?
-
Сменя се(ако е било 1 става 0, ако е 0 става 1)
Иван да каже дали този код работи са идеята със светодиода, че да продължавам да пиша.