Здравствуйте, Господа.
На просторах интернета нашел необходимый мне скетч http://forum.amperka.ru/threads/Однокнопочный-диммер-на-arduino.8700/
Спасибо большое этому человеку.Идея в том чтобы сделать сенсорный выключатель на основе этого скетча. Вместо кнопки использовать ТТР223 и управлять светом так как показано в видео по ссылке выше. (тапнул 1 раз - свет включился, тапнул еще 1 раз - свет выключился, нажал и держишь, меняется яркость в одну сторону от 0 до максимума)
Скетч замечательно работает на одной кнопке, но не получается пришить сюда две и более, светодиоды на макетке начинают моргать хоотично, пытаешься включить один, включаются оба по очереди, изменения режима яркости работает импульсно. Короче, не правильно.
Вот изначальный код на 1 светодиод
#include "OneButton.h"
const int buttonPin = 2;
const int ledPin = 9;
const byte loga[64] =
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 22, 25, 28, 29, 30, 33, 36, 39, 42, 46,
49, 53, 56, 60, 64, 68, 72, 77, 81, 86, 90, 95, 100, 105, 110, 116, 121, 127, 132, 138, 144,
150, 156, 163, 169, 176, 182, 189, 196, 203, 210, 218, 225, 233, 240, 248, 255
};
int i = 1;
OneButton button(buttonPin, false);
int ledState = LOW;
int ledLevel = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
button.attachClick(clickedIt);
button.attachDuringLongPress(duringLongPressIt);
}
void loop() {
button.tick();
}
void clickedIt() {
if (ledState == LOW) {
for (int i = 0; i < 63; i++) {
analogWrite(ledPin, loga);
delay(10);
}
ledState = !ledState;
}
else {
if (ledLevel > 0 ) {
for (int i = ledLevel; i >= 0; i--) {
analogWrite(ledPin, loga);
delay(10);
}
}
else {
for (int i = 63; i >= 0; i--) {
analogWrite(ledPin, loga);
delay(10);
}
}
ledState = !ledState;
ledLevel = 0;
}
}
void duringLongPressIt() {
analogWrite(ledPin, loga[ledLevel]);
ledLevel = ledLevel + 1;
if (ledLevel >= 63) {
ledLevel = 63;
}
delay(50);
ledState = HIGH;
}
А код который попытался наколхозить я. Банально конечно, но блин, пока так
#include "OneButton.h"
const int buttonPin1 = 2;
const int ledPin1 = 9;
const int buttonPin2 = 3;
const int ledPin2 = 10;
const byte loga[64] =
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 22, 25, 28, 29, 30, 33, 36, 39, 42, 46,
49, 53, 56, 60, 64, 68, 72, 77, 81, 86, 90, 95, 100, 105, 110, 116, 121, 127, 132, 138, 144,
150, 156, 163, 169, 176, 182, 189, 196, 203, 210, 218, 225, 233, 240, 248, 255
};
int i = 0;
OneButton button1(buttonPin1, false);
OneButton button2(buttonPin2, false);
int ledState1 = LOW;
int ledLevel1 = 0;
int ledState2 = LOW;
int ledLevel2 = 0;
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin2, INPUT);
button1.attachClick(clickedIt1);
button1.attachDuringLongPress(duringLongPressIt1);
button2.attachClick(clickedIt2);
button2.attachDuringLongPress(duringLongPressIt2);
}
void loop() {
button1.tick();
button2.tick();
}
void clickedIt1() {
if (ledState1 == LOW) {
for (int i = 0; i < 63; i++) {
analogWrite(ledPin1, loga);
delay(10);
}
ledState1 = !ledState1;
}
else {
if (ledLevel1 > 0 ) {
for (int i = ledLevel1; i >= 0; i--) {
analogWrite(ledPin1, loga);
delay(10);
}
}
else {
for (int i = 63; i >= 0; i--) {
analogWrite(ledPin1, loga);
delay(10);
}
}
ledState1 = !ledState1;
ledLevel1 = 0;
}
}
void duringLongPressIt1() {
analogWrite(ledPin1, loga[ledLevel1]);
ledLevel1 = ledLevel1 + i;
if (ledLevel1 >= 63) {
ledLevel1 = 63;
}
delay(50);
ledState1 = HIGH;
}
void clickedIt2() {
if (ledState2 == LOW) {
for (int i = 0; i < 63; i++) {
analogWrite(ledPin2, loga);
delay(10);
}
ledState2 = !ledState2;
}
else {
if (ledLevel2 > 0 ) {
for (int i = ledLevel2; i >= 0; i--) {
analogWrite(ledPin2, loga);
delay(10);
}
}
else {
for (int i = 63; i >= 0; i--) {
analogWrite(ledPin2, loga);
delay(10);
}
}
ledState2 = !ledState2;
ledLevel2 = 0;
}
}
void duringLongPressIt2() {
analogWrite(ledPin2, loga[ledLevel2]);
ledLevel2 = ledLevel2 + i;
if (ledLevel2 >= 63) {
ledLevel2 = 63;
}
delay(50);
ledState2 = HIGH;
}
Со вторым кодом работает вообще непонятно как. Описать это тяжело, могу приложить видео
Вопрос в том как добавить 2 и более кнопок и светодиодов в этот код так чтобы они работали нормально
Подскажите кто может
На просторах интернета нашел необходимый мне скетч http://forum.amperka.ru/threads/Однокнопочный-диммер-на-arduino.8700/
Спасибо большое этому человеку.Идея в том чтобы сделать сенсорный выключатель на основе этого скетча. Вместо кнопки использовать ТТР223 и управлять светом так как показано в видео по ссылке выше. (тапнул 1 раз - свет включился, тапнул еще 1 раз - свет выключился, нажал и держишь, меняется яркость в одну сторону от 0 до максимума)
Скетч замечательно работает на одной кнопке, но не получается пришить сюда две и более, светодиоды на макетке начинают моргать хоотично, пытаешься включить один, включаются оба по очереди, изменения режима яркости работает импульсно. Короче, не правильно.
Вот изначальный код на 1 светодиод
#include "OneButton.h"
const int buttonPin = 2;
const int ledPin = 9;
const byte loga[64] =
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 22, 25, 28, 29, 30, 33, 36, 39, 42, 46,
49, 53, 56, 60, 64, 68, 72, 77, 81, 86, 90, 95, 100, 105, 110, 116, 121, 127, 132, 138, 144,
150, 156, 163, 169, 176, 182, 189, 196, 203, 210, 218, 225, 233, 240, 248, 255
};
int i = 1;
OneButton button(buttonPin, false);
int ledState = LOW;
int ledLevel = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
button.attachClick(clickedIt);
button.attachDuringLongPress(duringLongPressIt);
}
void loop() {
button.tick();
}
void clickedIt() {
if (ledState == LOW) {
for (int i = 0; i < 63; i++) {
analogWrite(ledPin, loga);
delay(10);
}
ledState = !ledState;
}
else {
if (ledLevel > 0 ) {
for (int i = ledLevel; i >= 0; i--) {
analogWrite(ledPin, loga);
delay(10);
}
}
else {
for (int i = 63; i >= 0; i--) {
analogWrite(ledPin, loga);
delay(10);
}
}
ledState = !ledState;
ledLevel = 0;
}
}
void duringLongPressIt() {
analogWrite(ledPin, loga[ledLevel]);
ledLevel = ledLevel + 1;
if (ledLevel >= 63) {
ledLevel = 63;
}
delay(50);
ledState = HIGH;
}
А код который попытался наколхозить я. Банально конечно, но блин, пока так
#include "OneButton.h"
const int buttonPin1 = 2;
const int ledPin1 = 9;
const int buttonPin2 = 3;
const int ledPin2 = 10;
const byte loga[64] =
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 22, 25, 28, 29, 30, 33, 36, 39, 42, 46,
49, 53, 56, 60, 64, 68, 72, 77, 81, 86, 90, 95, 100, 105, 110, 116, 121, 127, 132, 138, 144,
150, 156, 163, 169, 176, 182, 189, 196, 203, 210, 218, 225, 233, 240, 248, 255
};
int i = 0;
OneButton button1(buttonPin1, false);
OneButton button2(buttonPin2, false);
int ledState1 = LOW;
int ledLevel1 = 0;
int ledState2 = LOW;
int ledLevel2 = 0;
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin2, INPUT);
button1.attachClick(clickedIt1);
button1.attachDuringLongPress(duringLongPressIt1);
button2.attachClick(clickedIt2);
button2.attachDuringLongPress(duringLongPressIt2);
}
void loop() {
button1.tick();
button2.tick();
}
void clickedIt1() {
if (ledState1 == LOW) {
for (int i = 0; i < 63; i++) {
analogWrite(ledPin1, loga);
delay(10);
}
ledState1 = !ledState1;
}
else {
if (ledLevel1 > 0 ) {
for (int i = ledLevel1; i >= 0; i--) {
analogWrite(ledPin1, loga);
delay(10);
}
}
else {
for (int i = 63; i >= 0; i--) {
analogWrite(ledPin1, loga);
delay(10);
}
}
ledState1 = !ledState1;
ledLevel1 = 0;
}
}
void duringLongPressIt1() {
analogWrite(ledPin1, loga[ledLevel1]);
ledLevel1 = ledLevel1 + i;
if (ledLevel1 >= 63) {
ledLevel1 = 63;
}
delay(50);
ledState1 = HIGH;
}
void clickedIt2() {
if (ledState2 == LOW) {
for (int i = 0; i < 63; i++) {
analogWrite(ledPin2, loga);
delay(10);
}
ledState2 = !ledState2;
}
else {
if (ledLevel2 > 0 ) {
for (int i = ledLevel2; i >= 0; i--) {
analogWrite(ledPin2, loga);
delay(10);
}
}
else {
for (int i = 63; i >= 0; i--) {
analogWrite(ledPin2, loga);
delay(10);
}
}
ledState2 = !ledState2;
ledLevel2 = 0;
}
}
void duringLongPressIt2() {
analogWrite(ledPin2, loga[ledLevel2]);
ledLevel2 = ledLevel2 + i;
if (ledLevel2 >= 63) {
ledLevel2 = 63;
}
delay(50);
ledState2 = HIGH;
}
Со вторым кодом работает вообще непонятно как. Описать это тяжело, могу приложить видео
Вопрос в том как добавить 2 и более кнопок и светодиодов в этот код так чтобы они работали нормально
Подскажите кто может