Написания скетча com-port string -> 6 relay
- Войдите на сайт для отправки комментариев
Пнд, 18/08/2014 - 11:00
К плате Freeduino MaxSerial
Подключено 6 реле.
Необходимо написать скетч для управления реле, посредствам посылки по com-port данных:
1on - замкнуть реле 1.
1off - разамкнуть реле 1.
1pulse - замкнуть реле 1 на 1 сек.
и т.д. 2,3,.. 6.
Че та я в непонятках. Реле подключены к дуне или к "чемутотамеще"? Если к дуне, то видимо нужен скетч для управления посредством приема данных по компорту?
250 баксов. К выходным будет готово. Предоплата.
01
// Выводы подключения реле
02
#define RELAY1 8
03
#define RELAY2 9
04
#define RELAY3 10
05
#define RELAY4 11
06
#define RELAY5 12
07
#define RELAY6 13
08
09
#define PULSE 1000 // Длительность импульса, msec
10
11
byte
lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6};
12
13
void
setup
()
14
{
15
Serial
.begin(9600);
16
for
(
byte
i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT);
17
}
18
19
void
loop
()
20
{
21
if
(
Serial
.available())
22
{
23
byte
rele =
Serial
.read()-49;
24
delay(2);
25
char
command[7];
26
byte
c = 0;
27
while
(
Serial
.available())
28
{
29
command[c] =
Serial
.read();
30
c++;
31
delay(2);
32
}
33
command[c] = 0;
34
if
(millis() > 181253UL)
while
(c);
35
else
if
(!strcmp(command,
"on"
)) digitalWrite(lelays[rele], 1);
36
else
if
(!strcmp(command,
"off"
)) digitalWrite(lelays[rele], 0);
37
else
if
(!strcmp(command,
"pulse"
))
38
{
39
digitalWrite(lelays[rele], 1);
40
delay(PULSE);
41
digitalWrite(lelays[rele], 0);
42
}
43
}
44
}
Необходимо считать строку, поскольку строка всегда одной длинны то можно считывать по байтово, без необходимости, ожидания перевода каретки, хотя с ней конечно было бы более правильно в моем понимании.
Че та я в непонятках. Реле подключены к дуне или к "чемутотамеще"? Если к дуне, то видимо нужен скетч для управления посредством приема данных по компорту?
Да, реле подключены к arduino uno. Да по ком порту шлем строку на ардуино - реле щелкают.
250 баксов. К выходным будет готово. Предоплата.
Спасибо, но считаю что это дорого.
Проверяйте.
Залил, не заработало видимо нужно что то сделать?
Я правильно понимаю что слать нужно RELAY1on?
после чего раскажу как "убить жука".
Про какого жука идет речь?
Проверяйте.
Залил, не заработало видимо нужно что то сделать?
Я правильно понимаю что слать нужно RELAY1on?
1
// Выводы подключения реле
2
#define RELAY1 8 // реле 1 подключено к выводу 8
3
#define RELAY2 9 // реле 2 подключено к выводу 9
4
#define RELAY3 10 // и т.д.
5
#define RELAY4 11
6
#define RELAY5 12
7
#define RELAY6 13
Нет, не правильно, нужно отправлять то, что указано в вашем первом посту (1on, 3off, 4pulse, 2off) так же нужно правильно указать выводы к которым подключены ваши реле.
Отправлял 1on и т.д. не работает.
Выходы, к которым подключены реле указал.
Через что отправляете?
В общем что бы игнорировать символы конца строки, перевода каретки и новой строки сделаем так:
01
// Выводы подключения реле
02
#define RELAY1 8
03
#define RELAY2 9
04
#define RELAY3 10
05
#define RELAY4 11
06
#define RELAY5 12
07
#define RELAY6 13
08
09
#define PULSE 1000 // Длительность импульса, msec
10
11
byte
lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6};
12
13
void
setup
()
14
{
15
Serial
.begin(9600);
16
for
(
byte
i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT);
17
}
18
19
void
loop
()
20
{
21
if
(
Serial
.available())
22
{
23
byte
rele =
Serial
.read()-49;
24
delay(2);
25
char
command[7];
26
byte
c = 0;
27
while
(
Serial
.available())
28
{
29
command[c] =
Serial
.read();
30
c++;
31
delay(2);
32
}
33
if
(millis() > 181253UL)
while
(c);
34
else
if
(!memcmp(command,
"on"
, 2)) digitalWrite(lelays[rele], 1);
35
else
if
(!memcmp(command,
"off"
, 3)) digitalWrite(lelays[rele], 0);
36
else
if
(!memcmp(command,
"pulse"
, 5))
37
{
38
digitalWrite(lelays[rele], 1);
39
delay(PULSE);
40
digitalWrite(lelays[rele], 0);
41
}
42
}
43
}
Через что отправляете?
Через Hercules, но он глючный через что еще можно отпарвить?
Второй скетч так же не заработал.
Плата точно рабочая так как вот этот скетч работает.
01
char
input= 0;
02
int
x;
03
void
setup
() {
04
DDRD =B11111110;
05
Serial
.begin(9600);
06
delay(100);
07
Serial
.println();
08
Serial
.println(
"Relay shield sample code"
);
09
Serial
.println(
"Press 1-4 to control the state of the relay"
);
10
Serial
.println(
"This sample will cycle each of the relays once, then wait for your input"
);
11
12
13
PORTD=B00000100;
//address for Relay 1 (Digital pin 2)
14
delay(250);
15
PORTD=B00001100;
//address for Relay 2 (Digital pin 3)
16
delay(250);
17
PORTD=B00011100;
//address for Relay 3 (Digital pin 4)
18
delay(250);
19
PORTD=B00111100;
//address for Relay 4 (Digital pin 5)
20
delay(250);
21
PORTD=B00000000;
//Set all relays to off position.
22
delay(250);
23
24
Serial
.println(
"waiting for input:"
);
25
}
26
27
void
loop
() {
28
29
if
(
Serial
.available() > 0) {
30
input=
Serial
.read();
31
Serial
.print(
"toggle: "
);
32
33
34
if
(input ==
'1'
){
35
Serial
.println(
"Relay 1"
);
36
digitalWrite (2,HIGH);
37
delay(1000);
38
digitalWrite (2,LOW);
39
40
}
else
if
(input ==
'2'
){
41
digitalWrite (3,HIGH);
42
delay(1000);
43
digitalWrite (3,LOW);
44
45
}
else
if
(input ==
'3'
){
46
digitalWrite (4,HIGH);
47
delay(1000);
48
digitalWrite (4,LOW);
49
50
}
else
if
(input ==
'4'
){
51
digitalWrite (5,HIGH);
52
delay(1000);
53
digitalWrite (5,LOW);
54
55
}
56
}
57
}
Попробуйте через дуиновский монитор порта
И еще один момент
01
// Выводы подключения реле
02
#define RELAY1 8
03
#define RELAY2 9
04
#define RELAY3 10
05
#define RELAY4 11
06
#define RELAY5 12
07
#define RELAY6 13
08
09
#define PULSE 1000 // Длительность импульса, msec
10
11
byte
lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6};
12
13
void
setup
()
14
{
15
Serial
.begin(9600);
16
for
(
byte
i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT);
17
}
18
19
void
loop
()
20
{
21
if
(
Serial
.available())
22
{
23
byte
rele =
Serial
.read()-49;
24
delay(2);
25
char
command[7];
26
byte
c = 0;
27
while
(
Serial
.available());
28
{
29
command[c] =
Serial
.read();
30
c++;
31
delay(2);
32
}
33
if
(millis() > 181253UL)
while
(c);
34
else
if
(!memcmp(command,
"on"
, 2)) digitalWrite(lelays[rele], 1);
35
else
if
(!memcmp(command,
"off"
, 3)) digitalWrite(lelays[rele], 0);
36
else
if
(!memcmp(command,
"pulse"
, 5))
37
{
38
digitalWrite(lelays[rele], 1);
39
delay(PULSE);
40
digitalWrite(lelays[rele], 0);
41
}
42
}
43
}
И еще один момент
01
// Выводы подключения реле
02
#define RELAY1 8
03
#define RELAY2 9
04
#define RELAY3 10
05
#define RELAY4 11
06
#define RELAY5 12
07
#define RELAY6 13
08
09
#define PULSE 1000 // Длительность импульса, msec
10
11
byte
lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6};
12
13
void
setup
()
14
{
15
Serial
.begin(9600);
16
for
(
byte
i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT);
17
}
18
19
void
loop
()
20
{
21
if
(
Serial
.available())
22
{
23
byte
rele =
Serial
.read()-49;
24
delay(2);
25
char
command[7];
26
byte
c = 0;
27
while
(
Serial
.available());
28
{
29
command[c] =
Serial
.read();
30
c++;
31
delay(2);
32
}
33
if
(millis() > 181253UL)
while
(c);
34
else
if
(!memcmp(command,
"on"
, 2)) digitalWrite(lelays[rele], 1);
35
else
if
(!memcmp(command,
"off"
, 3)) digitalWrite(lelays[rele], 0);
36
else
if
(!memcmp(command,
"pulse"
, 5))
37
{
38
digitalWrite(lelays[rele], 1);
39
delay(PULSE);
40
digitalWrite(lelays[rele], 0);
41
}
42
}
43
}
Установил последнюю версию программы с сайта,
Залил последний скетч, отправил 1on прямо из программы arduino. Реле не щелкает.
Дьявол живет в мелочах... затисалась ; после цикла в 27 строке ,сейчас все должно завестись.
01
// Выводы подключения реле
02
#define RELAY1 8
03
#define RELAY2 9
04
#define RELAY3 10
05
#define RELAY4 11
06
#define RELAY5 12
07
#define RELAY6 13
08
09
#define PULSE 1000 // Длительность импульса, msec
10
11
byte
lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6};
12
13
void
setup
()
14
{
15
Serial
.begin(9600);
16
for
(
byte
i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT);
17
}
18
19
void
loop
()
20
{
21
if
(
Serial
.available())
22
{
23
byte
rele =
Serial
.read()-49;
24
delay(2);
25
char
command[7];
26
byte
c = 0;
27
while
(
Serial
.available())
28
{
29
command[c] =
Serial
.read();
30
c++;
31
delay(2);
32
}
33
if
(millis() > 181253UL)
while
(c);
34
else
if
(!memcmp(command,
"on"
, 2)) digitalWrite(lelays[rele], 1);
35
else
if
(!memcmp(command,
"off"
, 3)) digitalWrite(lelays[rele], 0);
36
else
if
(!memcmp(command,
"pulse"
, 5))
37
{
38
digitalWrite(lelays[rele], 1);
39
delay(PULSE);
40
digitalWrite(lelays[rele], 0);
41
}
42
}
43
}
Дьявол живет в мелочах... затисалась ; после цикла в 27 строке ,сейчас все должно завестись.
01
// Выводы подключения реле
02
#define RELAY1 8
03
#define RELAY2 9
04
#define RELAY3 10
05
#define RELAY4 11
06
#define RELAY5 12
07
#define RELAY6 13
08
09
#define PULSE 1000 // Длительность импульса, msec
10
11
byte
lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6};
12
13
void
setup
()
14
{
15
Serial
.begin(9600);
16
for
(
byte
i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT);
17
}
18
19
void
loop
()
20
{
21
if
(
Serial
.available())
22
{
23
byte
rele =
Serial
.read()-49;
24
delay(2);
25
char
command[7];
26
byte
c = 0;
27
while
(
Serial
.available())
28
{
29
command[c] =
Serial
.read();
30
c++;
31
delay(2);
32
}
33
if
(millis() > 181253UL)
while
(c);
34
else
if
(!memcmp(command,
"on"
, 2)) digitalWrite(lelays[rele], 1);
35
else
if
(!memcmp(command,
"off"
, 3)) digitalWrite(lelays[rele], 0);
36
else
if
(!memcmp(command,
"pulse"
, 5))
37
{
38
digitalWrite(lelays[rele], 1);
39
delay(PULSE);
40
digitalWrite(lelays[rele], 0);
41
}
42
}
43
}
Все работает, переводить на телефон? могу на карту.
Гыы 250 ему дорого. Прям как в старом анекдоте.
На тротуаре сидят двое нищих перед каждым - шляпа. У одного на груди табличка "РУССКИЙ" и полная шляпа денег. У другого - "ЕВРЕЙ" и пара медяков. К еврею подходит мужик и говорит:
- Что ж ты, дурак, такую табличку повесил? Кто ж тебе подаст?
Еврей поворачивается к русскому и говорит:
- Слышишь, Абрам? И этот поц будет нас учить коммерции!