• 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
Projekt do Inżynierki
#1
Wink 
Witam Wszystkich!!  Cool Cool Cool
Na początku się przedstawię Mam na imię Michał wszyscy wołają na mnie M@jK . 
Przygodę z arduino zaczynam z 2 powodów. 
Pierwszy to mega ciekawość..... oraz możliwości tego zestawu w niedalekiej przyszłości w nowo wybudowanym domu chcę zbudować sam smart Dom. Drugi obrona pracy inżynierskiej. 
zaczynam niestety od 2-giego konkretnie Wybrałem temat ciekawy mianowicie:
 Projekt i prototyp układu sterowania silnikiem krokowym z wyświetlaczem z wykorzystaniem mikrokontrolera.
W celu realizacji chcę stworzyć prototyp układu filtracji chłodziwa związane jest to technologią wykonawczą w mojej pracy może, w przyszłości zbuduje taki system w firmie. Program musi obsłużyć silnik krokowy, programy w zależności od obróbki (długość przejazdu i częstotliwość) myślę tutaj o 4 programach dla tworzyw obrabianych  i dodatkowym dla obróbki zgrubnej z wcześniej wgranego programu, wybieranie za pomocą przycisków wyświetlacz wskazujący jaki program jest aktywny i jaki mamy wybór w programach (menu obsługowe) awaryjny stop oraz ręczny naciąg z klawiszy. Obecnie nie mam pojęcia jak się za to zabrać mam nadzieje że znajdę tutaj osobę która mnie pokieruje co mogę w tej kwestii uczynić  nie liczę na kopiuj wklej bo się nic nie nauczę ale liczę na pomóc kolegów i wiele cennych wskazówek i odpowiedzi na moje pytania co do projektu. Ja z chęcią pomogę w zakresie CAD i CAM konkretnie specjalizuję się  Powermill i Powershape (branżowcy będą wiedzieli co chodzi)
Posiadam zestaw Arduino Mega jak na obrazku  Angel

[Obrazek: 00039345_1.jpg]
 
Odpowiedź
#2
Witam wszystkich
Udało mi się odpalić wszystko po kolei szukam teraz jak zbudować menu.
Menu musi obsługiwać 6 przycisków
up
left down right
ręczny obrót w lewo ręczny obrot w prawo

Wybory menu
1 obr zgr alu
2 obr wyk alu
3 obr zgr tworzywa
4 obr wyk tworzywa
5 pokaż procent zuzycia wałka

Program y w nich zawarte muszą obracać silnikiem krokowym o dane wartości czasowe

zostawi ktoś ino czym się inspirować
 
Odpowiedź
#3
To typowy przykład nic nie zaczęte kolega czeka na to ze odwalimy mu robotę.
Zamieść jakiś kod jaki zbiłeś opis problem który nie dajesz rady rozwiązać ale nie pisz co ma zawierać program bo to ty go tworzysz .
Informacja o zasadzę działania jest istotna ale w monecie jak zamieszczasz kod i piszesz nie działa to i to a powinno działać taki i tak.
I z takim opisem możemy ci pomóc w rozwiązaniu twojego problemu.
Tu przykład dobrze opisanego problemu: http://forum.arduinopolska.com/watek-pro...etlacz-lcd
Lub zapraszam z tym tematem do ofert pracy tam ktoś ci to na pewno zrobi .
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#4
Brick 
No kolego trochę poniosło Cię z tym z chce gotowy kod, uczę się środowiska i liczę na rady Smile  

