Ошибка при использовании функций в коде

timof123
Offline
Зарегистрирован: 06.06.2018

У меня есть код для NodeMcu, в котором есть функции void. Вот есть вызов функции colorWipe:

colorWipe(strip.Color(255, 0, 0), 100);

и при компиляции пишет на этот вызов ошибку: 'colorWipe' was not declared in this scope. Переводится что-то типо непонятное выражение. Этот скетч я скачивал с интернета. Скетч для гирлянды на светодиодах ws2812b. Почему у меня не работают функции??? 

Вот весь код:


#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

#define PIN 2
Adafruit_NeoPixel strip = Adafruit_NeoPixel(100, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(10, 10, PIN,
  NEO_MATRIX_BOTTOM     + NEO_MATRIX_LEFT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);


int x    = matrix.width();

void setup() {
  matrix.cp437(true);
  strip.begin();
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(200);
  matrix.setTextColor(matrix.Color(245,0,0));
}


void loop() {
  colorWipe(strip.Color(255, 0, 0), 100); 
  snake ( 100);
  stars(150, 10);
  FullRainbow(60);
  rainbow(40); 
  theaterChase(strip.Color(255, 255, 255), 30);
  showText("Happy New Year 2018",matrix.Color(245,0,0), 60, 105);
  theaterChase(strip.Color(255, 255, 255), 30);
  showText("C Новым Годом 2018",matrix.Color(0,255,0), 60, 105);
  
}

// ----------- Заполнение цветом  --------------
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}
// ----------- Заполнение цветом  --------------

// ----------- Змейка --------------
void snake ( int t)
{
  for (int x=0; x<100; x++)
  {
    strip.setPixelColor(x,255,255,255);
    strip.setPixelColor(x-1,80,80,80);
    strip.setPixelColor(x-2,30,30,30);
    strip.setPixelColor(x-3,5,5,5);
    strip.setPixelColor(x-4,0,0,0);
    strip.show();
    delay (t);
  }
}
// ----------- Змейка --------------

// -------- Бегущая строка -----------
void showText( String t, uint16_t color, int wait, int len){
  matrix.setTextColor(color);
  while (--x > (len*(-1)))
  {
    matrix.fillScreen(0);
    matrix.setCursor(x, 0);
    matrix.print(utf8rus(t));
    matrix.show();
    delay(wait);
  } 
    x = matrix.width(); 
}
 // -------- Бегущая строка -----------

// --------- FULLRAINBOW --------------- 
void FullRainbow(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(j & 255));
    }
    strip.show();
    delay(wait);
  }
}
// --------- FULLRAINBOW --------------- 

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

void star(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

void stars (int t, int pause){
  int x=0;
  int y=0;
  while (t > 0){
    for ( int i=0; i<strip.numPixels(); i++){
      y = random(0,2);
      if (y>0) 
      {
        strip.setPixelColor(i,255,255,255);
      }
      else 
      {
        strip.setPixelColor(i,0, 0, 0);
      }
    }
    strip.show();
    t--;
    delay(pause); 
    
  }
  
}

// ----------- Сияющий эффект ---------------
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<50; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
// ----------- Сияющий эффект ---------------


// ------------Отображение русского шрифта------------- 
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); i = 0;

  while (i < k) {
    n = source[i]; i++;

    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
// ------------Отображение русского шрифта------------- 

// ------------ Генератор радуги ------------- 
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

 

 

 

timof123
Offline
Зарегистрирован: 06.06.2018

Не работают все функции, я пробовал удалять некоторые.

mixail844
Offline
Зарегистрирован: 30.04.2012

вы используюте ColorWipe в строке 26 , при этом сама функция определена в строке 39 .

для того что бы ей можно было пользоваться ,фукцию нужно либо перенести выше строки где она применяеться ,либо добавить ее обьявление тоже выше строк где она применяеться

например в строке 14 : 

void colorWipe(uint32_t c, uint8_t wait);

sadman41
Offline
Зарегистрирован: 19.10.2016

Переставьте их в исходном тексте выше, чтобы получилось так: текст функции , затем ее вызов. Если бы вас во втором классе спросили про гипотенузу - вы же тоже начали бы плечами жать - какая-такая гипотенуза-шмопотенуза...