# Ajuda com millis

**URL:** <https://forum.fazedores.com/t/ajuda-com-millis/7259>\
**Category:** Arduino\
**Created:** [Abril 23, 2020, 8:53pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259 "2020-04-23T20:53:28Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Matheus\_Avelino](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/matheus_avelino/32/3314_2.png) [@Matheus\_Avelino](https://forum.fazedores.com/u/Matheus_Avelino)\
**Post date:** [Abril 23, 2020, 8:53pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/1 "2020-04-23T20:53:28Z")

</div>

Ola boa tarde, estou controlando uma fita de leds rgb com arduino, e gostaria de saber como utilizar o millis para fazer uma pausa de 5 segundos entre três cores.Ex  
vermelho  
millis 5 segundos  
verde  
millis 5 segundos  
azul  
millis 5 segundos

---

<div class="post-metadata">

**Author:** ![OLA\_123](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/ola_123/32/3280_2.png) [@OLA\_123](https://forum.fazedores.com/u/OLA_123)\
**Post date:** [Abril 24, 2020, 11:46am UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/2 "2020-04-24T11:46:05Z")

</div>

olá, eu dei uma procurada na documentação do Arduíno, e o comando millis não é para controlar o tempo e sim para Retornar o número de milissegundos passados desde que a placa Arduino começou a executar o programa atual.  
se vc quiser controlar o tempo use o delay() 🙂  
aqui eu deixo a documentação dos dois comandos: [millis](https://www.arduino.cc/reference/pt/language/functions/time/millis/) e [delay](https://www.arduino.cc/reference/pt/language/functions/time/delay/)  
conseguiu ai amigo?

---

<div class="post-metadata">

**Author:** ![Matheus\_Avelino](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/matheus_avelino/32/3314_2.png) [@Matheus\_Avelino](https://forum.fazedores.com/u/Matheus_Avelino)\
**Post date:** [Abril 24, 2020, 8:02pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/3 "2020-04-24T20:02:06Z")

</div>

Ola amigo, eu estou tentando utilizar o millis pois o delay trava o programa quando tento enviar os valores pela porta serial, eu conseguir fazer a pausa com o millis, só que as cores estão erradas. Eu envio vermelho,verde,azul e e a fita acende vermelho,verde pisca o vermelho rapidamente e acende o azul.

if (millis() - delay1 \>= 5000) {

```
delay1 = millis();//5000

for (int x = 0; x < 60; x++) {

  pixels_0.pixels.setPixelColor(x, pixels_0.pixels.Color(valorSerialInt[3], valorSerialInt[4], valorSerialInt[5]));
  pixels_0.pixels.setBrightness(valorSerialInt[2]);
  pixels_0.pixels.show();

}

```

}//vermelho verde vermelho azul

if (millis() - delay2 \>= 10000) {

```
delay2 = millis();//10000

for (int x = 0; x < 60; x++) {

  pixels_0.pixels.setPixelColor(x, pixels_0.pixels.Color(valorSerialInt[6], valorSerialInt[7], valorSerialInt[8]));
  pixels_0.pixels.setBrightness(valorSerialInt[2]);
  pixels_0.pixels.show();

}

```

}

if (millis() - delay3 \>= 15000) {

```
delay3 = millis();

for (int x = 0; x < 60; x++) {

  pixels_0.pixels.setPixelColor(x, pixels_0.pixels.Color(valorSerialInt[9], valorSerialInt[10], valorSerialInt[11]));
  pixels_0.pixels.setBrightness(valorSerialInt[2]);
  pixels_0.pixels.show();

}

```

}

---

<div class="post-metadata">

**Author:** ![OLA\_123](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/ola_123/32/3280_2.png) [@OLA\_123](https://forum.fazedores.com/u/OLA_123)\
**Post date:** [Abril 24, 2020, 11:00pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/4 "2020-04-24T23:00:12Z")

</div>

olá,  
desculpa mas eu não tenho conhecimento sobre o controle de fitas led, mas posso tentar ajudar  
esse é o codigo completo?  
pelo o que eu entendi no seu código você está usando o millis para controlar o tempo de excussão de cada cor, certo?

> > [@Matheus\_Avelino](#):
> >
> > pixels\_0.pixels.setPixelColor(x, pixels\_0.pixels.Color(valorSerialInt[9], valorSerialInt[10], valorSerialInt[11]));  
> > pixels\_0.pixels.setBrightness(valorSerialInt[2]); pixels\_0.pixels.show();
> 
> essa seria a parte que liga alguma das 3 cores?, se sim não teria um código para desligar \>a cor?

eu pesquisei um pouco e achei alguns sites e videos :  
[https://www.robocore.net/tutorials/controle-fita-led-com-arduino](https://www.robocore.net/tutorials/controle-fita-led-com-arduino)

[![](https://img.youtube.com/vi/qwbdbFI2pBU/maxresdefault.jpg "FITA LED RGB | Curso de Arduino #138") ](https://www.youtube.com/watch?v=qwbdbFI2pBU)

talvez seja util, até

---

<div class="post-metadata">

**Author:** ![Matheus\_Avelino](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/matheus_avelino/32/3314_2.png) [@Matheus\_Avelino](https://forum.fazedores.com/u/Matheus_Avelino)\
**Post date:** [Abril 24, 2020, 11:45pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/5 "2020-04-24T23:45:00Z")

</div>

Ola amigo, a ligação já esta toda feita, se eu utilizar o delay tudo funciona perfeitamente, o porem é que para enviar outros valores tenho tenho que esperar os 15 segundos, abaixo vou deixar o sketch pra vc da uma olhada.

#include \<EEPROM.h\>  
#include \<Adafruit\_NeoPixel.h\>  
class Pixels  
{  
public:  
uint8\_t effect;  
uint8\_t effects;  
uint16\_t effStep;  
unsigned long effStart;  
Adafruit\_NeoPixel pixels;  
Pixels(uint16\_t leds, uint8\_t pin, uint8\_t toteffects, uint16\_t pixelstype) : pixels(leds, pin, pixelstype) {  
effect = -1;  
effects = toteffects;  
Reset();  
}  
void Reset() {  
effStep = 0;  
effect = (effect + 1) % effects;  
effStart = millis();  
}  
};  
struct Loop  
{  
uint8\_t currentChild;  
uint8\_t childs;  
bool timeBased;  
uint16\_t cycles;  
uint16\_t currentTime;  
Loop(uint8\_t totchilds, bool timebased, uint16\_t tottime) {  
currentTime = 0;  
currentChild = 0;  
childs = totchilds;  
timeBased = timebased;  
cycles = tottime;  
}  
};

Pixels pixels\_0(60, 6, 60, NEO\_GRB + NEO\_KHZ800);  
struct Loop pixels0loop0(1, false, 1);

//[GLOBAL\_VARIABLES]  
String valorSerialString[18], tempoMil, tempoSeg, valores;  
byte valorSerialInt[18];  
int tempomil, temposeg, tempomilTotal, temposegTotal, numeroAleatorio0, numeroAleatorio1, numeroAleatorio2;  
unsigned long delay1 = 0;  
unsigned long delay2 = 0;  
unsigned long delay3 = 0;

void setup() {

pixels\_0.pixels.begin();  
Serial.begin(9600);

valorSerialInt[0] = EEPROM.read(0);  
valorSerialInt[1] = EEPROM.read(1);  
valorSerialInt[2] = EEPROM.read(2);  
tempomil = EEPROM.read(3);  
temposeg = EEPROM.read(4);

valorSerialInt[3] = EEPROM.read(5);  
valorSerialInt[4] = EEPROM.read(6);  
valorSerialInt[5] = EEPROM.read(7);

valorSerialInt[6] = EEPROM.read(8);  
valorSerialInt[7] = EEPROM.read(9);  
valorSerialInt[8] = EEPROM.read(10);

valorSerialInt[9] = EEPROM.read(11);  
valorSerialInt[10] = EEPROM.read(12);  
valorSerialInt[11] = EEPROM.read(13);

valorSerialInt[12] = EEPROM.read(14);  
valorSerialInt[13] = EEPROM.read(15);  
valorSerialInt[14] = EEPROM.read(16);

valorSerialInt[15] = EEPROM.read(17);  
valorSerialInt[16] = EEPROM.read(18);  
valorSerialInt[17] = EEPROM.read(19);

}

void valorSerial() {

if (Serial.available()) {

```
valores = Serial.readString();

Serial.println(valores);

valorSerialString[0] = valores.substring(0, 2);
valorSerialString[1] = valores.substring(3, 5);
valorSerialString[2] = valores.substring(6, 9);
tempoMil = valores.substring(10, 12);
tempoSeg = valores.substring(13, 15);

valorSerialString[3] = valores.substring(16, 19);
valorSerialString[4] = valores.substring(20, 23);
valorSerialString[5] = valores.substring(24, 27);

valorSerialString[6] = valores.substring(28, 31);
valorSerialString[7] = valores.substring(32, 35);
valorSerialString[8] = valores.substring(36, 39);

valorSerialString[9] = valores.substring(40, 43);
valorSerialString[10] = valores.substring(44, 47);
valorSerialString[11] = valores.substring(48, 51);

valorSerialString[12] = valores.substring(52, 55);
valorSerialString[13] = valores.substring(56, 59);
valorSerialString[14] = valores.substring(60, 63);

valorSerialString[15] = valores.substring(64, 67);
valorSerialString[16] = valores.substring(68, 71);
valorSerialString[17] = valores.substring(72, 75);

valorSerialInt[0] = (byte) valorSerialString[0].toInt();//customizacao
valorSerialInt[1] = (byte) valorSerialString[1].toInt();//efeito
valorSerialInt[2] = (byte) valorSerialString[2].toInt();//brilho
tempomil = (byte) tempoMil.toInt();//milissegundos
temposeg = (byte) tempoSeg.toInt();//segundos

valorSerialInt[3] = (byte) valorSerialString[3].toInt();//vermelho1
valorSerialInt[4] = (byte) valorSerialString[4].toInt();//verde1
valorSerialInt[5] = (byte) valorSerialString[5].toInt();//azul1

valorSerialInt[6] = (byte) valorSerialString[6].toInt();//vermelho2
valorSerialInt[7] = (byte) valorSerialString[7].toInt();//verde2
valorSerialInt[8] = (byte) valorSerialString[8].toInt();//azul2

valorSerialInt[9] = (byte) valorSerialString[9].toInt();//vermelho3
valorSerialInt[10] = (byte) valorSerialString[10].toInt();//verde3
valorSerialInt[11] = (byte) valorSerialString[11].toInt();//azul3

valorSerialInt[12] = (byte) valorSerialString[12].toInt();//vermelho4
valorSerialInt[13] = (byte) valorSerialString[13].toInt();//verde4
valorSerialInt[14] = (byte) valorSerialString[14].toInt();//azul4

valorSerialInt[15] = (byte) valorSerialString[15].toInt();//vermelho5
valorSerialInt[16] = (byte) valorSerialString[16].toInt();//verde5
valorSerialInt[17] = (byte) valorSerialString[17].toInt();//azul5

EEPROM.update(0, valorSerialInt[0]);
EEPROM.update(1, valorSerialInt[1]);
EEPROM.update(2, valorSerialInt[2]);
EEPROM.update(3, tempomil);
EEPROM.update(4, temposeg);

EEPROM.update(5, valorSerialInt[3]);
EEPROM.update(6, valorSerialInt[4]);
EEPROM.update(7, valorSerialInt[5]);

EEPROM.update(8, valorSerialInt[6]);
EEPROM.update(9, valorSerialInt[7]);
EEPROM.update(10, valorSerialInt[8]);

EEPROM.update(11, valorSerialInt[9]);
EEPROM.update(12, valorSerialInt[10]);
EEPROM.update(13, valorSerialInt[11]);

EEPROM.update(14, valorSerialInt[12]);
EEPROM.update(15, valorSerialInt[13]);
EEPROM.update(16, valorSerialInt[14]);

EEPROM.update(17, valorSerialInt[15]);
EEPROM.update(18, valorSerialInt[16]);
EEPROM.update(19, valorSerialInt[17]);

tempomil = EEPROM.read(3);

```

}  
}

void loop() {

valorSerial();

tempomilTotal = (tempomil \* 100);  
temposegTotal = (temposeg \* 1000);

if (valorSerialInt[0] == 3) {

```
switch (valorSerialInt[1]) {

  case 5:

    mudarTresCores();
    break;

}

```

}

}

void mudarTresCores() {

if (millis() - delay1 \>= 5000) {

```
delay1 = millis();//5000

for (int x = 0; x < 60; x++) {

  pixels_0.pixels.setPixelColor(x, pixels_0.pixels.Color(valorSerialInt[3], valorSerialInt[4], valorSerialInt[5]));
  pixels_0.pixels.setBrightness(valorSerialInt[2]);
  pixels_0.pixels.show();

}

```

}//vermelho verde vermelho azul

if (millis() - delay2 \>= 10000) {

```
delay2 = millis();//10000

for (int x = 0; x < 60; x++) {

  pixels_0.pixels.setPixelColor(x, pixels_0.pixels.Color(valorSerialInt[6], valorSerialInt[7], valorSerialInt[8]));
  pixels_0.pixels.setBrightness(valorSerialInt[2]);
  pixels_0.pixels.show();

}

if (millis() - delay3 >= 15000) {

delay3 = millis();

for (int x = 0; x < 60; x++) {

  pixels_0.pixels.setPixelColor(x, pixels_0.pixels.Color(valorSerialInt[9], valorSerialInt[10], valorSerialInt[11]));
  pixels_0.pixels.setBrightness(valorSerialInt[2]);
  pixels_0.pixels.show();

}

```

}

}

}

---

<div class="post-metadata">

**Author:** ![OLA\_123](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/ola_123/32/3280_2.png) [@OLA\_123](https://forum.fazedores.com/u/OLA_123)\
**Post date:** [Abril 25, 2020, 4:57pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/6 "2020-04-25T16:57:36Z")

</div>

tá, então vc quer controlar as cores pelo serial?, não seria melhor usar o while para o tempo com o millis, por exemplo:

```
unsigned long tempo_antes_da_execucao = millis();
unsigned long temporizador = 0;

while (temporizador <= 5000){
    temporizador = millis() - tempo_antes_da_execucao;
    //codigo_de_ativação_da_cor;
    //verificação_da_serial;
}

```

eu não coloquei o codigo de ativação de cor pq eu não sei, desculpa ai  
dai quando o while for maior ele passa pra outro while de controle de tempo

---

<div class="post-metadata">

**Author:** ![OLA\_123](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/ola_123/32/3280_2.png) [@OLA\_123](https://forum.fazedores.com/u/OLA_123)\
**Post date:** [Abril 25, 2020, 8:00pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/7 "2020-04-25T20:00:07Z")

</div>

boa tarde, acabei de finalizar o exemplo da ideia, como não sei mexer com a fita led utilizei 3 led de cores diferentes para o exemplo, aqui a foto dele feito no tinkercad:

 ![Funky Kieran (2)](https://us1.discourse-cdn.com/flex016/uploads/fazedores/original/2X/9/9b205dc737a13edb005efc47b212de8f51049d85.png)

e o código:  
void setup(){  
pinMode(2, OUTPUT);//azul  
pinMode(3, OUTPUT);//verde  
pinMode(4, OUTPUT);//vermelho  
pinMode(7, INPUT);//chave  
Serial.begin(9600);  
}

```
void loop(){ 
  unsigned long tempo_antes_da_execucao = millis();
  unsigned long temporizador = 0;
  int estadochave = digitalRead(7); //chave de controle 
  digitalWrite(4,0);
  
  while (temporizador <= 1000){
    temporizador = millis() - tempo_antes_da_execucao;
    Serial.println(temporizador);
    estadochave = digitalRead(7);
    if (estadochave == 0){//apaga tudo
      digitalWrite(2,0);
      digitalWrite(3,0);
      digitalWrite(4,0);
    }
    else{
      digitalWrite(2,1);//acende o azul
    }
  }
  while (temporizador <= 2000){
    digitalWrite(2,0);// apaga azul
    temporizador = millis() - tempo_antes_da_execucao;
    Serial.println(temporizador);
    estadochave = digitalRead(7);
    if (estadochave == 0){//apaga tudo
      digitalWrite(2,0);
      digitalWrite(3,0);
      digitalWrite(4,0);
    }
    else{
      digitalWrite(3,1);//acende o verde
   }}
  while (temporizador <= 3000){
    digitalWrite(3,0);//apaga verde
    temporizador = millis() - tempo_antes_da_execucao;
    Serial.println(temporizador);
    estadochave = digitalRead(7);
    if (estadochave == 0){//apaga tudo
      digitalWrite(2,0);
      digitalWrite(3,0);
      digitalWrite(4,0);
    }
    else{
      digitalWrite(4,1);//acende o vermelho
    }}}
```

---

<div class="post-metadata">

**Author:** ![Matheus\_Avelino](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/matheus_avelino/32/3314_2.png) [@Matheus\_Avelino](https://forum.fazedores.com/u/Matheus_Avelino)\
**Post date:** [Abril 26, 2020, 6:44am UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/8 "2020-04-26T06:44:36Z")

</div>

Ola amigo, desculpa a demora para responder,estava ate agora quebrando a cabeça. Gostaria de te agradecer por ter me ajudado, admiro muito pessoas como vc, que não tem tanto conhecimento em um determinado assunto e mesmo assim esta disposto a ajudar. Dando uma olhada rápida no seu código e quebrando um pouco a cabeça kkk, me deu a luz que precisava, muito obrigado mesmo.

#include \<Adafruit\_NeoPixel.h\>  
#ifdef **AVR**  
#include \<avr/power.h\> // Required for 16 MHz Adafruit Trinket  
#endif  
#define PIN 6 // On Trinket or Gemma, suggest changing this to 1

#define NUMPIXELS 60 // Popular NeoPixel ring size

Adafruit\_NeoPixel pixels(NUMPIXELS, PIN, NEO\_GRB + NEO\_KHZ800);

long tempoAnterior0 = 0;  
long tempoAnterior1 = 0;  
long tempoAnterior2 = 0;

long teste0 = 5000;  
long teste1 = 10000;  
long teste2 = 15000;

void setup() {

#if defined( **AVR\_ATtiny85** ) && (F\_CPU == 16000000)  
clock\_prescale\_set(clock\_div\_1);  
#endif

Serial.begin(9600);  
pixels.begin();

}

void loop() {

if (millis() == teste0) {

```
tempoAnterior0 = millis();
teste0 = teste0 + 15000;

for (int i = 0; i < 60; i++) { // For each pixel...

  pixels.setPixelColor(i, pixels.Color(0, 255, 000));
  pixels.show(); // Send the updated pixel colors to the hardware.

}

```

}

if (millis() == teste1) {

```
tempoAnterior1 = millis();
teste1 = teste1 + 15000;

for (int i = 0; i < 60; i++) {

  pixels.setPixelColor(i, pixels.Color(255, 255, 000));
  pixels.show(); // Send the updated pixel colors to the hardware.

}

```

}

if (millis() == teste2) {//15 30 45 60 75

```
tempoAnterior2 = millis();
teste2 = teste2 + 15000;

for (int i = 0; i < 60; i++) { // For each pixel...

  pixels.setPixelColor(i, pixels.Color(000, 255, 255));
  pixels.show(); // Send the updated pixel colors to the hardware.

}

```

}

}

---

<div class="post-metadata">

**Author:** ![OLA\_123](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/ola_123/32/3280_2.png) [@OLA\_123](https://forum.fazedores.com/u/OLA_123)\
**Post date:** [Abril 26, 2020, 2:33pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/9 "2020-04-26T14:33:48Z")

</div>

valeu pelo elogio e até mais tarde  
🙃

---

<div class="post-metadata">

**Author:** ![Tutume](https://avatars.discourse-cdn.com/v4/letter/t/7ea924/32.png) [@Tutume](https://forum.fazedores.com/u/Tutume)\
**Post date:** [Maio 5, 2020, 3:53pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/10 "2020-05-05T15:53:22Z")

</div>

Pessoal, só uma dica. Quando postar código, coloque entre 3 backticks (apostos ao contrário, que geralmente fica embaixo do ~) no começo e no fim

````
```
código
```

````

exemplo

```auto
unsigned long tempo_antes_da_execucao = millis();
unsigned long temporizador = 0;

while (temporizador <= 5000){
    temporizador = millis() - tempo_antes_da_execucao;
    //codigo_de_ativação_da_cor;
    //verificação_da_serial;
}

```

ficará muito mais fácil de ler e copiar

---

<div class="post-metadata">

**Author:** ![OLA\_123](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/ola_123/32/3280_2.png) [@OLA\_123](https://forum.fazedores.com/u/OLA_123)\
**Post date:** [Maio 5, 2020, 4:23pm UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/11 "2020-05-05T16:23:41Z")

</div>

valeu pela dica,  
Eu tava usando o botão de texto pré-formatado mas esse ai é bem mas fácil e bonito para o código

---

<div class="post-metadata">

**Author:** ![Anilson](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/anilson/32/3410_2.png) [@Anilson](https://forum.fazedores.com/u/Anilson)\
**Post date:** [Julho 1, 2020, 12:02am UTC](https://forum.fazedores.com/t/ajuda-com-millis/7259/12 "2020-07-01T00:02:14Z")

</div>

Porque você não usa : delay(5); .