Po prostu czekałem za jakimiś konkretami myślałem ze to jest jakiś konkretny kod do edycji ale wszystko czego próbuje nie chce do końca działać opieram się teraz na kodzie znalezionym w internecie próbowałem go zmordować ale nie mogę uzyskać  efektu który chce tzn przerobić go z shielda lcd keypad nawykłe przyciski  na pinach 12 11 10 9 8 7 oraz LcD z l2c.  Exclamation 
Przycisków jest więcej niż do obsługi menu.
w zawartym konie nie ma przycisku return mam nadzieje ze sobie z nim poradzę 
pozostałe 2 będzie to ręczne obracanie silnikiem  
Kod:
/*  Proste MENU dla Arduino ...by wojtekizk@warcaby.lh.pl
-------------------------------------------------------------------------------------------
Opis działania:
Za pomocą 3 przycisków: UP, DOWN i OK budujemy dośc spore menu.
W tym przykładzie nasze głowne MENU ma 5 opcji, a każda z opcji ma swoje
SUBMENU. W sumie mamy 31 opcji do wyboru. Naturalnie potem w programie każdy
taki wybór trzeba obsłuzyć np. w konstrukcji switch - case, ale to juz drugorzędna sprawa.
Masz tu przykład jak budować sobie takie nawet spore menu.
Poniższy przykład jest opatrzony dość szczegółowym komentarzem. Dla prezentacji samego
MENU wykorzystujemy tu komunikację po Serialu, ale bez problemu można ten kod
łatwo zaadoptować na wyświetlacz LCD.
Klawiszami UP - DOWN poruszamy się po poszczególnych opcjach, a klawiszem OK
zatwierdzamy wybór. Symbol "<<<-" oznacza powrót do głównego menu.
--------------------------------------------------------------------------------------------
Instrukcja:
1) 3 MIKROSWITCHE podepnij do pinów 2,3,4 Twojego Arduino, drugi biegun do masy.
2) Wgraj ten szkic na swoje Arduino
3) Odpal Serial i patrz co się dzieje jak będziesz bawił się przyciskami :-)
*/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
// --- definicje przycisków ------------------------------------
#define UP 7       // przycisk  UP na Pin3
#define DOWN 8     // przycisk  DOWN na pinie 2
#define OK 9       // przycisk  OK na pinie 4
// --- zmienne: ------------------------------------------------
String s[50]={     // tablica wszystkich opcji (tutaj przesadziłem z tym 50, bo jest ich 31)
 "PLIK","EDYCJA","SZKIC","NARZEDZIA","POMOC",                   // poziom 0 MENU GŁÓWNE
 "<<<-","Nowy","Otworz","Zapisz","Zamknij",                     // poziom 1 Submenu dla PLIK
 "<<<-","Kopiuj","Wkej","Wytnij","Szukaj","Zamien",             // poziom 2 Submenu dla EDYCJA
 "<<<-","Sprawdz","Wgraj","Export","Import",                    // poziom 3 Submenu dla SZKIC
 "<<<-","Archiwum","Port","Plytka","Programator","Wypal",       // poziom 4 Submenu dla NARZEDZIA
 "<<<-","Samouczek","Pytanie","O nas"};                         // poziom 5 Submenu dla POMOC
 int Min[6]={0,5,10,16,21,27};   // tablica położeń dla pierwszej opcji dla danego poziomu
 int Max[6]={4,9,15,20,26,30};   // tablica położeń dla ostatniej opcji dla danego poziomu
