Ошибка при использовании функций в коде
- Войдите на сайт для отправки комментариев
Вс, 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 :
voidcolorWipe(uint32_t c, uint8_t wait);Переставьте их в исходном тексте выше, чтобы получилось так: текст функции , затем ее вызов. Если бы вас во втором классе спросили про гипотенузу - вы же тоже начали бы плечами жать - какая-такая гипотенуза-шмопотенуза...