Форум по Роботика
Контролери => Ардуино (Arduino) => Темата е започната от: shanto в Юни 12, 2015, 05:00:34 pm
-
Здравейте, направил съм си една схема за управление на 4 броя осветителни тела със IR приемник,дистанционно и тези релета (http://erelement.com/power-supplies/4ch-relay) по следната схема:
(http://s20.postimg.org/kdhgrtcuh/2015_06_12_165915.jpg) (http://postimg.org/image/kdhgrtcuh/)
Това е кодът:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // стартира IR приемника
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
//----------------------------------------------- променливи за отчитане на включване(изключване)
int i1 = 0;
int i2 = 0;
int i3 = 0;
int i4 = 0;
int i5 = 0;
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
Serial.println(results.value);
irrecv.resume(); // приема стойността на следващия натиснат бутон
//--------------------------------------------- бутон 1
if(i1 == 0 && results.value == 3739558593)
{
digitalWrite(6, LOW);
i1 = 1;
}
else if(i1 == 1 && results.value == 3739558593)
{
digitalWrite(6, HIGH);
i1 = 0;
}
//--------------------------------------------------- бутон 2
else if(i2 == 0 && results.value == 1868133565)
{
digitalWrite(5, LOW);
i2 = 1;
}
else if(i2 == 1 && results.value == 1868133565)
{
digitalWrite(5, HIGH);
i2 = 0;
}
//--------------------------------------------------- бутон 3
else if(i3 == 0 && results.value == 2557457189)
{
digitalWrite(4, LOW);
i3 = 1;
}
else if(i3 == 1 && results.value == 2557457189)
{
digitalWrite(4, HIGH);
i3 = 0;
}
//-------------------------------------------------- бутон 4
else if(i4 == 0 && results.value == 3419589885)
{
digitalWrite(3, LOW);
i4 = 1;
}
else if(i4 == 1 && results.value == 3419589885)
{
digitalWrite(3, HIGH);
i4 = 0;
}
//-------------------------------------------------- Изключва всички
else if(i5 == 0 && results.value == 3001999165)
{
digitalWrite(6, HIGH);
i1 = 0;
digitalWrite(5, HIGH);
i2 = 0;
digitalWrite(4, HIGH);
i3 = 0;
digitalWrite(3, HIGH);
i4 = 0;
}
}
}
Схемата си работи, но при стартиране релетата са включени защото те се включват при подаване на логическа нула, а пиновете 3,4,5,6 при стартиране на ардуиното са в режим LOW, който подава логическа нула на релетата и те се включват.Въпросът ми е може ли във void setup да укажа пиновете 3,4,5,6 при стартиране да са в режим HIGH, за да може релетата да не са включени по подразбиране?
-
Здрасти,
още в Setup вдигни пиновете на HIGH.
Успех!
-
Ок, стана.Благодаря за помощта. Това е окончателният код:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // стартира IR приемника
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
}
//----------------------------------------------- променливи за отчитане на включване(изключване)
int i1 = 0;
int i2 = 0;
int i3 = 0;
int i4 = 0;
int i5 = 0;
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
Serial.println(results.value);
irrecv.resume(); // приема стойността на следващия натиснат бутон
//--------------------------------------------- бутон 1
if(i1 == 0 && results.value == 3739558593)
{
digitalWrite(6, LOW);
i1 = 1;
}
else if(i1 == 1 && results.value == 3739558593)
{
digitalWrite(6, HIGH);
i1 = 0;
}
//--------------------------------------------------- бутон 2
else if(i2 == 0 && results.value == 1868133565)
{
digitalWrite(5, LOW);
i2 = 1;
}
else if(i2 == 1 && results.value == 1868133565)
{
digitalWrite(5, HIGH);
i2 = 0;
}
//--------------------------------------------------- бутон 3
else if(i3 == 0 && results.value == 2557457189)
{
digitalWrite(4, LOW);
i3 = 1;
}
else if(i3 == 1 && results.value == 2557457189)
{
digitalWrite(4, HIGH);
i3 = 0;
}
//-------------------------------------------------- бутон 4
else if(i4 == 0 && results.value == 3419589885)
{
digitalWrite(3, LOW);
i4 = 1;
}
else if(i4 == 1 && results.value == 3419589885)
{
digitalWrite(3, HIGH);
i4 = 0;
}
//-------------------------------------------------- Изключва всички
else if(i5 == 0 && results.value == 3001999165)
{
digitalWrite(6, HIGH);
i1 = 0;
digitalWrite(5, HIGH);
i2 = 0;
digitalWrite(4, HIGH);
i3 = 0;
digitalWrite(3, HIGH);
i4 = 0;
}
}
}