volatile int ak;                  // numer aktualnej opcji
volatile int poziom;              // numer aktualnego poziomu menu
int min,max;                      // min i max dla danego poziomu, czyli pierwsza i ostatnia opcja
int pop=-1;                        // zmienna pomocnicza do sprawdzenia czy nastąpiła zmiana w MENU
// ---- funkcja co wybrano ----------------------------------------
int co()            //funkcja zwraca wartość równą indeksowi tablicy s (lub -1)
{
max=Max[poziom];    // określamy granicę przesuwania menu dla klawisza UP
min=Min[poziom];    // określamy granicę przesuwania menu dla klawisza UP
if(digitalRead(DOWN)==LOW){delay(40);if(digitalRead(DOWN)==LOW) {ak--;if(ak<min)ak=min;}}  // jeśli DOWN
if(digitalRead(UP)==LOW){delay(40);if(digitalRead(UP)==LOW) {ak++;if(ak>max)ak=max;}}      // jeśli UP
if(digitalRead(OK)==LOW){delay(40);if(digitalRead(OK)==LOW)                                // jeśli OK
 {
 if(poziom ==0 && ak==Min[0]){poziom=1;ak=Min[1]+1;return -1;}            // takie tam sztuczki :-)        
 if(poziom ==0 && ak>Min[0]){poziom=ak+1;ak=Min[poziom]+1;return -1;}     // takie tam sztuczki :-)
 if(poziom>0 && ak>Min[poziom]){return ak;}                               // takie tam sztuczki :-)
 if(poziom>0 && ak==Min[poziom]){ak=poziom-1;poziom=0;return -1;}         // takie tam sztuczki :-)
 }
}
return -1;                                // jak nic nie naciśnięto to jednak coś trza zwrócić   :-)
}
// --- funkcja do prezentacji MENU na Serialu --------------------------
void pokazlcd()
{
 for(int i=Min[poziom];i<=Max[poziom];i++)    // wyświetlam wszystkie aktualne opcje
   {
     if(i==ak) {lcd.print(" [ ");lcd.print(s[i]);lcd.print(" ] ");} // jeśli ta opcja jest aktywna
                                                                  // to wyświetam ją w nawiasie kwadratowym
     else lcd.print(s[i]);                                     // jeśli nie to bez nawiasu
     lcd.print(" ");                                           // odstęp
   }
   lcd.println();                                              // nowa linia
}
// ---------------------------------------------------------------------
void setup()
{
lcd.begin(16, 2);           // inicjalizacja Seriala
pinMode(DOWN,INPUT_PULLUP);    // konfiguracja pinów dla przycisków
pinMode(UP,INPUT_PULLUP);      // konfiguracja pinów dla przycisków
pinMode(OK,INPUT_PULLUP);      // konfiguracja pinów dla przycisków
ak=0; poziom=0;                // parametry początkowe MENU
max=Max[poziom];               // index dla ost. pozycji menu
min=Min[poziom];               // index dla pierwszej pozycji menu
}
// === neverending story ===============================================
void loop()
{
 //  --- dla testów pokazujemy raport na Serialu : ---------------
 if(co()!=-1)
 {
   lcd.print("Wybrano klawisz OK --- Wykonuje Akcje dla opcji:  ");
   lcd.println(s[ak]);   // wyświetlam komunikat o podjętej akcji
 }
 //  --- ale  w programie korzystamy z konstrukcji switch - case ----
 //  --- de facto to tu trzeba obsłuzyć wszystkie opcje :-)
 /*
 switch(co())
 {
 case 6:      // funkcja obsługi opcji "Nowy"
   break;
 case 7:     //  funkcja obsługi opcji "Otworz"
   break;
 // itd .... pozostałe funkcje obsługi .........  
 }
  */
 if(pop!=ak) {pokazlcd();pop=ak;}  // aby nie śmiecić na serialu, wyświetlam tylko zmiany :-)
 delay(120);                          // aby był czas na oderwanie palucha od przycisku :-)
                     // ten delay dobrać doświadczalnie, bo osoby z Parkinsonem mają refleks :-)
}
// === KONIEC ===========================================================
 
Odpowiedź
#5
No to już coś czy to menu po wyborze ma coś robić konkretnego czy tylko pisać .
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#6
(18-04-2017, 19:48)adix napisał(a): No to już coś czy to menu po wyborze ma coś robić konkretnego czy tylko pisać .

No generalnie ma to być bardzo proste menu które będzie miało do wyboru 4 podprogramy. 
2 guziki wyboru 
2 kuziki start stop 
i 2 guziki nawijania ręcznego  
programy mają być realizowane od stanu bieżącego silnika 
To co wstawiłem jest mocno rozbudowane  chce je okroić zrobiłem 
Kod:
#include <MenuBackend.h>                 // dołączenie biblioteki
#include <LiquidCrystal_I2C.h>// --- definiujemy dla LCD własne znaki strzałek: dół, lewo, prawo, gora-dół i powrót ---
uint8_t arrowUpDown[8] = {0x4,0xe,0x15,0x4,0x15,0xe,0x4};
uint8_t arrowDown[8]  = {0x4,0x4,0x4,04,0x15,0xe,0x4};
uint8_t arrowRight[8] = {0x0,0x4,0x2,0x1f,0x2,0x4,0x0};
uint8_t arrowLeft[8] = {0x0,0x4,0x8,0x1f,0x8,0x4,0x0};
uint8_t arrowBack[8] = {0x1,0x1,0x5,0x9,0x1f,0x8,0x4};

