Go Down

Topic: Delay (Read 422 times) previous topic - next topic

BlueShark40

O sketch ainda tem algumas linhas e tudo funciona perfeitamente mas não consigo que o delay funcione.
Este é o único delay em todo o sketch

     
  if (inputString.indexOf("bt1=1")> -1) { 
       digitalWrite(CamaJuMotorDirFechar, HIGH);
       digitalWrite(CamaJuMotorEsqAbrir, LOW); 
       digitalWrite(CamaJuMotorEsqFechar, HIGH);   
       delay(2000);         
       digitalWrite(CamaJuMotorDirAbrir, LOW);     
   

Desde já um muito obrigado.

bubulindo

O que é que está na String inputString???
This... is a hobby.

BlueShark40

Penso que seja isto que quer saber. Obrigado por tentar ajudar


void Nextion_processing()
{
  int i1;
  String s1;
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    if (inChar != '|') return;
    } 

  int i2=inputString.indexOf("=");
  if (i2 > 0) {   
    #ifdef _debug_snd
    Serial.print("Nextion: ");
    Serial.print(inputString);
    Serial.println("    -   ");
    Serial.print(inputString.substring(i2-2,i2));
    Serial.print("=");
    Serial.println(inputString[i2+1]);                 
    #endif     

bubulindo

O que colocaste não me diz nada...

Basicamente a string é recebida da porta série... mas quando é que a string é limpa? A string que vais receber, tem um tamanho fixo? Ou um tamanho minimo?

Já pensaste que os caracteres não são recebidos todos ao mesmo tempo e o teu código executa sem ter a string toda?
This... is a hobby.

BlueShark40

ca vai tudo.



//Ligações do Nextion ao Arduino
// TX - RX
// RX - TX

#define LuzTeto1 22
#define LuzTeto2 23
#define LuzTeto3 24
#define LuzTeto4 25
#define LuzCamaBia 26
#define LuzCamaJu 27
#define Disco 28
#define LuzMesa 29
#define CamaBiaMotorAbrir 30
#define CamaBiaMotorFechar 31
#define CamaJuMotorDirAbrir 32
#define CamaJuMotorDirFechar 33
#define MotorLuzMesaAbrir 34
#define MotorLuzMesaFechar 35
#define LuzRoupeiro500 36
#define CamaJuMotorEsqAbrir 38
#define CamaJuMotorEsqFechar 39
#define LuzRoupeiro1000 40

String inputString;
int bscheduler = 0;

void setup()

       // init serial port for nextion communication.
    Serial.begin(9600);   
    delay(250);
   
pinMode(LuzTeto1, OUTPUT);
 pinMode(LuzTeto2, OUTPUT);
 pinMode(LuzTeto3, OUTPUT);
 pinMode(LuzTeto4, OUTPUT);
 pinMode(LuzCamaBia, OUTPUT);
 pinMode(LuzCamaJu, OUTPUT);
 pinMode(Disco, OUTPUT);
 pinMode(LuzMesa, OUTPUT);
 pinMode(CamaBiaMotorAbrir, OUTPUT);
 pinMode(CamaBiaMotorFechar, OUTPUT);
 pinMode(CamaJuMotorDirAbrir, OUTPUT);
 pinMode(CamaJuMotorDirFechar, OUTPUT);
 pinMode(MotorLuzMesaAbrir, OUTPUT);
 pinMode(MotorLuzMesaFechar, OUTPUT);
 pinMode(LuzRoupeiro500, OUTPUT);
 pinMode (CamaJuMotorEsqAbrir, OUTPUT);
 pinMode (CamaJuMotorEsqFechar, OUTPUT);
 pinMode(LuzRoupeiro1000, OUTPUT);
 

 digitalWrite(LuzTeto1, HIGH);
 digitalWrite(LuzTeto2, HIGH);
 digitalWrite(LuzTeto3, HIGH);
 digitalWrite(LuzTeto4, HIGH);
 digitalWrite(LuzCamaBia, HIGH);
 digitalWrite(LuzCamaJu, HIGH);
 digitalWrite(Disco, HIGH);
 digitalWrite(LuzMesa, HIGH);
 digitalWrite(CamaBiaMotorAbrir, HIGH);
 digitalWrite(CamaBiaMotorFechar, HIGH);
 digitalWrite(CamaJuMotorDirAbrir, HIGH);
 digitalWrite(CamaJuMotorDirFechar, HIGH);
 digitalWrite(MotorLuzMesaAbrir, HIGH);
 digitalWrite(MotorLuzMesaFechar, HIGH);
 digitalWrite (CamaJuMotorEsqAbrir, HIGH);
 digitalWrite (CamaJuMotorEsqFechar, HIGH);
 digitalWrite(LuzRoupeiro500, LOW);
 digitalWrite(LuzRoupeiro1000, LOW);

 
    // init serial port for nextion communication.
    Serial.begin(9600);   
    delay(250);
    }

void loop()
{
    // processing of incomming messages from nextion
    Nextion_processing();
    switch(bscheduler)
    {
        // transmit to nextion display               
          Serial.write(0xff);
          Serial.write(0xff);
          Serial.write(0xff);       
          break;
    }
    bscheduler++;
    if (bscheduler > 100) bscheduler = 0;   
    delay(10);
}

unsigned long StrToHex(String str, byte digits)
{
  char ConvByte[10];
  str.toCharArray(ConvByte, digits);
  return (unsigned long) strtol(ConvByte, NULL, 16);
}

// ------ receiving and processing of incomming data from nextion
void Nextion_processing()
{
  int i1;
  String s1;
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    if (inChar != '|') return;
    } 

  int i2=inputString.indexOf("=");
  if (i2 > 0) {   
    #ifdef _debug_snd
    Serial.print("Nextion: ");
    Serial.print(inputString);
    Serial.println("    -   ");
    Serial.print(inputString.substring(i2-2,i2));
    Serial.print("=");
    Serial.println(inputString[i2+1]);                 
    #endif     

    // Funcionamento dos botões e relés

    // -----------Luzes teto--------------------
     if (inputString.indexOf("bt3=0")> -1) {       
       digitalWrite(LuzTeto1, HIGH);     
    }
    else if(inputString.indexOf("bt3=1")> -1) {
       digitalWrite(LuzTeto1, LOW);
    }       
    if (inputString.indexOf("bt4=0")> -1) {       
       digitalWrite(LuzTeto2, HIGH);
    }
    else if(inputString.indexOf("bt4=1")> -1) {
       digitalWrite(LuzTeto2, LOW);
    }     
  if (inputString.indexOf("bt5=0")> -1) {       
       digitalWrite(LuzTeto3, HIGH);     
    }
    else if(inputString.indexOf("bt5=1")> -1) {
       digitalWrite(LuzTeto3, LOW);
    }     
  if (inputString.indexOf("bt6=0")> -1) {       
       digitalWrite(LuzTeto4, HIGH);     
    }
    else if(inputString.indexOf("bt6=1")> -1) {
       digitalWrite(LuzTeto4, LOW);

    // -----------Luz cama Bia--------------------
    }     
  if (inputString.indexOf("bt7=0")> -1) {       
       digitalWrite(LuzCamaBia, HIGH);     
    }
    else if(inputString.indexOf("bt7=1")> -1) {
       digitalWrite(LuzCamaBia, LOW);

    // -----------Luz cama Ju--------------------
    }     
  if (inputString.indexOf("bt8=0")> -1) {       
       digitalWrite(LuzCamaJu, HIGH);     
    }
    else if(inputString.indexOf("bt8=1")> -1) {
       digitalWrite(LuzCamaJu, LOW);

           // -----------Disco--------------------
    }     
  if (inputString.indexOf("bt9=0")> -1) {       
       digitalWrite(Disco, HIGH);     
    }
    else if(inputString.indexOf("bt9=1")> -1) {
       digitalWrite(Disco, LOW);
   
           // -----------Luz Mesa--------------------
//    }     
//  if (inputString.indexOf("bt9=0")> -1) {       
//       digitalWrite(LuzMesa, HIGH);     
//    }
//    else if(inputString.indexOf("bt9=1")> -1) {
//       digitalWrite(LuzMesa, LOW);
//    }     
//  if (inputString.indexOf("bt9=0")> -1) {       
//       digitalWrite(MotorLuzMesaAbrir, HIGH);     
//    }
//    else if(inputString.indexOf("bt9=1")> -1) {
//       digitalWrite(MotorLuzMesaFechar, LOW);

////////////////////////CAMAS////////////////////////////////////

           // -----------Cama Bia Motor--------------------
    }     
  if (inputString.indexOf("bt0=1")> -1) {       
       digitalWrite(CamaBiaMotorAbrir, LOW); 
       digitalWrite(CamaBiaMotorFechar, HIGH);   
    }
    else if(inputString.indexOf("bt10=1")> -1) {
       digitalWrite(CamaBiaMotorAbrir, HIGH);
       digitalWrite(CamaBiaMotorFechar, LOW);

           // -----------Cama Ju Motor--------------------
    }     
  if (inputString.indexOf("bt1=1")> -1) { 
       digitalWrite(CamaJuMotorDirFechar, HIGH);
       digitalWrite(CamaJuMotorEsqAbrir, LOW); 
       digitalWrite(CamaJuMotorEsqFechar, HIGH);   
       delay(2000);         
       digitalWrite(CamaJuMotorDirAbrir, LOW);     
    }
    else if(inputString.indexOf("bt11=1")> -1) {
       digitalWrite(CamaJuMotorDirFechar, LOW);       
       digitalWrite(CamaJuMotorEsqAbrir, HIGH); 
       digitalWrite(CamaJuMotorEsqFechar, LOW);
       digitalWrite(CamaJuMotorDirAbrir, HIGH);
       
////////////////////////////////STOP CAMAS/////////////////////////////

    }     
  if (inputString.indexOf("bt2=1")> -1) {       
       digitalWrite(CamaJuMotorDirAbrir, HIGH); 
       digitalWrite(CamaJuMotorDirFechar, HIGH);   
       digitalWrite(CamaJuMotorEsqAbrir, HIGH); 
       digitalWrite(CamaJuMotorEsqFechar, HIGH);
       digitalWrite(CamaBiaMotorAbrir, HIGH); 
       digitalWrite(CamaBiaMotorFechar, HIGH);
       
    }  }



   
  while(Serial.available()) {Serial.read();}
  inputString = "";

  }

