Ошибка при использовании функций в коде
- Войдите на сайт для отправки комментариев
Вс, 21/10/2018 - 10:37
У меня есть код для 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); }
Не работают все функции, я пробовал удалять некоторые.
вы используюте ColorWipe в строке 26 , при этом сама функция определена в строке 39 .
для того что бы ей можно было пользоваться ,фукцию нужно либо перенести выше строки где она применяеться ,либо добавить ее обьявление тоже выше строк где она применяеться
например в строке 14 :
void
colorWipe(uint32_t c, uint8_t wait);
Переставьте их в исходном тексте выше, чтобы получилось так: текст функции , затем ее вызов. Если бы вас во втором классе спросили про гипотенузу - вы же тоже начали бы плечами жать - какая-такая гипотенуза-шмопотенуза...