LiquidCrystal_I2C lcd(0x3F,16,2);  // definicja pinów dla LCD (sprawdź piny w swoim LCD)

 
 

volatile int zm =-1;               // to dla kontroli zmiany stanu klawiatury
volatile int x=-1;                 // zmienna pomocnicza
volatile int stan_Analog;          // wartość na wejściu Analogowym dla klawiaturki analogowej
char *linia1;                      // pierwsza linia wyświetlanego tekstu na LCD
char *linia2;                      // druga linia wyświetlanego tekstu na LCD

// --- tworzymy wszystkie opcje Menu: ---------------------------------------

MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent); // konstruktor

  MenuItem P1 =  MenuItem("     PLIK",1);
     MenuItem P11 = MenuItem("     Nowy",2);
     MenuItem P12 = MenuItem("    Otworz",2);
     MenuItem P13 = MenuItem("  Szkicownik",2);
     MenuItem P14 = MenuItem("  Przyklady",2);
     MenuItem P15 = MenuItem("    Zapisz",2);
     MenuItem P16 = MenuItem(" Zapisz jako..",2);
     MenuItem P17 = MenuItem("   Zaladuj",2);
     MenuItem P18 = MenuItem("     Exit",2);
     
  MenuItem P2 = MenuItem("    EDYCJA",1);
     MenuItem P21 = MenuItem("    Wytnij",2);
     MenuItem P22 = MenuItem("    Kopiuj",2);
     MenuItem P23 = MenuItem("     Wklej",2);
     MenuItem P24 = MenuItem("    Zaznacz",2);
     MenuItem P25 = MenuItem("    Znajdz",2);
 

