如何在 blynk (arduino) 中合并 2 个文件

Posted

技术标签:

【中文标题】如何在 blynk (arduino) 中合并 2 个文件【英文标题】:How to combine 2 file in blynk (arduino) 【发布时间】:2019-10-07 12:22:53 【问题描述】:

我有 2 个草图,一个是我的 led 运行的代码,另一个是 blynk 连接代码,我想结合这 2 个草图,以确保我可以连接到我的 blynk 应用程序并让我的 led代码运行。我使用 esp 8266 wifi sheild 连接到我的手机应用程序,因为我用完了我的 arduino 的所有引脚

blynk 连接代码

#define BLYNK_PRINT Serial


#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "ghznMVLIilXc08bYkO9qyNl_A6KaY7kT";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "find yr own one";//store ssid user name
char pass[] = "yashwini123";//store password

// Hardware Serial on Mega, Leonardo, Micro...
//#define EspSerial Serial1

// or Software Serial on Uno, Nano...
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(2, 3); // RX, TX

// Your ESP8266 baud rate:
#define ESP8266_BAUD 9600 // set to 9600

ESP8266 wifi(&EspSerial);

void setup()

 // Debug console
 Serial.begin(9600);

 delay(10);

 // Set ESP8266 baud rate
 EspSerial.begin(ESP8266_BAUD);
 delay(10);

 Blynk.begin(auth, wifi, ssid, pass);


void loop()

 Blynk.run();



引导代码

#include <Wire.h>


/*
  4x4x4 LED Cube
  Connection Setup: 
  Columns
  [(x,y)-Pin]
  (1,1)-13
  (1,2)-12
  (1,3)-11
  (1,4)-10
  (2,1)-9
  (2,2)-8
  (2,3)-7
  (2,4)-6
  (3,1)-5
  (3-2)-4
  (3-3)-3
  (3,4)-2
  (4,1)-1
  (4,2)-0
  (4,3)-A5
  (4,4)-A4
  Layers
  [layer-Pin]
  a-A0
  b-A1
  c-A2
  d-A3
*/
//initializing and declaring led rows
  int column[16]=13,12,11,10,A4,A5,9,8,7,6,5,4,3,2,1,0;//switch a4 a5 with 6 7
//initializing and declaring led layers
  int layer[4]=A3,A2,A1,A0;

  int time = 250;

void setup()

  //setting rows to ouput
  for(int i = 0; i<16; i++)
  
    pinMode(column[i], OUTPUT);
  
  //setting layers to output
  for(int i = 0; i<4; i++)
  
    pinMode(layer[i], OUTPUT);
  
  //seeding random for random pattern
  randomSeed(analogRead(10));

//xxxxxxxxxxxxxxxxxxxxFUNCTION LOOPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

void loop()

turnEverythingOff();//turn all off
  flickerOn();
turnEverythingOn();//turn all on
  delay(time);
 turnOnAndOffAllByLayerUpAndDownNotTimed();
layerstompUpAndDown();
  turnOnAndOffAllByColumnSideways();
  delay(time);
  aroundEdgeDown();
  turnEverythingOff();
 randomflicker();
 randomRain();
  diagonalRectangle();
goThroughAllLedsOneAtATime();
 propeller();
  spiralInAndOut();

  flickerOff();
  turnEverythingOff();
  delay(2000);





//xxxxxxxxxxxxxxxxxxxxFUNCTIONSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

///////////////////////////////////////////////////////////turn all off
void turnEverythingOff()
 
   for(int i = 0; i<16; i++)
   
     digitalWrite(column[i], 1);
   
   for(int i = 0; i<4; i++)
   
     digitalWrite(layer[i], 0);
   
 

////////////////////////////////////////////////////////////turn all on
void turnEverythingOn()

  for(int i = 0; i<16; i++)
  
    digitalWrite(column[i], 0);
  
  //turning on layers
  for(int i = 0; i<4; i++)
  
    digitalWrite(layer[i], 1);
  

