• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Podział dużego projektu
#1
Witajcie,

moje pytanie dotyczy ogólnie pisania kodu w Arduino IDE, a może nawet ogólnie w C++

Do tej pory różne programy, które pisałem na Arduino bywały większe lub mniejsze, ale zawsze w jednym "pliku" - i wszystko grało. 

Ostatnio, jako że stałem się posiadaczem niewielkiego morskiego jachtu żaglowego, postanowiłem zbudować taki system "Smart Boat". Będzie tam sporo czujników - napięcia w akumulatorach, ciśnienia, temperatur w kilku miejscach, obrotów silnika i śruby, poziomu wody, paliwa itp. Całość podzielona na serce - czyli Arduino Mega oraz dwa arduino Nano - jedno obsługujące aku i zbiorniki, drugie silnik. Komunikacja między nimi będzie po USART. I poszczególne elementy sa już zbudowane. 

Ostatnio zabrałem się za zebranie tych "modułów" do kupy i napotkałem pewien problem programistyczny, który nie wiem jak "ugryźć" - mianowicie nie wyobrażam sobie, jak to miało by być pisane w jednym pliku. Jeszcze praktycznie nic nie jest uruchomione, a już jest to niemal 1000 linijek kodu. No to funkcje out. I tu moje zaskoczenie - bo tego kompletnie nie rozumiem. Poszczególne funkcje, które w nagłówku są dołączone do głównego programu (pliki *.cpp i *.h) nie widzą zmiennych globalnych, nie są w stanie odwoływać się do wyświetlacza itd itp. 

Do tej pory wydawało mi się, że własne funkcje dodane w nagłówku sa niejako "wklejane" w kod programu w miejscu ich wywołania i dopiero wówczas kompilator i debuger zabierają się do pracy. A tu niespodzianka. Jak powinno się prawidłowo podejść do tematu? 

Taki przykład kodu głównego
Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);


#include "stronyMenu.h"


byte menuPage = 0;

void setup()
{
  lcd.backlight();
  lcd.noCursor();
  lcd.init();

  lcd.setCursor(0,5);
  lcd.print("s/y Sirius");

}

void loop() {
  switch(menuPage)
  {
    case 0:
    menuZero();
    break;

    case 1:
    menuOne();
    break;
  }
 

}

Następnie plik "stronyMenu.h

Kod:
#ifndef STRONYMENU_H
#define STRONYMENU_H

void menuZero();
void menuOne();

#endif

Oraz "stronyMenu.cpp"
Kod:
#include "stronyMenu.h"

void menuZero()
{
  lcd.setCursor(0,2);
  lcd.print("Menu glowne");
  //dalsza część tego menu
}

void menuOne()
{
  lcd.setCursor(0,2);
  lcd.print("Menu silnik");
  //dalsza część tego menu
}


Kompilator zaś wypluwa tak:


Cytat:C:\Users\{...}\stronyMenu.cpp: In function 'void menuZero()':
C:\Users\{...}\stronyMenu.cpp:5:3: error: 'lcd' was not declared in this scope
  lcd.setCursor(0,2);
  ^~~
C:\Users\{...}\stronyMenu.cpp: In function 'void menuOne()':
C:\Users\{...}\stronyMenu.cpp:12:3: error: 'lcd' was not declared in this scope
  lcd.setCursor(0,2);
  ^~~

exit status 1

Compilation error: 'lcd' was not declared in this scope


Jak rozumiem - funkcje z osobnego pliku nie są przed kompilacją dodawane do głównego programu, bo "nie widzą" istniejącego już obiektu lcd i nie potrafią się do niego odwołać...

Przepraszam, jeśli moje tłumaczenie jest zawiłe, lub problem okaże się trywialny, ale z zawodu nie jestem programistą... I z góry dzięki za porady!
 
Odpowiedź
  


Wiadomości w tym wątku
Podział dużego projektu - przez QubiV8 - 27-01-2024, 23:47
RE: Podział dużego projektu - przez kaczakat - 28-01-2024, 01:34
RE: Podział dużego projektu - przez QubiV8 - 28-01-2024, 11:50
RE: Podział dużego projektu - przez oscarX - 28-01-2024, 14:57
RE: Podział dużego projektu - przez oscarX - 28-01-2024, 02:20
RE: Podział dużego projektu - przez QubiV8 - 29-01-2024, 12:34
RE: Podział dużego projektu - przez Jarewa0606 - 29-01-2024, 15:32
RE: Podział dużego projektu - przez Irvin - 29-01-2024, 20:21
RE: Podział dużego projektu - przez oscarX - 29-01-2024, 20:55
RE: Podział dużego projektu - przez Irvin - 30-01-2024, 00:12
RE: Podział dużego projektu - przez Jarewa0606 - 30-01-2024, 08:27
RE: Podział dużego projektu - przez QubiV8 - 31-01-2024, 01:42
RE: Podział dużego projektu - przez kaczakat - 01-02-2024, 12:14
RE: Podział dużego projektu - przez Jarewa0606 - 01-02-2024, 23:48
RE: Podział dużego projektu - przez kaczakat - 03-02-2024, 05:06

Skocz do:


Przeglądający: 1 gości