BlueShark40

Alguém por favor.

bubulindo

Explica-me o que é que este código deve fazer:
Code: [Select]
switch(bscheduler)
    {
        // transmit to nextion display               
          Serial.write(0xff);
          Serial.write(0xff);
          Serial.write(0xff);       
          break;
    }


Particularmente o uso do switch... e se tens erros de compilação.

Algum dos botões funciona? Ou só o botão em específico que meteste inicialmente?

O que tens configurado no NEXTION? E que strings é que estás a receber?

E o teu encadeamento de strings está incorrecto e atrasa ainda mais o código. Por exemplo:

Code: [Select]

     if (inputString.indexOf("bt3=0")> -1) {// A variável bt3 é boleana, ou é 1 ou 0. Aqui testas se é 0       
       digitalWrite(LuzTeto1, HIGH);     
    }
    else if(inputString.indexOf("bt3=1")> -1) { // Aqui o else só é processado se a variável for diferente de 0, ou seja 1, logo o if adicional apenas atrasa o código.
       digitalWrite(LuzTeto1, LOW);
    }   


Tira o segundo if para cada um dos botões que tens.

Code: [Select]
           // -----------Luz Mesa--------------------
//    }     
//  if (inputString.indexOf("bt9=0")> -1) {       
//       digitalWrite(LuzMesa, HIGH);     
//    }
//    else if(inputString.indexOf("bt9=1")> -1) {
//       digitalWrite(LuzMesa, LOW);
//    }     
//  if (inputString.indexOf("bt9=0")> -1) {       
//       digitalWrite(MotorLuzMesaAbrir, HIGH);     
//    }
//    else if(inputString.indexOf("bt9=1")> -1) {
//       digitalWrite(MotorLuzMesaFechar, LOW);


Se este código não faz nada, tira-o do programa. Podes sempre fazer paste do código no fundo do programa onde não causa confusão nenhuma.

This... is a hobby.

BlueShark40

Obrigado pela resposta.

Tenho que confessar que apesar de ter feito isto e mais algumas coisas, ainda não entendo muitas das coisas que tem num código e provavelmente neste terá algumas coisas desnecessárias.

O ultimo código que falas, não esta ativo mas vai estar.

Tudo funciona perfeitamente, todos os botões cumprem a sua função sem falhas, apenas preciso do delay porque esta parte do código serve para ativar 2 motores para abrir/fechar uma cama e 1 destes motores esta um pouco mais rápido que o outro (chines) então o Delay servia para atrasar o arranque.


Antes tinha tudo a funcionar com um tablet com ligação por Bluetooth mas a ligação ia abaixo muitas vezes, então decidi fazer funcionar através de um tft nextion 3.2" logo o código teve que mudar.

Aqui fica um video que mostra tudo a funcionar ainda com tablet, com o nextion ainda não fiz um video mas funciona igual
https://drive.google.com/open?id=1tA2-m6mfcNeafCtw1Oh1r6ojXmPe-LFteg

Go Up