///////////////////////////////////////////////////////turn columns off
void turnColumnsOff()

  for(int i = 0; i<16; i++)
  
    digitalWrite(column[i], 1);
  

/////////////////////////////////////////////////////////////flicker on
void flickerOn()

  int i = 150;
  while(i != 0)
  
    turnEverythingOn();
    delay(i);
    turnEverythingOff();
    delay(i);
    i-= 5;
  

//////////////turn everything on and off by layer up and down NOT TIMED
void turnOnAndOffAllByLayerUpAndDownNotTimed()

  int x = 75;
  for(int i = 5; i != 0; i--)
  
    turnEverythingOn();
    for(int i = 4; i!=0; i--)
    
      digitalWrite(layer[i-1], 0);
      delay(x);
    
    for(int i = 0; i<4; i++)
    
      digitalWrite(layer[i], 1);
      delay(x);
    
      for(int i = 0; i<4; i++)
    
      digitalWrite(layer[i], 0);
      delay(x);
    
    for(int i = 4; i!=0; i--)
    
      digitalWrite(layer[i-1], 1);
      delay(x);
    
  

//////////////////////////turn everything on and off by column sideways
void turnOnAndOffAllByColumnSideways()

  int x = 75;
  turnEverythingOff();
  //turn on layers
  for(int i = 0; i<4; i++)
  
    digitalWrite(layer[i], 1);
  
  for(int y = 0; y<3; y++)
  
    //turn on 0-3
    for(int i = 0; i<4; i++)
    
      digitalWrite(column[i], 0);
      delay(x);
    
    //turn on 4-7
    for(int i = 4; i<8; i++)
    
      digitalWrite(column[i], 0);
      delay(x);
    
    //turn on 8-11
    for(int i = 8; i<12; i++)
    
      digitalWrite(column[i], 0);
      delay(x);
    
    //turn on 12-15
    for(int i = 12; i<16; i++)
    
      digitalWrite(column[i], 0);
      delay(x);
    
    //turn off 0-3
    for(int i = 0; i<4; i++)
    
      digitalWrite(column[i], 1);
      delay(x);
    
    //turn off 4-7
    for(int i = 4; i<8; i++)
    
      digitalWrite(column[i], 1);
      delay(x);
    
    //turn off 8-11
    for(int i = 8; i<12; i++)
    
      digitalWrite(column[i], 1);
      delay(x);
    
    //turn off 12-15
    for(int i = 12; i<16; i++)
    
      digitalWrite(column[i], 1);
      delay(x);
    
    //turn on 12-15
    for(int i = 12; i<16; i++)
    
      digitalWrite(column[i], 0);
      delay(x);
    
    //turn on 8-11
    for(int i = 8; i<12; i++)
    
      digitalWrite(column[i], 0);
      delay(x);
    
    //turn on 4-7
    for(int i = 4; i<8; i++)
    
      digitalWrite(column[i], 0);
      delay(x);
    
    //turn on 0-3
    for(int i = 0; i<4; i++)
    
      digitalWrite(column[i], 0);
      delay(x);
    
    //turn off 12-15
    for(int i = 12; i<16; i++)
    
      digitalWrite(column[i], 1);
      delay(x);
    
    //turn off 8-11
    for(int i = 8; i<12; i++)
    
      digitalWrite(column[i], 1);
      delay(x);
    
    //turn off 4-7
    for(int i = 4; i<8; i++)
    
      digitalWrite(column[i], 1);
      delay(x);
    
    //turn off 0-3
    for(int i = 0; i<4; i++)
    
      digitalWrite(column[i], 1);
      delay(x);
    
  