/* --- Teraz pozycjonujemy  menu ( zgodnie z ustawieniem podanym powyżej) ------------
add - dodaje w pionie, addRight - dodaje w poziomie z prawej , addLeft dodaje z lewej
*/
void menuSetup()                       // funkcja klasy MenuBackend
{
     menu.getRoot().add(P1);          // ustawiamy korzeń Menu, czyli pierwszą opcję
     P1.add(P11);                     // rodzic PLIK ma dziecko Nowy więc dodaje je w pionie
       P11.add(P12);P11.addLeft(P1);  // poniżej Nowy jest Otworz więc także w pionie
                                      // a addLeft(P1) pozwoli nam wrócić klawiszem w lewo do PLIK  
       P12.add(P13);P12.addLeft(P1);  // analogicznie robimy ze wszystkimi podopcjami dla PLIK
       P13.add(P14);P13.addLeft(P1);
       P14.add(P15);P14.addLeft(P1);
       P15.add(P16);P15.addLeft(P1);
       P16.add(P17);P16.addLeft(P1);
       P17.add(P18);P17.addLeft(P1);
       P18.addLeft(P1);P18.add(P11);  // tutaj zamykamy pętlę i wracamy do pierwszej podopcji
                                      // dzieki temu nie musimy wracać na górę przez uciążliwe
                                      // klikanie klawisza Up
                                 
     P1.addRight(P2);                 // po prawej dla PLIK jest EDYCJA
     P2.add(P21);                     // rodzic EDYCJA ma dziecko Wytnij
       P21.add(P22);P21.addLeft(P2);  // poniżej Wytnij jest Kopiuj
       P22.add(P23);P22.addLeft(P2);  // analogicznie dla wszystkich podopcji
       P23.add(P24);P23.addLeft(P2);
       P24.add(P25);P24.addLeft(P2);
       P25.addLeft(P2);P25.add(P21);  // i zamknięcie pętli oraz ew. powrót do pierwszej opcji
}
// ----------- uff... nareszcie :-) -----------------------------------------------------------------------
void menuUseEvent(MenuUseEvent used)      // funkcja klasy MenuBackend - reakcja na wciśnięcie OK
                                         // tutaj właśnie oddajemy menu na rzecz akcji obsługi klawisza OK
{

  // przykładowa reakcja na wcisnięcie klawisza OK w opcji Otworz :
  if (used.item.getName() == "    Otworz")   // Uwaga - dokładnie taki sam ciąg "    Otworz" jak w menu !!!
                                             // bo przecież getName() pobiera nazwę
     {
       lcd.setCursor(1,0);lcd.print("Otwieram drzwi"); // info
       digitalWrite(0,HIGH);delay(2000);digitalWrite(0,LOW); // na 2 sekundy pin 0 otrzymał stan wysoki
                                                             // czyli np. otworzyły się drzwi
       lcd.setCursor(1,0);lcd.print("              ");lcd.setCursor(1,0);lcd.print(linia1); //poprzedni stan LCD
     }
 

// --- Reakcja na wciśnięcie klawisza -----------------------------------------------------------------
void menuChangeEvent(MenuChangeEvent changed);  // funkcja klasy MenuBackend
{
 /* tak naprawdę to tylko tutaj przydaje się ów shortkey i służy przede wszystkim do wzbogacenia menu
    o symbole strzałek w zależności co wybrano. Wszystko co tutaj się wyprawia jest pokazywane na LCD.
 */
 int c=changed.to.getShortkey();                         // pobieramy shortkey (1,2,3, lub4)
 lcd.clear();                                            // bez komentarza
 lcd.setCursor(0,0);
 if(c==1)                                                // jeśli to menu głowne (shortkey=1) to:
   {
   lcd.write(3);                                         // strzałka w lewo
   strcpy(linia1,changed.to.getName());                  // tworzymy napis w pierwszej linii
   lcd.print(linia1);                                    // wyświetlamy ją
   lcd.setCursor(15,0);lcd.write(4);                     // strzałka w prawo
   lcd.setCursor(0,1);lcd.write(5);                      // strzałka w dół
   lcd.setCursor(15,1);lcd.write(5);                     // strzałka w dół
   }
   if(c==2)                                              // jeśli to podmenu dla dziecka - (shortkey=2) to:
   {
   lcd.print("*");                                       // rysujemy gwiazdkę
   strcpy(linia2,changed.to.getName());                  // tworzymy napis w pierwszej linii
   lcd.print(linia1);                                    // wyświetlamy ją
   lcd.setCursor(15,0);lcd.print("*");                   // gwiazdka
   lcd.setCursor(0,1);lcd.write(6);                      // druga linia i strzałka powrotu (arrowBack)
   lcd.print(changed.to.getName());                      // wyświetlamy nazwe "dziecka"
   lcd.setCursor(15,1);lcd.write(7);                     // strzałka góra-dół
   }
   if(c==3)                                              // jeśli dziecko  ma dziecko - (shortkey =3) to:
   {
   lcd.print("*");                                       // gwiazdka
   strcpy(linia2,changed.to.getName());                  // kopiujemy akt. nazwe opcji menu do zmiennej linia2
   lcd.print(linia1);                                    // i wyświetlamy pierwszą linię
   lcd.setCursor(15,0);lcd.print("*");                   // gwiazdka
   lcd.setCursor(0,1);lcd.write(6);                      // druga linia i strzałka arrowBack
   lcd.print(changed.to.getName());                      // wyświetlamy wnuka w drugiej linii
   lcd.setCursor(15,1);lcd.write(4);                     // strzałka w prawo bo są wnuki
   }
   
   if(c==4)                                              // jeśli to wnuk  (shortkey =4) to:
   {
   lcd.print("*");                                       // gwaizdka
   lcd.print(linia2);                                    // w pierwszej linii wyświetlamy dziecko ( czyli rodzica wnuka)
   lcd.setCursor(15,0);lcd.print("*");                   // gwaizdka
   lcd.setCursor(0,1);lcd.write(6);                      // druga linia i strzałka arrowBack
   lcd.print(changed.to.getName());                      // wyświetlamy wnuka
   lcd.setCursor(15,1);lcd.write(7);                     // strzałka góra-dół
   }


 {

  pinMode(8,INPUT);digitalWrite(8,HIGH);
  pinMode(9,INPUT);digitalWrite(9,HIGH);
  pinMode(10,INPUT);digitalWrite(10,HIGH);
  pinMode(11,INPUT);digitalWrite(11,HIGH);
  pinMode(12,INPUT);digitalWrite(12,HIGH);  

if(digitalRead(8)==LOW) return 1;
if(digitalRead(9)==LOW) return 3;
if(digitalRead(10)==LOW) return 4;
if(digitalRead(11)==LOW) return 0;
if(digitalRead(12)==LOW) return 2;
return -1;
 }
}
// ============================================================================================
//
void setup()
{
 linia1=new char[16];  // zainicjowanie dynamicznego wskaźnika do tekstu
 linia2=new char[16];  // to BARDZO WAŻNE, bo wskażnik dynamiczny musi wskazywać na
                       // z góry określone miejsce w pamieci. Gdybyśmy tego nie zrobili
                       // to wcześniej czy później programik mógłby wskoczyć w nieokreślony
                       //  bliżej obszar pamięci, co może skutkować nieodwracalnymi konsekwencjami
                       // łącznie z przestawieniem Fuse Bitów !!!  
                       // Proszę uważać na wszystkie dynamiczne wskaźniki, TAKA DOBRA RADA :-)
 Serial.begin(9600);   // inicjacja Seriala, głównie do testów
 lcd.begin(16, 2);     // inicjacja LCD
 lcd.createChar(3,arrowLeft);    // tworzymy w pamięci LCD 5 własnych znaków dla strzałek
 lcd.createChar(4,arrowRight);
 lcd.createChar(5,arrowDown);
 lcd.createChar(6,arrowBack);
 lcd.createChar(7,arrowUpDown);


 pinMode(8,INPUT);digitalWrite(8,HIGH); // tu przykładowe piny cyfrowe dla 3 wersji funkcji czytaj_3(1,2,3,11,12)
  pinMode(9,INPUT);digitalWrite(9,HIGH);
  pinMode(10,INPUT);digitalWrite(10,HIGH);
  pinMode(11,INPUT);digitalWrite(11,HIGH);
  pinMode(12,INPUT);digitalWrite(12,HIGH);

 menuSetup();          // funkcja klasy MenuBackend - tu tak naprawdę tworzymy nasze menu
 menu.moveDown();      // idziemy do pierwszej opcji - PLIK, moveDown bo pierwotnie byliśmy w root
                       // to tak jak w Awatarze drzewa rosną korzeniami do góry :-)
}
// --- I nadszedł czas na neverending story :-) --------------------------------------------
void loop()    
{
 x=czytaj_3(0);delay(30);             // odczytujemy stan klawiatury:
 /*
 Ja używam funkcji czytaj_1() bo mam akurat klawiaturkę podpiętą pod A0
 Jeśli masz inna klawiaturkę to użyj funkcji czytaj_2 lub czytaj_3 - patrz opis
 Ponadto musisz pamietać że w funkcji obsługo klawisza OK - menuUseEvent(MenuUseEvent used)
 także musisz użyć odpowiedniej wersji funkcji czytaj !!!
 */
 if(zm!=x)                               // jesli była zmiana stanu to :
   {
     switch(x)                           // sprawdzamy co nacisnieto
     {
     case 0: menu.moveRight();break;     // jesli naciśnięto klawisz w Prawo to przesuń menu w prawo
     case 1: menu.moveUp();break;        // menu do góry
     case 2: menu.moveDown();break;      // menu w dół
     case 3: menu.moveLeft();break;      // menu w lewo
     case 4: menu.use();break;           // wciśnięto OK więc skok do funkcji menuUseEvent(MenuUseEvend used)
                                         // to w tej funkcji właśnie obsługujemy nasze Menu, tu sprawdzamy
                                         // jaką opcję wybrano i tutaj tworzymy kod do obslugi zdarzenia.
     }
   } zm=x;                               // przypisanie zmiennej zm wartości x po to, aby dluższe wciskanie tego
                                         // samego klawisza nie powodowało ponownej generacji zdarzenia.
                                         // program reaguje na zmianę stanu klawiatury.
}
// === KONIEC ===========================================================
ale cały czas nie działa błedy


Kod:
Arduino:1.8.2 (Windows 10), Płytka:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

menu:23: error: 'menuUseEvent' was not declared in this scope

MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent); // konstruktor

                               ^

