Projekt do Inżynierki - M@jKPacholski - 19-01-2017
Witam Wszystkich!!
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
RE: Projekt do Inżynierki - M@jKPacholski - 15-04-2017
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ć
RE: Projekt do Inżynierki - adix - 17-04-2017
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-problem-z-enkoderem-wyswietlacz-lcd
Lub zapraszam z tym tematem do ofert pracy tam ktoś ci to na pewno zrobi .
RE: Projekt do Inżynierki - M@jKPacholski - 17-04-2017
No kolego trochę poniosło Cię z tym z chce gotowy kod, uczę się środowiska i liczę na rady
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.
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 ===========================================================
RE: Projekt do Inżynierki - adix - 18-04-2017
No to już coś czy to menu po wyborze ma coś robić konkretnego czy tylko pisać .
RE: Projekt do Inżynierki - M@jKPacholski - 18-04-2017
(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"
RE: Projekt do Inżynierki - adix - 18-04-2017
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 .
RE: Projekt do Inżynierki - M@jKPacholski - 06-05-2017
Dziękuję za info
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
|