/////////////////////////////////////////up and down single layer stomp
void layerstompUpAndDown()

  int x = 75;
  for(int i = 0; i<4; i++)
  
    digitalWrite(layer[i], 0);
  
  for(int y = 0; y<5; y++)
  
    for(int count = 0; count<1; count++)
     
      for(int i = 0; i<4; i++)
      
        digitalWrite(layer[i], 1);
        delay(x);
        digitalWrite(layer[i], 0);
      
      for(int i = 4; i !=0; i--)
      
        digitalWrite(layer[i-1], 1);
        delay(x);
        digitalWrite(layer[i-1], 0);
      
    
    for(int i = 0; i<4; i++)
    
      digitalWrite(layer[i], 1);
      delay(x);
    
    for(int i = 4; i!=0; i--)
    
      digitalWrite(layer[i-1], 0);
      delay(x);
    
  

////////////////////////////////////////////////////////////flicker off
void flickerOff()

  turnEverythingOn();
  for(int i = 0; i!= 150; i+=5)
  
    turnEverythingOff();
    delay(i+50);
    turnEverythingOn();
    delay(i);
  

///////////////////////////////////////////around edge of the cube down
void aroundEdgeDown()

  for(int x = 200; x != 0; x -=50)
  
    turnEverythingOff();
    for(int i = 4; i != 0; i--)
    
      digitalWrite(layer[i-1], 1);
      digitalWrite(column[5], 0);
      digitalWrite(column[6], 0);
      digitalWrite(column[9], 0);
      digitalWrite(column[10], 0);

      digitalWrite(column[0], 0);
      delay(x);
      digitalWrite(column[0], 1);
      digitalWrite(column[4], 0);
      delay(x);
      digitalWrite(column[4], 1);
      digitalWrite(column[8], 0);
      delay(x);
      digitalWrite(column[8], 1);
      digitalWrite(column[12], 0);
      delay(x);
      digitalWrite(column[12], 1);
      digitalWrite(column[13], 0);
      delay(x);
      digitalWrite(column[13], 1);
      digitalWrite(column[15], 0);
      delay(x);
      digitalWrite(column[15], 1);
      digitalWrite(column[14], 0);
      delay(x);
      digitalWrite(column[14], 1);
      digitalWrite(column[11], 0);
      delay(x);
      digitalWrite(column[11], 1);
      digitalWrite(column[7], 0);
      delay(x);
      digitalWrite(column[7], 1);
      digitalWrite(column[3], 0);
      delay(x);
      digitalWrite(column[3], 1);
      digitalWrite(column[2], 0);
      delay(x);
      digitalWrite(column[2], 1);
      digitalWrite(column[1], 0);
      delay(x);
      digitalWrite(column[1], 1);
    
  

/////////////////////////////////////////////////////////random flicker
void randomflicker()

  turnEverythingOff();
  int x = 10;
  for(int i = 0; i !=750; i+=2)
  
  int randomLayer = random(0,4);
  int randomColumn = random(0,16);

  digitalWrite(layer[randomLayer], 1);
  digitalWrite(column[randomColumn], 0);
  delay(x);
  digitalWrite(layer[randomLayer], 0);
  digitalWrite(column[randomColumn], 1);
  delay(x); 
  

////////////////////////////////////////////////////////////random rain
void randomRain()

  turnEverythingOff();
  int x = 100;
  for(int i = 0; i!=60; i+=2)
  
    int randomColumn = random(0,16);
    digitalWrite(column[randomColumn], 0);
    digitalWrite(layer[0], 1);
    delay(x+50);
    digitalWrite(layer[0], 0);
    digitalWrite(layer[1], 1);
    delay(x);
    digitalWrite(layer[1], 0);
    digitalWrite(layer[2], 1);
    delay(x);
    digitalWrite(layer[2], 0);
    digitalWrite(layer[3], 1);
    delay(x+50);
    digitalWrite(layer[3], 0);
    digitalWrite(column[randomColumn], 1);
  