menu:23: error: 'menuChangeEvent' was not declared in this scope

MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent); // konstruktor

                                            ^

C:\Users\Majk\Desktop\menu\menu.ino: In function 'void menuUseEvent(MenuUseEvent)':

menu:92: error: 'changed' was not declared in this scope

  int c=changed.to.getShortkey();                         // pobieramy shortkey (1,2,3, lub4)

        ^

C:\Users\Majk\Desktop\menu\menu.ino:144:32: warning: return-statement with a value, in function returning 'void' [-fpermissive]

if(digitalRead(8)==LOW) return 1;

                               ^

C:\Users\Majk\Desktop\menu\menu.ino:145:32: warning: return-statement with a value, in function returning 'void' [-fpermissive]

if(digitalRead(9)==LOW) return 3;

                               ^

C:\Users\Majk\Desktop\menu\menu.ino:146:33: warning: return-statement with a value, in function returning 'void' [-fpermissive]

if(digitalRead(10)==LOW) return 4;

                                ^

C:\Users\Majk\Desktop\menu\menu.ino:147:33: warning: return-statement with a value, in function returning 'void' [-fpermissive]

if(digitalRead(11)==LOW) return 0;

                                ^

C:\Users\Majk\Desktop\menu\menu.ino:148:33: warning: return-statement with a value, in function returning 'void' [-fpermissive]

