Содержание
- Arduino.ru
- Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru
- forum.arduino.ru
- Начал изучать подпрограммы (функции) и приехали.
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; } |