/////////////////////////////////////////////////////diagonal rectangle
void diagonalRectangle()

  int x = 350;
  turnEverythingOff();
  for(int count = 0; count<5; count++)
  
    //top left
    for(int i = 0; i<8; i++)
    
      digitalWrite(column[i], 0);
    
    digitalWrite(layer[3], 1);
    digitalWrite(layer[2], 1);
    delay(x);
    turnEverythingOff();
    //middle middle
    for(int i = 4; i<12; i++)
    
      digitalWrite(column[i], 0);
    
    digitalWrite(layer[1], 1);
    digitalWrite(layer[2], 1);
    delay(x);
    turnEverythingOff();
    //bottom right
    for(int i = 8; i<16; i++)
    
      digitalWrite(column[i], 0);
    
    digitalWrite(layer[0], 1);
    digitalWrite(layer[1], 1);
    delay(x);
    turnEverythingOff();
    //bottom middle
    for(int i = 4; i<12; i++)
    
      digitalWrite(column[i], 0);
    
    digitalWrite(layer[0], 1);
    digitalWrite(layer[1], 1);
    delay(x);
    turnEverythingOff();
    //bottom left
    for(int i = 0; i<8; i++)
    
      digitalWrite(column[i], 0);
    
    digitalWrite(layer[0], 1);
    digitalWrite(layer[1], 1);
    delay(x);
    turnEverythingOff();
    //middle middle
    for(int i = 4; i<12; i++)
    
      digitalWrite(column[i], 0);
    
    digitalWrite(layer[1], 1);
    digitalWrite(layer[2], 1);
    delay(x);
    turnEverythingOff();
    //top right
    for(int i = 8; i<16; i++)
    
      digitalWrite(column[i], 0);
    
    digitalWrite(layer[2], 1);
    digitalWrite(layer[3], 1);
    delay(x);
    turnEverythingOff();
    //top middle
    for(int i = 4; i<12; i++)
    
      digitalWrite(column[i], 0);
    
    digitalWrite(layer[2], 1);
    digitalWrite(layer[3], 1);
    delay(x);
    turnEverythingOff();
  
  //top left
  for(int i = 0; i<8; i++)
  
    digitalWrite(column[i], 0);
  
  digitalWrite(layer[3], 1);
  digitalWrite(layer[2], 1);
  delay(x);
  turnEverythingOff();

//////////////////////////////////////////////////////////////propeller
void propeller()

  turnEverythingOff();
  int x = 90;
  for(int y = 4; y>0; y--)
  
    for(int i = 0; i<6; i++)
    
      //turn on layer
      digitalWrite(layer[y-1], 1);
      //a1
      turnColumnsOff();
      digitalWrite(column[0], 0);
      digitalWrite(column[5], 0);
      digitalWrite(column[10], 0);
      digitalWrite(column[15], 0);
      delay(x);
      //b1
      turnColumnsOff();
      digitalWrite(column[4], 0);
      digitalWrite(column[5], 0);
      digitalWrite(column[10], 0);
      digitalWrite(column[11], 0);
      delay(x);
      //c1
      turnColumnsOff();
      digitalWrite(column[6], 0);
      digitalWrite(column[7], 0);
      digitalWrite(column[8], 0);
      digitalWrite(column[9], 0);
      delay(x);
      //d1
      turnColumnsOff();
      digitalWrite(column[3], 0);
      digitalWrite(column[6], 0);
      digitalWrite(column[9], 0);
      digitalWrite(column[12], 0);
      delay(x);
      //d2
      turnColumnsOff();
      digitalWrite(column[2], 0);
      digitalWrite(column[6], 0);
      digitalWrite(column[9], 0);
      digitalWrite(column[13], 0);
      delay(x);
      //d3
      turnColumnsOff();
      digitalWrite(column[1], 0);
      digitalWrite(column[5], 0);
      digitalWrite(column[10], 0);
      digitalWrite(column[14], 0);
      delay(x);
    
  
  //d4
  turnColumnsOff();
  digitalWrite(column[0], 0);
  digitalWrite(column[5], 0);
  digitalWrite(column[10], 0);
  digitalWrite(column[15], 0);
  delay(x);

