Arduino error variable or field declared void

Arduino.ru Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru forum.arduino.ru Начал изучать подпрограммы (функции) и приехали. Начал изучать функции и. В общем, не подскажете, почему не работает вот это? Ругается что-то в этом роде: error: variable or field ‘fun’ declared void ‘fun’ was not declared in this scope exit […]

Содержание

  1. Arduino.ru
  2. Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru
  3. forum.arduino.ru
  4. Начал изучать подпрограммы (функции) и приехали.

Arduino.ru

Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru

forum.arduino.ru

Начал изучать подпрограммы (функции) и приехали.

Начал изучать функции и.

В общем, не подскажете, почему не работает вот это?

Ругается что-то в этом роде:

error: variable or field ‘fun’ declared void

‘fun’ was not declared in this scope

exit status 1
variable or field ‘fun’ declared void

Замена типа функции «fun» с void на int (или любой другой) ничего не дает (мне, в принципе, нужен void). Стоит убрать аргументы (т.е. чтобы в скобках было пусто), все работает с любым типом функции.

Я, конечно понимаю, что вопрос идиотский, но что здесь не так? Никак не въеду. Подскажите новичку.

Да, заработало. Но ведь я в третьей строке задал тип переменной «r». Получается, при работе с функциями тип переменной задается только таким образом?

Но ведь я в третьей строке задал тип переменной «r».

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

Кстати, а по каким источникам изучаете? Если по примерам в сети и книгам типа «ардуино для чайников» — бесполезная трата времени. Берите серьёзную книгу по языку, например. такую.

По идее должно быть предупреждение компилятора о том, что переменная «r» в 3 строке нигде не используется.

А оно и есть, просто разработчики IDE по умолчанию поставили опцию «compiler.warning_level=none», чтобы «помочь начинающим», а то тех сильно болтовня компилятора смущает :))) Если заменить «none» на «all», можно узнать много интересного в т.ч. и о «стандартных» библиотеках.

Еще раз спасибо, у меня все заработало! Книгу распечатаю и буду почитать.

Если заменить «none» на «all», можно узнать много интересного в т.ч. и о «стандартных» библиотеках.
не кажется ли Вам , сэр , что это новая тема для этюда очередного ?

Если заменить «none» на «all», можно узнать много интересного в т.ч. и о «стандартных» библиотеках.
не кажется ли Вам , сэр , что это новая тема для этюда очередного ?

Ну, там не так много материала. А, главное, он не так уж и интересен. ну, понатыкали неиспользуемых параметров или там знаковые и беззнаковые переменные между собой сравнивают и что?

Я тут задолжал сообществу по памяти (обещал ведь продолжить и уж давненько не продолжаю). Вот как раз на этой неделе сделаю. Я буду в командировке, а по вечерам в гостинице делать нечерта (ну, не любитель я «пива до утра» и «платных подруг»). Возьму с собй «нанку», ноутбук всегда при мне — вот и займусь.

командировка не в Питер ли ?

Почти 🙂 Великий Новгород.

Здравствуйте. Не подскажите, что за книгу вы предложили? У меня ссылка не открывается.

Кернигана и Ритчи

На своём четвёртом году программирования в Arduino IDE решил попробовать передавать в функцию параметры, получил ошибку, загуглил и сразу набрёл на эту ветку:)
В основном на РНР программирую и вот там такого делать не надо (объявлять в функциях тип входящих переменных).

Кстати, если брать пример, описанный в 2016-том, то обычно передавал параметры в функцию так:

и вполне себе всё устраивало.