if(digitalRead(12)==LOW) return 2;

                                ^

C:\Users\Majk\Desktop\menu\menu.ino:149:9: warning: return-statement with a value, in function returning 'void' [-fpermissive]

return -1;

        ^

menu:155: error: a function-definition is not allowed here before '{' token

{

^

menu:184: error: a function-definition is not allowed here before '{' token

{

^

menu:207: error: expected '}' at end of input

}

^

exit status 1
'menuUseEvent' was not declared in this scope

Ten raport powinien zawierać więcej informacji jeśli w
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"
 
Odpowiedź
#7
Powiem tak przeróbka tego to jak byś chciał rozj.. ścianę głowa szybciej napiszesz od 0 bazując w 10% na tym niż to przerobił.
Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // definicja pinów dla LCD (sprawdź piny w swoim LCD)
const int Up=10;
void setup() {
  Serial.begin(9600);
pinMode(Up, INPUT_PULLUP);
  lcd.init();              
  lcd.init();
  lcd.backlight();
Lcd(0);

}
  int a;
void loop() {


if(digitalRead(Up)==0){

  a++;
  if(a==2){
    a=0;
  }
  Lcd(a);
}
Serial.println(a);
}
void Lcd(int stan){
  switch(stan){
    case 0:
      lcd.setCursor(0,0);
  lcd.print("> obr zgr alu   ");
  lcd.setCursor(0,1);
  lcd.print("  obr wyk alu   ");
  break;
      case 1:
      lcd.setCursor(0,0);
  lcd.print("  obr zgr alu   ");
  lcd.setCursor(0,1);
  lcd.print("> obr wyk alu   ");
  break;
  }
delay(1000);
}
Masz tu przykład nie wiem czy oto ci dokładnie chodzi ale mniej wiecej na tym się wzoruj .
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#8
Dziękuję za info Smile
Ale szczerze nie radze sobie z tym menu wszystko co próbuje kończy się na tym samym.
Może dostane jakiś Tutoriale pisania potrzebnych komend do napisania menu
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości