Выбор действий одной кнопкой
- Войдите на сайт для отправки комментариев
Здраствуйте. Помогите отладить скетч.
Управление свеодиодной лентой.
1 - Почемуто нестабильно работает кнопка.
2 - Пока не закончится подпрограмма (Leds_x), нет реакци на кнопку.
Нужно так чтобы в момент нажатия кнопки прогама переходила к соответствующей подпрограмме, переывая роботу прежней.
//LEDS_0(); // Вся лінійка вимкнена
//LEDS_1(); // Ліва/Права сторона (лінійка 0 і 3) світяться білим
//LEDS_2(); // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають білим
//LEDS_3(); // Ліва/Права сторона (лінійка 0 і 3) разом моргають білим
//LEDS_4(); // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають синім і червоним
//LEDS_5(); // Ліва/Права сторона (лінійка 0 і 3) разом моргають ЖОВТИМ
//LEDS_6(); // Вся лінійка моргає білим, стробоскоп
//LEDS_7(); // Вся одночасно лінійка переливається різними кольрами
//LEDS_8(); // Червоний кусочок бігає туди-сюди
#include <Adafruit_NeoPixel.h>
#define LED_PIN 11 // Вихід на свєтодіоди
#define KEY_PIN 2 // Кнопка
#define NUM_LEDS 144 // Кількість діодів на всі лінійці
#define STICK_NUM 4 // Кількість сборок
#define PIXEL_IN_STICK 36 // Кількість свєтодіодів в зборці
#define PIXEL_NUM (STICK_NUM * PIXEL_IN_STICK) // 4 х 36 = 144
boolean lastButton=LOW;
boolean currentButton=LOW;
int ledMode=0;
int d = 500; // Час затримки
int StickNum_0 = 0; // Порядковий номер сборки 1
int StickNum_1 = 1; // Порядковий номер сборки 2
int StickNum_2 = 2; // Порядковий номер сборки 3
int StickNum_3 = 3; // Порядковий номер сборки 4
int val=9;
//int val;
int state;
int c;
// Змінні для LEDS_6(); // Вся лінійка моргає білим, стробоскоп
byte red_6=255;
byte green_6=255;
byte blue_6=255;
int StrobeCount_6=10;
int FlashDelay_6=50;
int EndPause_6=1000;
/*
// Змінні для LEDS_6(); // Вся лінійка моргає жовтим, стробоскоп
byte red_6=255; //0xff
byte green_6=199; //0x77
byte blue_6=0; //0x00
int StrobeCount_6=10; //10
int FlashDelay_6=100; //100
int EndPause_6=1000; //1000
*/
// Змінні для LEDS_8(); // Червоний кусочок бігає туди-сюди
byte red_8=0; //255
byte green_8=0; // 0
byte blue_8=255; //0
int EyeSize_8=20;
int SpeedDelay_8=1;
int ReturnDelay_8=50;
byte red_81=255; //255
byte green_81=0; // 0
byte blue_81=255; //0
Adafruit_NeoPixel LEDS = Adafruit_NeoPixel(PIXEL_NUM, LED_PIN, NEO_GRB + NEO_KHZ800);
//----------------------------------------
void setup()
{
pinMode(KEY_PIN, INPUT_PULLUP);
digitalWrite(KEY_PIN, HIGH);
attachInterrupt(0, pinChange, CHANGE);
Serial.begin(9600);
LEDS.begin();
LEDS.show();
Serial.println("Open");
}
//----------------------------------------
/*
boolean debounce(boolean last)
{
boolean current = digitalRead(KEY_PIN);
if (last != current)
{
delay(5);
//Serial.println(delay);
current = digitalRead(KEY_PIN);
return current;
}
}
//----------------------------------------
void setMode(int mode)
{
switch (mode)
{
case 0:
//LEDS_0();
break;
case 1:
LEDS_1();
break;
case 2:
LEDS_2();
break;
case 3:
LEDS_3();
break;
case 4:
LEDS_4();
break;
case 5:
LEDS_5();
break;
case 6:
LEDS_6();
break;
case 7:
LEDS_7();
break;
case 8:
LEDS_8();
break;
case 9:
//LEDS_9();
break;
case 10:
//LEDS_10();
break;
case 11:
//LEDS_11();
break;
case 12:
//LEDS_12();
break;
}
}
//----------------------------------------
void loop()
{
currentButton=debounce(lastButton);
if (lastButton==LOW && currentButton==HIGH)
{
ledMode++;
}
lastButton=currentButton;
if (ledMode == 13)
{
ledMode=0;
//Serial.println(0);
}
//pinChange();
setMode(ledMode);
Serial.println(ledMode);
Serial.println();
}
*/
//----------------------------------------
void loop()
{
//pinChange();
Serial.println("loop");
/*
state = digitalRead(KEY_PIN);
if (state == HIGH && c == 0) // нажали кнопку
{
c = 1;
}
if (state == LOW && c == 1) // отпустили кнопку
{
val = ++val;
if (val == 12)
{
val = 0;
}
c = 0;
}
// ======= Вполняем задачу при выборе режима =======
Serial.print("-");
Serial.println(val);
*/
//-----------
if (val == 0)
{
LEDS_0();
Serial.println("led_0");
}
//-----------
if (val == 1)
{
LEDS_1();
Serial.println("led_1");
}
//-----------
if (val == 2)
{
LEDS_2();
Serial.println("led_2");
}
//-----------
if (val == 3)
{
LEDS_3();
Serial.println("led_3");
}
//-----------
if (val == 4)
{
LEDS_4();
Serial.println("led_4");
}
//-----------
if (val == 5)
{
LEDS_5();
Serial.println("led_5");
}
//-----------
if (val == 6)
{
LEDS_6();
Serial.println("led_6");
}
//-----------
if (val == 7)
{
LEDS_7();
Serial.println("led_7");
}
//-----------
if (val == 8)
{
LEDS_8();
Serial.println("led_8");
}
//-----------
if (val == 9)
{
LEDS_9();
Serial.println("led_9");
}
//-----------
if (val == 10)
{
//LEDS_10();
//Serial.println("led_10");
}
//-----------
if (val == 11)
{
//LEDS_11();
//Serial.println("led_11");
}
//-----------
if (val == 12)
{
//LEDS_2();
//Serial.println("led_12");
}
//-----------
delay(10);
}
//----------------------------------------
void pinChange()
{
state = digitalRead(KEY_PIN);
if (state == HIGH && c == 0) // нажали кнопку
{
c = 1;
}
if (state == LOW && c == 1) // отпустили кнопку
{
val = ++val;
if (val == 12)
{
val = 0;
}
c = 0;
}
Serial.println("+*- ");
//delay(3000);
Serial.print("+ ");
Serial.println(val);
// **********************************
// ======= Вполняем задачу при выборе режима =======
/*
//-----------
if (val == 0)
{
LEDS_0();
Serial.println("led_0");
}
//-----------
if (val == 1)
{
LEDS_1();
Serial.println("led_1");
}
//-----------
if (val == 2)
{
LEDS_2();
Serial.println("led_2");
}
//-----------
if (val == 3)
{
LEDS_3();
Serial.println("led_3");
}
//-----------
if (val == 4)
{
LEDS_4();
Serial.println("led_4");
}
//-----------
if (val == 5)
{
LEDS_5();
Serial.println("led_5");
}
//-----------
if (val == 6)
{
//LEDS_6();
Serial.println("led_6");
}
//-----------
if (val == 7)
{
//LEDS_7();
Serial.println("led_7");
}
//-----------
if (val == 8)
{
//LEDS_8();
Serial.println("led_8");
}
//-----------
if (val == 9)
{
//LEDS_9();
//Serial.println("led_9");
}
//-----------
if (val == 10)
{
//LEDS_10();
//Serial.println("led_10");
}
//-----------
if (val == 11)
{
//LEDS_11();
//Serial.println("led_11");
}
//-----------
if (val == 12)
{
//LEDS_2();
//Serial.println("led_12");
}
//-----------
delay(10);
// **********************************
*/
}
//----------------------------------------
void LEDS_0() // Вся лінійка вимкнена
{
//Serial.println("LEDS_0");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0);
LEDS.show();
}
//----------------------------------------
void LEDS_1() // Ліва/Права сторона (лінійка 0 і 3) світяться білим
{
//Serial.println("LEDS_1");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255);
LEDS.show();
}
//----------------------------------------
void LEDS_2() // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають білим
{
//Serial.println("LEDS_2");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0);
LEDS.show();
}
//----------------------------------------
void LEDS_3() // Ліва/Права сторона (лінійка 0 і 3) разом моргають білим
{
//Serial.println("LEDS_3");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255);
LEDS.show();
}
//----------------------------------------
void LEDS_4() // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають синім і червоним
{
//Serial.println("LEDS_4");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 255);//(red,green,blue)
//LEDS.setPixelColor(j, 255, 255, 255);
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0);
LEDS.show();
}
//----------------------------------------
void LEDS_5() // Ліва/Права сторона (лінійка 0 і 3) разом моргають ЖОВТИМ
{
//Serial.println("LEDS_5");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 0);
LEDS.show();
byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK;
for (byte j = StartPixel_1; j < (StartPixel_1 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_1; j < (StartPixel_1 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0);
LEDS.show();
}
//----------------------------------------
void LEDS_6() // Вся лінійка моргає білим, стробоскоп
{
//Serial.println("LEDS_6");
for(int j = 0; j < StrobeCount_6; j++) {
setAll_6(red_6,green_6,blue_6);
showStrip_6();
delay(FlashDelay_6);
setAll_6(0,0,0);
showStrip_6();
delay(FlashDelay_6);
}
delay(EndPause_6);
}
//----------------------------------------
void LEDS_7() // Вся одночасно лінійка переливається різними кольрами
{
//Serial.println("LEDS_7");
for(int j = 0; j < 3; j++ ) {
// Fade IN
for(int k = 0; k < 256; k++) {
switch(j) {
case 0: setAll_6(k,0,0); break;
case 1: setAll_6(0,k,0); break;
case 2: setAll_6(0,0,k); break;
}
showStrip_6();
delay(3);
}
// Fade OUT
for(int k = 255; k >= 0; k--) {
switch(j) {
case 0: setAll_6(k,0,0); break;
case 1: setAll_6(0,k,0); break;
case 2: setAll_6(0,0,k); break;
}
showStrip_6();
delay(3);
}
}
}
//----------------------------------------
void LEDS_8() // Червоний кусочок бігає туди-сюди
{
//Serial.println("LEDS_8");
for(int i = 0; i < NUM_LEDS-EyeSize_8-2; i++) {
setAll_6(0,0,0);
setPixel_6(i, red_8/10, green_8/10, blue_8/10);
for(int j = 1; j <= EyeSize_8; j++) {
//setPixel(i+j, red, green, blue);
setPixel_6(i+j, red_8, green_8, blue_8);
}
setPixel_6(i+EyeSize_8+1, red_8/10, green_8/10, blue_8/10);
showStrip_6();
delay(SpeedDelay_8);
}
delay(ReturnDelay_8);
for(int i = NUM_LEDS-EyeSize_8-2; i > 0; i--) {
setAll_6(0,0,0);
setPixel_6(i, red_81/10, green_81/10, blue_81/10);
for(int j = 1; j <= EyeSize_8; j++) {
setPixel_6(i+j, red_81, green_81, blue_81);
}
setPixel_6(i+EyeSize_8+1, red_81/10, green_81/10, blue_81/10);
showStrip_6();
delay(SpeedDelay_8);
}
delay(ReturnDelay_8);
}
//----------------------------------------
/*
void LEDS_9() // Ліва/Права сторона (лінійка 0 і 3) світяться білим
{
//Serial.println("LEDS_99");
LEDS.show();
byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK;
byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK;
byte StartPixel_2 = StickNum_2 * PIXEL_IN_STICK;
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
for (byte i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (byte j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
for (byte j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
}
*/
//----------------------------------------
void LEDS_9() // Ліва/Права сторона (лінійка 0 і 3) світяться білим
{
//Serial.println("LEDS_99");
LEDS.show();
byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK;
byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK;
byte StartPixel_2 = StickNum_2 * PIXEL_IN_STICK;
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
byte j;
byte i;
//LEDS.show();
for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
for (i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
for (j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
}
//----------------------------------------
//////////// ----------------------------////////////
void showStrip_6()
{
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
LEDS.show();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show();
#endif
}
void setPixel_6(int Pixel, byte red, byte green, byte blue)
{
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
LEDS.setPixelColor(Pixel, LEDS.Color(red, green, blue));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds[Pixel].r = red;
leds[Pixel].g = green;
leds[Pixel].b = blue;
#endif
}
void setAll_6(byte red, byte green, byte blue)
{
for(int i = 0; i < NUM_LEDS; i++ ) {
setPixel_6(i, red, green, blue);
}
showStrip_6();
}
//////////// ----------------------------////////////
Понятия не имею как можнео испольвать millis() в этом коде.
Переключение одной кнопкой millis() работает.
Извините, новачок.
// delay (d);
Разные варианты, лишне закомментировано.
У Вас нажатие кнопки происходит в прерывании, это надо исполизовать. Посмотрите пример ниже где это используется для 2х val=0 и =1 Если подойдет остальное напишете сами, только прочитайте коментарий
Код написан на Даун-Си. А это значит, что он уже глючен уже в задумке. Глубоко изучай Си и Си++, иначе вы врят ли чего-то полезное напишете.
Спасбо, за посказку, пока работает.
Только в ЛЕД_8 не всегда віходит из подпрограмми.
Вопрост про кнопку, неуспеешь дотронутся как нажимается, как будто реагирует на дребезг, проскакует на один-два шага в перед. Как использовать millis() в даном скетче?
Вот ссылка https://lesson.iarduino.ru/page/podklyuchaem-moduli-neopixel-na-baze-ws2812b-svetodiodov-k-arduino/
Вот так надо решать эту задачу. А не писать Даун-Си кодом программы, как делают некоторые.
Всем спасибо. Я не волшебник, я только учусь )))
Благодарствую за помощь.
Все заработало.
Только в одна из подпрогамм не реагирует на кнопку, вошел в режим-6, режим запустился, при последующем нажатии нет реакции на кнопку.
Єто режим стробоскопа
delay(FlashDelay_6);
//FlashDelay_6 = 100
шо это за херня?
извините исправлю. Задержка 100мс
Єто часть кода
Насколько я понимаю проблема в задержке - delay, подскажите как сделать через milles. Спасибо
подскажите как сделать через milles. Спасибо
#392
Спасибо
Немного не тот эфект получается ))).
Это требуэмый эфект - https://drive.google.com/file/d/0B6Q_8K_WZ8uuUXprUXB4TzQ0VEE/view?usp=sharing
Он работает как надо. Только не реагирует на нажатия кнопки.
Это эвект по вашему испраленому коду https://drive.google.com/file/d/0B6Q_8K_WZ8uuanRkdHRlem0wODQ/view?usp=sharing
Я понима что проблема в ДЕЛЕЙ, но никак неполучается сделать этот эфеткр на МИЛЛИС,
Спасибо, всем помогающим
Попробуйте так
Спасибо
Неработает как надо.
Выкладываю робоччий код, только не реагтрует на кнопку во время микания, в тот момент когда линейка потушена - на кнопку реакуия есть, в тот момент когда происхордит мигание - нет реакции на кнопку.
Весь код переписан по примеру в посте #9
По этому коду моргает линейка постоянно ,без пауз. Должно быть 10 вспышек, пауза 1 сек, и опять 10 вспышек.
в 24 строке явно должно быть past1, а не past
Кроме того, непонятно, зачем вы обьявляете flag дважды и не ясно. зачем он и куча других переменных обьявлено static - я не вижу. чтобы вы их использовали между циклами.
И еще в 30-й строке я бы заменил итератор с j на какую-то другую букву - просто чтобы не путаться
Я не профи, я только иследую ардуино, так что уж извиняйте )))) . Сейчас попобую.
Спасибо всем, этот режим-6 заработал!!!!
Режим-8. Работает как нада, но не реагирует на кнопку.
часть с 20 сведодиодов "бегает" с края в край.
И по режиму-6, все заработало, только между вспышками, не тухнет вся линейка, а горит. Работает так - 10 вспышек, и гори 1 сек, и опять 10 вспышек, нужно - 10 вспышек и ТУХНЕТ )))
И по режиму-6, все заработало, только между вспышками, не тухнет вся линейка, а горит. Работает так - 10 вспышек, и гори 1 сек, и опять 10 вспышек, нужно - 10 вспышек и ТУХНЕТ )))
Самое простое - период большего цикла у вас должен включать нечетное кол-во малых циклов. Например, в строке 13 период вместо 1000 поставьте или 900 или 1100
И по режиму-6, все заработало, только между вспышками, не тухнет вся линейка, а горит. Работает так - 10 вспышек, и гори 1 сек, и опять 10 вспышек, нужно - 10 вспышек и ТУХНЕТ )))
Самое простое - период большего цикла у вас должен включать нечетное кол-во малых циклов. Например, в строке 13 период вместо 1000 поставьте или 900 или 1100
Пробывал - ничего неизменилось.
Суть в том что некоторое время поргает и светится, потом моргает и тухнет, потом все повторяется.
Могу видео снять или выложить весь код.
Изменяя период в троке 13 и 23 (режим-6), лента ведет себя по разному, ни не так как нада .
#25
Все правильно. У вас малый цикл исполняется каждые 100мсек, но перключение лент тоже требует времени и 10 таких циклов занимают не 1000 мсек, а немного больше. Разница эта все время растет и поэтому переключение программы "плавает".
Вам надо в большем цикле переключать параметр j не по времени, а по числу малых циклов. 10 малых циклов отыграло - поменяли j на !j
Вам надо в большем цикле переключать параметр j не по времени, а по числу малых циклов. 10 малых циклов отыграло - поменяли j на !j
С этим чет не понял, сори.
По коду из #25
В 13 строчке увеличте время ~ 2000 (if (millis() - past > 2000)
Для того чтобы потушить, между вспышками, после окончания цыкла , for, выход установите в 0
Пробывал увеличивать - не помогло.
Также пробывал тушить в конце - не тот эфект получается.
Возможно не там тушил
Спаибо что откликнулись
Можно узнать что у Вас "не помогло" нет паузы между 10ю вспышками, Нет отключения после вспышек или то и другое?
Запуск режима - потухла лента на 1 сек - 10 вспышек - засветилась 1 сек - 10 вспышек - зесветилась 1 сек, иногда тухнет на 1 сек, нужно чтоб после вспышек тухла! А НЕ Засвечивалась!
Если нада - могу снять видео!
Нужен такой эфект - https://drive.google.com/file/d/0B6Q_8K_WZ8uuUXprUXB4TzQ0VEE/view
Жаль проверить не на чем. попробуйте и отпишите
https://drive.google.com/open?id=0B6Q_8K_WZ8uuUGYwV0RBcUd0c2M - Эфект как у меня, смотрите эфект-6, после вспышек - горит вся лента.
https://drive.google.com/open?id=0B6Q_8K_WZ8uubGVydHZSTUdPMEk - эфект по примеру #42, не работает как надо.
Весь код (неправильно работает эфект 6 и 8)
я же вам написал как сделать. Уберите проверку верхнего таймаута в 1000 мсек, вместо этого считайте вспышки. Вспыхнуло 10 раз - погасите ленту и подождите 1 сек. Потом все снова.
Другой вариант - разобраться с лишними static переменными. Они у вас хранят значения между циклами, а вам нужно обнулять состояние ленты каждые 10 вспышек. Но это труднее обьяснить на пальцах, а переписывать за вас ваш код мне некогда, сорри
или третий вариант - сделайте как вам советуют в сообщении #37
Мигает постоянно
Задержки нету между вспышками
Через - delay работает эфект как надо, но не реагирует на кнопку
или третий вариант - сделайте как вам советуют в сообщении #37 - работет, но не тот эфект.
Другой вариант - разобраться с лишними static переменными. Они у вас хранят значения между циклами, а вам нужно обнулять состояние ленты каждые 10 вспышек. Но это труднее обьяснить на пальцах, а переписывать за вас ваш код мне некогда, сорри
Насколько я понял, переменная - past сохраняется после выхода из подпрограммы, и нужно поменя названия меременных - past в других подпрограммах (уже сделано, в каждой подпрограмме, другая переменная).
Непомоголо.
я же вам написал как сделать. Уберите проверку верхнего таймаута в 1000 мсек, вместо этого считайте вспышки. Вспыхнуло 10 раз - погасите ленту и подождите 1 сек. Потом все снова.
Скорре всего неправильно реализовую в коде.
Попробуйте вот так - это проще, чем обьяснять счет вспышек