//////////////////////////////////////////////////////spiral in and out
void spiralInAndOut()

  turnEverythingOn();
  int x = 60;
  for(int i = 0; i<6; i++)
  
    //spiral in clockwise
    digitalWrite(column[0], 1);
    delay(x);
    digitalWrite(column[1], 1);
    delay(x);
    digitalWrite(column[2], 1);
    delay(x);
    digitalWrite(column[3], 1);
    delay(x);
    digitalWrite(column[7], 1);
    delay(x);
    digitalWrite(column[11], 1);
    delay(x);
    digitalWrite(column[15], 1);
    delay(x);
    digitalWrite(column[14], 1);
    delay(x);
    digitalWrite(column[13], 1);
    delay(x);
    digitalWrite(column[12], 1);
    delay(x);
    digitalWrite(column[8], 1);
    delay(x);
    digitalWrite(column[4], 1);
    delay(x);
    digitalWrite(column[5], 1);
    delay(x);
    digitalWrite(column[6], 1);
    delay(x);
    digitalWrite(column[10], 1);
    delay(x);
    digitalWrite(column[9], 1);
    delay(x);
    ///////////////////////////////////////spiral out counter clockwise
    digitalWrite(column[9], 0);
    delay(x);
    digitalWrite(column[10], 0);
    delay(x);
    digitalWrite(column[6], 0);
    delay(x);
    digitalWrite(column[5], 0);
    delay(x);
    digitalWrite(column[4], 0);
    delay(x);
    digitalWrite(column[8], 0);
    delay(x);
    digitalWrite(column[12], 0);
    delay(x);
    digitalWrite(column[13], 0);
    delay(x);
    digitalWrite(column[14], 0);
    delay(x);
    digitalWrite(column[15], 0);
    delay(x);
    digitalWrite(column[11], 0);
    delay(x);
    digitalWrite(column[7], 0);
    delay(x);
    digitalWrite(column[3], 0);
    delay(x);
    digitalWrite(column[2], 0);
    delay(x);
    digitalWrite(column[1], 0);
    delay(x);
    digitalWrite(column[0], 0);
    delay(x);
    ///////////////////////////////////////spiral in counter clock wise
    digitalWrite(column[0], 1);
    delay(x);
    digitalWrite(column[4], 1);
    delay(x);
    digitalWrite(column[8], 1);
    delay(x);
    digitalWrite(column[12], 1);
    delay(x);
    digitalWrite(column[13], 1);
    delay(x);
    digitalWrite(column[14], 1);
    delay(x);
    digitalWrite(column[15], 1);
    delay(x);
    digitalWrite(column[11], 1);
    delay(x);
    digitalWrite(column[7], 1);
    delay(x);
    digitalWrite(column[3], 1);
    delay(x);
    digitalWrite(column[2], 1);
    delay(x);
    digitalWrite(column[1], 1);
    delay(x);
    digitalWrite(column[5], 1);
    delay(x);
    digitalWrite(column[9], 1);
    delay(x);
    digitalWrite(column[10], 1);
    delay(x);
    digitalWrite(column[6], 1);
    delay(x);
    //////////////////////////////////////////////spiral out clock wise
    digitalWrite(column[6], 0);
    delay(x);
    digitalWrite(column[10], 0);
    delay(x);
    digitalWrite(column[9], 0);
    delay(x);
    digitalWrite(column[5], 0);
    delay(x);
    digitalWrite(column[1], 0);
    delay(x);
    digitalWrite(column[2], 0);
    delay(x);
    digitalWrite(column[3], 0);
    delay(x);
    digitalWrite(column[7], 0);
    delay(x);
    digitalWrite(column[11], 0);
    delay(x);
    digitalWrite(column[15], 0);
    delay(x);
    digitalWrite(column[14], 0);
    delay(x);
    digitalWrite(column[13], 0);
    delay(x);
    digitalWrite(column[12], 0);
    delay(x);
    digitalWrite(column[8], 0);
    delay(x);
    digitalWrite(column[4], 0);
    delay(x);
    digitalWrite(column[0], 0);
    delay(x);
  

