Помогите разобраться, rgb контроллер.
- Войдите на сайт для отправки комментариев
Ср, 08/02/2017 - 09:49
Помогите разобраться в проблеме, собираю контроллер для RGB ленты на ардуино нано по этой схемме (http://fornk.ru/665-kontroller-dlya-upravleniya-rgb-svetodiodnoj-lentoj-na-mikrokontrollere-pic12f629/ )
, но возникла проблема.
каждый канал по отдельности работает и регулируется без проблем,
два канала одновременно работают. но не стабильно,
три канала вместе. только белый, и не регулируется.
Скетч?
01
#include <SoftwareSerial.h>
02
03
SoftwareSerial BLU(0,1);
04
05
#define redPin 5
06
#define greenPin 6
07
#define bluePin 9
08
#define COMMON_ANODE
09
10
void
setup
()
11
{
12
//Serial setup
13
Serial
.begin(9600);
14
Serial
.println(
"-= HC-05 Bluetooth RGB LED =-"
);
15
BLU.begin(9600);
16
BLU.println(
"-= HC-05 Bluetooth RGB LED =-"
);
17
18
pinMode(4, OUTPUT);
19
pinMode(redPin, OUTPUT);
20
pinMode(greenPin, OUTPUT);
21
pinMode(bluePin, OUTPUT);
22
digitalWrite(4,HIGH);
23
24
setColor(255, 0, 0);
// красный
25
delay(500);
26
setColor(0, 255, 0);
// зеленый
27
delay(500);
28
setColor(0, 0, 255);
// синий
29
delay(500);
30
setColor(255, 255, 0);
// желтый
31
delay(500);
32
setColor(255, 0, 255);
// фиолетовый
33
delay(500);
34
setColor(0, 255, 255);
// аквамарин
35
delay(500);
36
setColor(255, 255, 255);
// белый
37
delay(500);
38
39
}
40
41
void
loop
()
42
{
43
while
(BLU.available() > 0)
44
{
45
int
redInt = BLU.parseInt();
46
int
greenInt = BLU.parseInt();
47
int
blueInt = BLU.parseInt();
48
49
50
redInt = constrain(redInt, 0, 255);
51
greenInt = constrain(greenInt, 0, 255);
52
blueInt = constrain(blueInt, 0, 255);
53
54
if
(BLU.available() > 0)
55
{
56
setColor(redInt, greenInt, blueInt);
57
58
Serial
.print(
"Red: "
);
59
Serial
.print(redInt);
60
Serial
.print(
" Green: "
);
61
Serial
.print(greenInt);
62
Serial
.print(
" Blue: "
);
63
Serial
.print(blueInt);
64
Serial
.println();
65
66
BLU.flush();
67
}
68
}
69
}
70
71
void
setColor(
int
red,
int
green,
int
blue)
72
{
73
#ifdef COMMON_ANODE
74
red = 255 - red;
75
green = 255 - green;
76
blue = 255 - blue;
77
#endif
78
79
analogWrite(redPin, red);
80
analogWrite(greenPin, green);
81
analogWrite(bluePin, blue);
82
}
добавил в скетч сторки
01
setColor(25, 100, 10);
//
02
delay(500);
03
setColor(100, 55,50);
//
04
delay(500);
05
setColor(75, 90, 255);
//
06
delay(500);
07
setColor(35, 255, 60);
//
08
delay(500);
09
setColor(255, 30, 255);
//
10
delay(500);
11
setColor(40, 55, 75);
//
12
delay(500);
13
setColor(5, 25, 25);
//
14
delay(500);
цвет завис!?
а питаем мы все это дело от .. ?
запитано все это от 12вольт компьютерного БП.
HC-06 к выводам D0 D1 и питается от ардуины 3.3в
запустил скетч без БТ, вроде цвета меняются
Зачем БТ питается от 3.3 в ?
какой иммено HC-05 у вас ?
ну, даже не знаю как ответить, по даташиту HC-6 питается от 3.3вольт (если я не ошибаюсь) ну я и взял эти 3.3 с ардуины (нано)
Это да, только если он стоит на китайской плате, типа такой
то там уже есть, стабилизатор 3.3 в, и не факт что от входных 3.3 вольта он будет работать коррекно.
ок, попробую запитать бт от внешних 3.3в (от того же бп) может чего изменится.
насколько допустимо подать дополнительные 3.3в от того же бп, на пин 3.3 ардуины? ничего не погорит?
ище раз, какой у вас HC-06, голый или установленный на плату.
сам HC-06, на фото выше, зеленый, сидит на синей плате, в этом случае надо 5в.
"голый"
тогда это не поможет, потребление у него 20 мА, в спячке 4-5.
но попробуйте...
скеч щас ваш, компильну, посмотрим, мне кажется дело не в железе.
что прилетает по БТ, пример строки дайте.
в данный момент, залил скетч без БТ, просто несколько цветов, пока работает.
возможно из-за tx rx, на пинах 1,0 ???
выдавало строки типа red:225,green:46,blue:207
номера цветов совпадали.
а мне показалось что проблема в другом, что вы ожидаете от команды
1
BLU.flush();
??
этот скетч писал не я, нашел в готовом виде и подогнал под "свои" пины. как я понимаю это очистка буфера http://arduino.ru/Reference/Serial/Flush
Во поэтому лучше читать оригинал
https://www.arduino.cc/en/Serial/Flush
Это до версии 1.0, да отчистка и входящего и исходящего буферов (я думаю у вас версия IDE посвежее)
а сейчас это ожидание отправки из исходящего буфера.
чистить входящий можно так
1
while
(BLU.available()) BLU.read();
и да зачем вы повесили SoftwareSerial на пины на которм сидит "железный" сериал ардуины ?
заменил строку, теперь скетч заработал!!! но только когда ардуина подключена к пк(по usb). без подключения не работает.
ну как, зачем, сначала делаем потом думаем )
А что не работает то ? Вывод в Serial , так и не должен, или еще что то ?
Фотку того как все это подключено можно увидеть ?
сейчас попробую фото скинуть, пытался загрузить, но с не нашел как загрузить с пк.
не видно
https://drive.google.com/file/d/0B7bjlF5HsDYLZ3NIMHZuZUdreDg/view?usp=sharing
https://drive.google.com/file/d/0B7bjlF5HsDYLcDJBdWU3N0RscG8/view?usp=sharing
https://drive.google.com/file/d/0B7bjlF5HsDYLYVVyZnNfcjFWYjQ/view?usp=sharing
https://drive.google.com/file/d/0B7bjlF5HsDYLcGpDVFdFTjVYNVU/view?usp=sharing
я нажимал открыть в отдельной вкладке, вроде открывалось.
а указанным способом не удается загрузить, пишет типа ошибка загрузки.
пока ардуина подключена по кабелю к пк, все работает. после отключения кабеля ничего не работает, цвет не изменяется и т д
обнаружиась проблема с БТ ардуина никак не хочет принимать данные. в монитор порта. соответственно тоже ничего кроме "приветствия" не выдает. Пробовал разные БТ модули (все модули рабочие) ничего не меняется. Повесил БТ на другие (10,11) пины, ничего не меняется.
Подскажите, что еще можно проверить\изменить?
Сделал макетку, проверил все работает. Снял видос, за звук извиняйте, переснимать неохото..
01
#include <SoftwareSerial.h>
02
SoftwareSerial BLU(8
/*TX HC-06"*/
, 7
/*RX HC-06"*/
);
03
04
#define redPin 9
05
#define greenPin 10
06
#define bluePin 11
07
//#define COMMON_ANODE
08
09
void
setup
()
10
{
11
//Serial setup
12
Serial
.begin(9600);
13
Serial
.println(
"-= HC-05 Bluetooth RGB LED =-"
);
14
BLU.begin(9600);
15
BLU.println(
"-= HC-05 Bluetooth RGB LED =-"
);
16
17
pinMode(4, OUTPUT);
18
pinMode(redPin, OUTPUT);
19
pinMode(greenPin, OUTPUT);
20
pinMode(bluePin, OUTPUT);
21
digitalWrite(4, HIGH);
22
23
setColor(255, 0, 0);
// красный
24
delay(1000);
25
setColor(0, 255, 0);
// зеленый
26
delay(1000);
27
setColor(0, 0, 255);
// синий
28
delay(1000);
29
setColor(255, 255, 0);
// желтый
30
delay(1000);
31
setColor(255, 0, 255);
// фиолетовый
32
delay(1000);
33
setColor(0, 255, 255);
// аквамарин
34
delay(1000);
35
setColor(255, 255, 255);
// белый
36
delay(1000);
37
setColor(0, 0, 0);
// черный :)
38
delay(1000);
39
40
}
41
42
void
loop
()
43
{
44
while
(BLU.available() > 0)
45
{
46
int
redInt = BLU.parseInt();
47
int
greenInt = BLU.parseInt();
48
int
blueInt = BLU.parseInt();
49
50
51
redInt = constrain(redInt, 0, 255);
52
greenInt = constrain(greenInt, 0, 255);
53
blueInt = constrain(blueInt, 0, 255);
54
55
if
(BLU.available() > 0)
56
{
57
setColor(redInt, greenInt, blueInt);
58
59
Serial
.print(
"Red: "
);
60
Serial
.print(redInt);
61
Serial
.print(
" Green: "
);
62
Serial
.print(greenInt);
63
Serial
.print(
" Blue: "
);
64
Serial
.print(blueInt);
65
Serial
.println();
66
67
while
(BLU.available()) BLU.read();
68
69
}
70
}
71
}
72
73
void
setColor(
int
red,
int
green,
int
blue)
74
{
75
#ifdef COMMON_ANODE
76
red = 255 - red;
77
green = 255 - green;
78
blue = 255 - blue;
79
#endif
80
81
analogWrite(redPin, red);
82
analogWrite(greenPin, green);
83
analogWrite(bluePin, blue);
84
}
https://www.youtube.com/watch?v=1ps_SCJe2qI
видимо у меня в ардуине, чего-то накрылось. нужно на другой проверить.
Заменил ардуину, все заработало.