Can I write my code on the void loop()?

Hello, I’m working with the blynk app to get and push data by using arduino uno and the HC05 bluetooth shield and I don’t know if I can write my code in the void loop. There’s nothing in the loop using blynk but I don’t know if I will have a problem with the timer.
that is my code:

#define BLYNK_PRINT Serial//define função serial do app blynk
#include <Servo.h>//biblioteca do servo
#define SERVO 6 // Porta Digital 6 PWM deve comandar o servo
#include "HX711.h"//biblioteca do amplificador para a célula de carga
HX711 cell(3, 2); //define os pinos de dados da celula em 3 e 2
#include <SoftwareSerial.h>
SoftwareSerial SwSerial(10,11); // RX, TX no hc05
#include <BlynkSimpleSerialBLE.h> //biblioteca de conexão bluetooth do app blynk
#include <SoftwareSerial.h>

char auth[] = "d2ef7c0cb922420fa6dcb46684b3473a"; //chave de autenticação do app blynk
int sensor = 8; //define a pinagem do sensor de obstáculo
int estado=0, massa2; //a variavel estado é utilizada para ler o sensor de obstaculo e a massa2 é uma adequação de massaapp
Servo s; // Variável Servo
long val = 0  ; //variavel intermediária da celula de carga
float  a=0;//variavel intermediária da celula de carga 

SoftwareSerial SerialBLE(10, 11); // RX, TX no hc05

int massaapp =0; //massa de uma caixa
BLYNK_WRITE(V1)
{
  massaapp = param.asInt(); //coloca o valor de V1 enviado pelo app para a variavel massaapp
  Serial.print("massa da caixa: ");
  Serial.println(massaapp); //exibe o valor enviado pelo app
}

int caixaapp =0; //numero de caixas por fileira
BLYNK_WRITE(V2)
{
   caixaapp = param.asInt(); 
  Serial.print("caixas por fileira ");
  Serial.println(caixaapp);
}

 int fileira=1; //fileira atual
 int fileiraapp =0; //numero total de fileiras
BLYNK_WRITE(V3)
{
  fileiraapp = param.asInt(); 

}

int ok=0; //sinalização de que os valores anteriores estão corretos
BLYNK_WRITE(V4)
{
  ok = param.asInt(); 

}



WidgetLED led1(V7);

BlynkTimer timer;
int ledStatus = 0;

#define BLYNK_GREEN     "#23C48E"
#define BLYNK_BLUE      "#04C0F8"
#define BLYNK_YELLOW    "#ED9D00"
#define BLYNK_RED       "#D3435C"
#define BLYNK_DARK_BLUE "#5F7CD8"

void blinkLedWidget()
{
  if (ledStatus==1) {
    led1.setColor(BLYNK_RED);
    Serial.println("Motor Ligado - LED vermelho");

  } 
  if (ledStatus==2){
    led1.setColor(BLYNK_GREEN);
    Serial.println("Mesa descendo - LED verde");
    }
  if(ledStatus==3){
    led1.setColor(BLYNK_BLUE);
    Serial.println("Mesa subindo - LED azul");
  }
}

void myTimerEvent()
{
  val = cell.read(); 
  a=(val/1000-8495)*0.572727272727-18;  
  Blynk.virtualWrite(V5, a);
  Blynk.virtualWrite(V6, fileira);
}

void setup() {
    Serial.begin(9600); //inicia a comunicação serial
    timer.setInterval(1000L, blinkLedWidget); //seta uma função para ser chamada a cada segundo
    timer.setInterval(1000L, myTimerEvent);
  SerialBLE.begin(9600); //inicia comunicação bluetooth
  Blynk.begin(SerialBLE, auth); //inicia a comunicação com o aplicativo - dependente da chave de autenticação (auth)

  Serial.println("Esperando conexão...");
  led1.on();
  s.attach(SERVO); //altera o nome do servo
  s.write(45); //seta posição inicial do servo em 45°
  pinMode(sensor, INPUT); //seta a variavel sensor como entrada
}



void loop() {
 Blynk.run(); //ativado sempre que há alteração das entradas
 timer.run(); // inicia o blynk timer para output

   
  massa2=massaapp-0,1*massaapp; //estabelece erro de -10% na massa estabelecida
if(ok==1){ //inicia o programa apenas se ok for igual a 1
  fileiraapp++; 

fileira=1;
while(fileira<fileiraapp){ //rotina de descida da mesa 
  
     val = cell.read(); //leitura da celula de carga
   a=(val/1000-8495)*0.572727272727-18; // adequação de valores para gramas (é necessário readequar caso utilize outra extrutura ou sistema de medição de massa)
   while( a < (massa2*caixaapp*fileira)){ //confere se a massa medida é menor do que a massa equivalente ao numero de fileiras atual
    
    
      val = cell.read(); 
      a=(val/1000-8495)*0.572727272727-18;
      Serial.println("massa atual: ");
      Serial.println(a);
      Serial.println("fileira atual: ");
      Serial.println(fileira);
      delay(500);
   }
   
   s.write(80);// mesa desce - fim de curso verde
   estado=digitalRead(sensor); //confere o estado do sensor de obstaculo
   while(estado==0){ //essa rotina espera que não haja mais obstaculo, ou seija, que a caixa tenha descido
    Serial.println("mesa descendo");
      estado=digitalRead(sensor);
      delay(15);      
   }
   s.write(45);// motor desligado
   fileira++; //aumenta a fileira atual    
}
delay(5000); //espera descarregar a mesa
s.write(0);//sobe a mesa
estado=digitalRead(sensor); 
while(estado==1){ //essa rotina sobe a mesa até que o sensor detecte obstaculo (no caso a mesa)
      estado=digitalRead(sensor);
      delay(15);      
     }
s.write(45);// motor desligado
fileira=0;
}

}

@vinifersil Welcome to the Blynk Forum.

First, I fixed your posted code formatting… please use this method, as required in the pinned topic that you should have read at the beginning: Welcome to Blynk Community!

Blynk - FTFC

That’s not the issue… Anything running in the void loop() runs constantly… and if it takes too long to loop, it delays the Blynk.run() housekeeping and crashes your connection… thus the requirement of timers and timed functions.

There is entire sections (links at top of this page) one of which is called Help Center that has answers to many common questions and issues like you are running into

Here is a brief excerpt from one:


Avoiding the void

:point_up: :fire: :warning: VERY IMPORTANT: You can’t send sensor data in your void loop()

– Why?
– Because Blynk sends data over the Internet, and when you put something into void loop(), your microcontroller will execute it :scream_cat: gazillion number of times. Which means that Blynk Cloud will be flooded with gazillion messages from your hardware.

And when Blynk Cloud notices that, it automatically :scissors:︎ cuts your connection. Sorry…

– OK, what should I do then?
– Send sensor data in intervals!

Using timers to send sensor data in intervals

There are lots of ways to send data in intervals, but here is a simple one. We recommend using a BlynkTimer for that. It’s included in Blynk Library Package, so if you installed Library correctly, you are all set.


1 Like