//////////////////////////////////////go through all leds one at a time
void goThroughAllLedsOneAtATime()

  int x = 15;
  turnEverythingOff();
  for(int y = 0; y<5; y++)
  
    //0-3
    for(int count = 4; count != 0; count--)
    
      digitalWrite(layer[count-1], 1);
      for(int i = 0; i<4; i++)
      
        digitalWrite(column[i], 0);
        delay(x);
        digitalWrite(column[i], 1);
        delay(x);
      
    digitalWrite(layer[count-1], 0);
    
    //4-7
    for(int count = 0; count < 4; count++)
    
      digitalWrite(layer[count], 1);
      for(int i = 4; i<8; i++)
      
        digitalWrite(column[i], 0);
        delay(x);
        digitalWrite(column[i], 1);
        delay(x);
      
    digitalWrite(layer[count], 0);
    
    //8-11
    for(int count = 4; count != 0; count--)
    
      digitalWrite(layer[count-1], 1);
      for(int i = 8; i<12; i++)
      
        digitalWrite(column[i], 0);
        delay(x);
        digitalWrite(column[i], 1);
        delay(x);
      
    digitalWrite(layer[count-1], 0);
    
    //12-15
    for(int count = 0; count < 4; count++)
    
      digitalWrite(layer[count], 1);
      for(int i = 12; i<16; i++)
      
        digitalWrite(column[i], 0);
        delay(x);
        digitalWrite(column[i], 1);
        delay(x);
      
    digitalWrite(layer[count], 0);
    
  

【问题讨论】:

不清楚第一个文件的代码在哪里结束,第二个文件的代码从哪里开始。两个代码部分都包含在帖子中吗?上面的代码部分中真的有C, C++ &amp; Java吗?如果是这样,请编辑您的帖子并将它们分开。 single projects combining Java and C++ 上的讨论。 【参考方案1】:

理论上你必须结合两个项目/草图的setup()loop()功能。

在您的情况下,这有点困难,因为您的 LED 项目的 loop() 函数在 loop()loop() 调用的函数中都包含对 delay 的调用。

您必须确保在执行 LED 操作时经常调用 Blynk.run();。因此,您可能必须重构 LED 项目的 loop() 函数以及从中调用的所有包含 delay 调用的函数,否则需要很长时间才能运行。

另请参阅http://help.blynk.cc/en/articles/2091699-keep-your-void-loop-cleanhttps://dzone.com/articles/arduino-using-millis-instead-of-delay

作为一个简单的技巧,您可以将所有对 delay(x) 的调用替换为 delayWithBlynk(x) 并使用类似的函数

void delayWithBlynk(unsigned long delay)

    unsigned long time_now; // for current time in loop
    unsigned long time_start = millis(); // start time of intended delay

    do 
        Blynk.run();
        time_now = millis(); // current time
    while(time_now - time_start < delay); // repeat if delay time has not passed yet

这个想法是每当 LED 功能的执行必须等待延迟时重复调用Blynk.run()。 (此代码/解决方案未经测试。)

更好的解决方案是重构所有函数以在固定周期内重复调用,例如每毫秒一次或每 10 毫秒一次,并在内部处理它们的时间和状态。

想法:从loop() 调用的所有函数(turnEverythingOff() 等)通过它们的返回值指示它们是否需要再次调用或任务是否完成。在loop() 中,您保留一个状态,指示现在必须调用哪个从属函数。这个函数将被重复调用,直到它发出它完成任务的信号。然后状态将切换到下一个函数,该函数将在下一个循环中调用,等等。

【讨论】:

以上是关于如何在 blynk (arduino) 中合并 2 个文件的主要内容,如果未能解决你的问题,请参考以下文章

使用ESP8266将Arduino连接到Blynk

合并 Arduino 草图 (MIDI)

c_cpp 通过ESP8266 EEPROM中的网页提供WIFI SSID,密码和Blynk密钥 - 来自https://community.blynk.cc/t/feeding-wifi-ssid-

只会用 WiFi 连接 Blynk 物联网?带你解锁三种新姿势!

如何将arduino产生HEX文件 以及如何写入HEX

如何在 Arduino 中打破无限