Ужас! Особенно к вам! Относительно вашего развития.(

Спасибо за столь оптимистичную оценку моих результатов. Сам я их оцениваю еще хуже.

На самом деле, зашёл просто спасибо написать за строчку:

А книжку по языку Си почитать — не ваш метод?

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

Чтобы повторно код использовать. В простых реализациях бейсика тож такая фигня — подпрограмму вызвать можно, а вот передать/получить что нибудь через это нет.

Чтобы повторно код использовать

Зачем функции. А просто, когда нету GO TO, то ничего другого и не остаётся, чтобы выполнять участки кода в произвольном порядке.

Относительно книг, обычно ищу решение какого-то конкретного вопроса. В Ардуино это не столько с Си связано, сколько с вопросами по использованию разных модулей. Как подключить, использовать и т.д.

Мне тоже после бейсика и паскаля си показался каким-то бешеным языком. Но ниче, разобрался немного.

И это правильно! 🙂

А на каком, простите, языке Вы сейчас пишете, что там goto нет?

Очевидно на русском 🙂

Картинка из оф.мануала, между прочим:

«. Если в течение продолжительного времени случайным образом стучать по клавиатуре, то среди набираемого текста будут возникать осмысленные слова, словосочетания и даже предложения».

Хорошая теорема, но мне обычно нужно или на сегодня или на вчера. В крайних случаях на завтра. В таких условиях, обычно, ничего нового не изучается и лепится из того, что знакомо. Но знаете, с практической точки зрения, такой подход очень эффективен.

А относительно языков программирования, всю аппаратную часть (ESP32, ESP8266, Atmega328, STM32f103) настраиваю через так называемый Wiring (Arduino IDE), серверная часть — PHP. Мобильные приложения конвертирую через JavaScript + PhoneGap. Для обработки больших массивов использую Excel и встроенный Visual Basic. Пару раз помогали студенты программисты, но они все, как один, хотят NodeJS (видать, в ВУЗах это сейчас ходовое).

Источник

Hey guys. I’m having this syntax issue that I have no idea what it means. This is the final output:

oled-array:41: error: variable or field 'displayNumber' declared void
void displayNumber(Adafruit_SSD1306* disp) {
                    ^
oled-array:41: error: 'Adafruit_SSD1306' was not declared in this scope
oled-array:41: error: 'disp' was not declared in this scope
void displayNumber(Adafruit_SSD1306* disp) {
                                    ^
Using library Wire at version 1.0 in folder: /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/Wire 
Using library AdafruitGFX in folder: /Users/alex/Seafile/Projects/Arduino/libraries/AdafruitGFX (legacy)
Using library Adafruit_SSD1306-master at version 1.1.0 in folder: /Users/alex/Seafile/Projects/Arduino/libraries/Adafruit_SSD1306-master 
Using library SPI at version 1.0 in folder: /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/SPI 
exit status 1
variable or field 'displayNumber' declared void

Here is the Code(simplified):

#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display1 = Adafruit_SSD1306(-1);

// function causing the issue
void displayNumber(Adafruit_SSD1306* disp) {
disp->clearDisplay();
disp->setTextSize(1);
disp->setTextColor(WHITE);
disp->setCursor(0,0);
disp->println("asd");
disp->display();
}

void setup() {
    ...
    displayNumber(&display1);  
}

void loop() {
    ...
}

I have tried my code doing exactly what the function body does, but not using a function and the code works perfectly. I’m not sure why the compilation step can Adafruit_SSD1306 object but then it can’t find it when I pass it as a reference. Any help would be greatly appreciated.

EDIT: I created a gist with the full code, please excuse the messiness and the lack of arrays! gist

EDIT 2_: Fixed by moving includes to the top, here is the final code gist

nonetheless, I am clueless —
with the complete code it still don’t work, unless I put the struct to the most upper position.
actually only the function
void dashboard(byte mode)
is in between but which isn’t ever called in here.

/*
 *
 *      using SSD1306 Adafruit library  
 * for a ssd1306 OLED Display  with the ESP8266 board
 *
 *********** This code is for the ESP8266 *********** 
 * 
*/

// i2c
#include <Wire.h>         // Incl I2C comm, but needed for not getting compile error
#define ESPSDA D2         // defaults
#define ESPSCL D1         // 

// TFT
#include <Adafruit_SSD1306.h>
//#include <ESP_SSD1306.h>    // Modification of Adafruit_SSD1306 for ESP8266 compatibility
#include <Adafruit_GFX.h>   // Needs a little change in original Adafruit library (See README.txt file)
#include <Fonts/FreeSans12pt7b.h>            // 
#include <Fonts/FreeSansBold12pt7b.h>        // 
#include <Fonts/FreeSans9pt7b.h>             //
#include <Fonts/FreeMono12pt7b.h>            //   
#include <Fonts/FreeMono9pt7b.h>    
// Pin definitions
#define OLED_RESET 10  // GPIO10=D12 Pin RESET signal (virtual)

Adafruit_SSD1306 display(OLED_RESET);
//Adafruit_SSD1306 display(128, 64, &Wire, D0);
//ESP_SSD1306 display(OLED_RESET); // FOR I2C


//----------------------------------------------------------------------------
// OLED dashboard
//----------------------------------------------------------------------------

void dashboard(byte mode) {     

  display.clearDisplay();
  display.setFont();

  if (mode == 0) {
    display.setFont();  // h=8.0 pt
    display.setCursor( 0,  0);  display.print(" 0 Hello World 1");
    display.setCursor( 0,  8);  display.print(" 8 Hello World 2");
    display.setCursor( 0, 16);  display.print("16 Hello World 3");
    display.setCursor( 0, 24);  display.print("24 Hello World 4");
    display.setCursor( 0, 32);  display.print("32 Hello World 5");
    display.setCursor( 0, 40);  display.print("40 Hello World 6");
    display.setCursor( 0, 48);  display.print("48 Hello World 7");
    display.setCursor( 0, 56);  display.print("56 Hello World 8");
    display.setCursor( 0, 64);  display.print("64 Hello World 9");
  }
  else
  if (mode == 1) {
    display.setFont();  // h=9.0 pt
    display.setCursor( 0,  0);  display.print(" 0 Hello World 1");
    display.setCursor( 0,  9);  display.print(" 9 Hello World 2");
    display.setCursor( 0, 18);  display.print("18 Hello World 3");
    display.setCursor( 0, 27);  display.print("27 Hello World 4");
    display.setCursor( 0, 36);  display.print("36 Hello World 5");
    display.setCursor( 0, 45);  display.print("45 Hello World 6");
    display.setCursor( 0, 54);  display.print("54 Hello World 7");
    display.setCursor( 0, 63);  display.print("63 Hello World 8");
    display.setCursor( 0, 72);  display.print("72 Hello World 9");
  }
  else  
  if (mode == 8) {
    display.setFont(&FreeMono9pt7b); // h=13.10pt
    display.setCursor( 0, 10);  display.print("10 Hello M9");
    display.setCursor( 0, 23);  display.print("23 Hello M9");
    display.setCursor( 0, 36);  display.print("36 Hello M9");
    display.setCursor( 0, 49);  display.print("49 Hello M9");
    display.setCursor( 0, 62);  display.print("62 Hello M9");
  }
  else
  if (mode == 9) {
    display.setFont(&FreeSans9pt7b); // h=16.12pt
    display.setCursor( 0, 12);  display.print("12 Hello FS9-7");
    display.setCursor( 0, 28);  display.print("28 Hello FS9-7");
    display.setCursor( 0, 44);  display.print("44 Hello FS9-7");
    display.setCursor( 0, 60);  display.print("60 Hello FS9-7");
  }
  else
  if (mode ==12) {
    display.setFont(&FreeSans12pt7b); // h=21.17pt
    display.setCursor( 0, 17);  display.print("17 HelloS12");
    display.setCursor( 0, 38);  display.print("38 HelloS12");
    display.setCursor( 0, 59);  display.print("59 HelloS12");
  }
  display.display();
  display.setFont();
}
  



//----------------------------------------------------------------------------
// OLED menu
//----------------------------------------------------------------------------

const char LINELEN = 8;
const char LINENUM = 4;
const char MENULEN = 8;


typedef struct  {
   char line[8][20] = {"line0_67 9012345678" ,"line1_6"      ,"line2_67" ,
                       "line3_6789012345678" ,"line4_6789012345678" ,"line5_6789012345678" ,
                       "line6_6789012345678" ,"line7_6789012345678" };
   char act=5, top=0, btm=top+LINENUM;
   char subl[12]="           ";
} list;

list mList00;


void strcpysubl(char * dest, char * source, char pos) {
   byte l;
   memset(dest,' ',sizeof(dest));
   dest[12]=0;
   strncpy( dest+1, source+pos, LINELEN );   
   if(strlen(source)>(8+pos) )  dest[9] = '~' ; 
   else for( l=strlen(dest); l<=9; l++) dest[l]=' ';    
   dest[10] = '.';
   dest[11] = 0;
}


void  displayMenulist(list mList) {
  int8_t start;
  byte l;
  
  if(mList.act>LINENUM) start=_min(mList.act, MENULEN-LINENUM-1);
  else start=0;
  
  for(byte i=0+start; i<5+start; i++) { 
    strcpysubl( mList.subl, mList.line[i], 0); 
      
      if(i==mList.act) { 
        //display.setTextColor(BLACK, WHITE);
        mList.subl[0]='>';
      }
      //else display.setTextColor(WHITE);
      l=10 + (i-start)*13;
      display.setCursor( 0, l);  display.print(mList.subl);
      Serial.println(mList.subl);
      //display.display();
  } 
  display.display();
}  
                 

                     

void setup(void)
{
  // Start Serial
  //pinMode(D3, OUTPUT);       // + LED_BUILTIN 
   
  pinMode(D7, OUTPUT);
  pinMode(D8, OUTPUT);
  Serial.begin(115200);
  delay(2000); // wait for Serial()
  
  // Start Wire (SDA, SCL)
  Wire.begin(ESPSDA,ESPSCL);  // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  // SSD1306 Init  
  display.begin(SSD1306_SWITCHCAPVCC);  // Switch OLED
  display.setRotation(2);  
  display.clearDisplay();  // Clear the buffer.

  // text display tests
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Hello, world!");  
  display.display();

  delay(1000);
  display.clearDisplay(); 
  display.display();

  for(byte i=0; i<8; i++) { Serial.println(mList00.line[i]); }
  
  Serial.print("act="); Serial.println((byte)mList00.act);

  display.setFont(&FreeMono9pt7b); // h=13.10pt
  displayMenulist(mList00);
     
 // display.display();
  delay(2000);
  
}


void loop() {
   

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
void probel(FILE*,FILE*);
void tire(char,FILE*,FILE*);
void znak(char,FILE*,FILE*);
void prov(char,FILE*,FILE*);
    int main()
    {
        FILE *f1,*f2;
        char c,x;
        
        if((f1= fopen("text.txt","r"))==NULL)
        {perror("Ошибка открытия файла");
        return 1;
        }
        
        if((f2= fopen("new.txt","w"))==NULL)
        {perror("Ошибка создания файла");
        return 1;
        }
        
        while((c=fgetc(f1))!=EOF)
        {
        switch (c)
        {
        case ' ':probel(f1,f2);break;
        case '-':tire(c,f1,f2);break;
        case '.':znak(c,f1,f2);break;
        case ',':znak(c,f1,f2);break;
        case '!':znak(c,f1,f2);break;
        case '?':znak(c,f1,f2);break;
        case ')':znak(c,f1,f2);break;
        case '(':znak(c,f1,f2);break;
        default :fputc(c,f2);
        }
        }
    
    fclose(f1);
    fclose(f2);
 
    return 0;
    }
    
    void probel (*f1,*f2)
    {char c
    if((c=fgetc(f1))!=EOF&&c!=','&&c!='.'&&c!='!'&&c!='?'&&c!='.'&&c!=')'&&c!='(')
        {fputc(" ",f2);if(c!=' ') proverka(c,f1,f2);}
        return;
    }
    void tire(c,*f1,*f2)
    {
        char c;
        fputc(c,f2);
        if((c=fgetc(f1))!=EOF&&c!='-') proverka(c,f1,f2) ; else if(c!=EOF){fputs("-",f2);prov((c=fgetc(f1)),f1,f2);}
        return;
    }
    
    void znak(c,f1,f2)
    {   
        fpurc(c,f2);
        if((c=fgetc(f1))!=EOF&&c!=' ') fputc(" ",f2);else if(c!=EOF)proverka((c=fgetc(f1)),f1,f2) ;   
        
        return; 
    }
    
    void prov(c,*f1,*f2);
        {
        switch c
        {
        case ' ':probel(c,f1,f2);break;
        case '-':tire(c,f1,f2);break;
        case '.':znak(c,f1,f2);break;
        case ',':znak(c,f1,f2);break;
        case '!':znak(c,f1,f2);break;
        case '?':znak(c,f1,f2);break;
        case ')':znak(c,f1,f2);break;
        case '(':znak(c,f1,f2);break;
        default fputc(c,*f2);
        }
        return;
        }

Понравилась статья? Поделить с друзьями:
  • Arderia коды ошибок котел
  • Arderia dsr 220r ошибка
  • Arderia b10 ошибка е3
  • Arctic cat z1 ошибка ecu 25
  • Arcnet communication error