• 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
wyswietlacz OLED 128x32 u8g2 menu problem
#1
Brick 
witam wszystkich, moje pytanie brzmi ... czy ktoś przerabial temat menu z tym wyswietlaczem ? mianowicie menu uruchomione , ale nie moge dojsc jak zrobic zeby sie przwijalo na nastepne pozycje (w sumie jest ich 7) , 3 pierwsze widac , a dalej juz znika pasek menu , mecze sie juz kilka dni z tym problemem ale bezskutecznie
- biblioteka U8g2 (czyli nastepca U8gLib)
- wyswietlacz 128x32 - 0.91 OLED niebieski SSD1306 (albo jak kto woli 1305)
- uno
- 3 przyciski do obslugi menu

kod w zalaczniku Idea


Załączone pliki
.zip   0-91_oled_menu--atmega328_u8g2.zip (Rozmiar: 1.13 KB / Pobrań: 3)
 
Odpowiedź
#2
Witam, wrzucasz jakiś kawałek projektu i nie wiadomo czy to w ogóle ma prawo działać - komplet to kod, schemat, zdjęcia, opis co to i po co. Jak jest przycisk zwierany do masy to powinien normalnie być włączony przez rezystor np. 10k do VCC, tak masz?
Można też wpisać zamist trybu INPUT INPUT_PULLUP tu:
Kod:
pinMode ( p1, INPUT);
pinMode ( p2, INPUT);
pinMode ( p3, INPUT);
 
Odpowiedź
#3
na razie test wyswietlacza , 3 przyciski do obslugi , jesli bedzie dzialal tak jak chce to wtedy bedzie dalsza czesc , przyciski zwierane do masy przez 10k , od strony hw wszystko tak jak ma byc , zostaje tylko strona sw
 
Odpowiedź
#4
Lepiej wrzuć schemat. Z Twojego opisu wynika, że nie wiesz co robisz. A ja się teraz będę powtarzał i zejdzie tak nam do Wielkanocy: pin przycisku jest albo zwierany do masy, albo do VCC (BEZ REZYSTORA), a w czasie bezczynności jest PODCIĄGNIĘTY (podłączony na stałe przez rezystor np. 10k) do VCC lub GND - na odwrót, dzięki temu procesor zauważa zmianę stanu na pinie. Więc albo jest problem ze schematem, albo wysławianiem.
Typowo w AVR jest to zwieranie do masy, a podciągnięcie do VCC, bo robi się to poleceniem konfigurującym wejście pinu i nie trzeba rezystorów na płytce.
A kod programu wklejaj normalnie w "kod" w pełnej edycji, pewnie byłoby więcej podpowiedzi, ale nikomu się nie chce ściągać, rozpakowywać i oglądać, bo niektórzy czytają forum np. jadąc pociągiem, przecież to parę linijek programu:
Kod:
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED

//==przyciski=========================================================

#define p2 7  // srodkowy
#define p1 9  // lewy
#define p3 8  // prawy

#define MENU_ITEMS 7
char* menu_strings[MENU_ITEMS] = { "111111", "222222", "333333", "444444", "555555", "666666", "777777" };

int menu_current;

//==update_menu=======================================================

void update_menu(){

pinMode ( p1, INPUT);
pinMode ( p2, INPUT);
pinMode ( p3, INPUT);

if (digitalRead (p1) == LOW ) {
     menu_current++;
     if ( menu_current >= MENU_ITEMS )
       menu_current = 0;
}
else if ( digitalRead (p3) == LOW ) {
     if ( menu_current == 0 )
       menu_current = MENU_ITEMS;
     menu_current--;
}
}

//==draw_menu=========================================================

void draw(){
 
 uint8_t i, h, w, d;
 
 u8g2.setFont(u8g2_font_helvR08_te);
 u8g2.setFontRefHeightText();
 u8g2.setFontPosTop();
 h = u8g2.getAscent()-u8g2.getDescent();
 w = u8g2.getDisplayWidth();

 for( i = 0; i < MENU_ITEMS; i++ ) {        // draw all menu items
   d = (w-u8g2.getStrWidth(menu_strings[i]))/2;
     u8g2.setDrawColor(2);

   if ( i == menu_current ) {   // current selected menu item
     u8g2.drawBox(0, i*h, w, h);     // draw cursor bar
     u8g2.setDrawColor(0);
   }
  u8g2.drawStr(d, i*h, menu_strings[i]);
 }
}

//==setup=============================================================

void setup() {
 // OLED Display
 u8g2.begin();
 
}

//==loop==============================================================

void loop() {

 u8g2.firstPage();
 do {
   draw();
 } while ( u8g2.nextPage() );
//  delay(10);
 update_menu();
}

//====================================================================
Z kodu programu wynika, że przycisk jest podciągnięty przez Twój rezystor 10k do VCC, a wciskając go zwierasz bezpośrednio do masy. Pewnie dlatego nie działa. Nie jest to żaden problem ani HW, ani SW, tylko niezgodności jednego z drugim.
Dlatego by nie marnować czasu teraz się zdecyduj, który układ wybierasz, a na przyszłość wrzucaj kod i schemat + ewentualnie zdjęcia, bo mając nawet jedno i drugie prawidłowo ludzie i tak sobie źle podłączą na układzie - każdy może się pomylić.
A to prowadzi do wniosku: zalicz jakiś kurs podstaw elektroniki i Arduino - są darmowe tu: kurs.
 
Odpowiedź
#5
kolego kaczakat , problem dotyczy menu a nie przycisków , nie czytasz ze zrozumieniem (to po pierwsze) .
po drugie : napisałem wyraźnie , przewijają się pierwsze 3 pozycje , później pasek menu znika na 4 ,5 ,6 ,7 (nie widać go) , później znów się pojawia na pozycji 1 (wtedy jest widoczny na wyświetlaczu) , jeśli nie masz nic więcej do powiedzenia nt. kodu to bardzo proszę nie odpowiadaj na posty bo i tak nic nie wnosisz do tego wątku
 
Odpowiedź
#6
(21-09-2018, 21:26)hc912 napisał(a): jeśli nie masz nic więcej do powiedzenia nt. kodu to bardzo proszę nie odpowiadaj na posty bo i tak nic nie wnosisz do tego wątku

Tryb roszczeniowy, wkład własny ZERO!!!
Nawet kolega kodu nie przeanalizował, bo pewnie dodałby swoje komentarze, chyba, że jest geniuszem ale wtedy nie było by miałczącego postu na forum.

W kodzie widzę już jeden błąd (pewnie jest ich więcej). Nie dam ryby, dam wędkę.
Wyeliminuj obsługę przycisków, KTÓRA JEST ZROBIONA ŹLE!
Przypisz zmiennej stałą wartość i sprawdź jak zachowuje się menu. Wyciągnij wnioski, popraw błędy i będzie ok.


PS
Trybem roszczeniowym wiele kolega nie uzyska. Ewentualne osoby, które będą chciały pomóc oleją kolegę. Dobrze radzę zastanowić się nad sobą i zmienić treść postu.
 
Odpowiedź
#7
wyswietlacz opanowany , dziekuje es2 za sugestie , temat mozna zamknac, pozdrawiam
 
Odpowiedź
#8
(22-09-2018, 10:32)hc912 napisał(a): wyswietlacz opanowany

I tak to juz jest na forach. Prośby, błagania, a jak problem zostanie rozwiązany to poprawnego kodu się nie pokazuje. Jak ktoś będzie miał podobny problem niech się męczy.
Później tylko narzekania "nikt na tym forum nie chce pomóc" itp.

Sami sobie użytkownicy robicie "kuku".
 
Odpowiedź
#9
(22-09-2018, 10:51)es2 napisał(a):
(22-09-2018, 10:32)hc912 napisał(a): wyswietlacz opanowany

I tak to juz jest na forach. Prośby, błagania, a jak problem zostanie rozwiązany to poprawnego kodu się nie pokazuje. Jak ktoś będzie miał podobny problem niech się męczy.
Później tylko narzekania "nikt na tym forum nie chce pomóc" itp.

Sami sobie użytkownicy robicie "kuku".

Zgadzam się w 100%
Temat zamknę, gdy pojawi się poprawny kod.
Nawet w przypadkach, gdy autor wątku sam rozwiąże problem, powinien podzielić się informacją z użytkownikami.
Taki jest sens istnienia forów internetowych.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#10
(22-09-2018, 15:22)Robson Kerman napisał(a): Temat zamknę, gdy pojawi się poprawny kod.

To już pewnie nie za mojej kadencji. Prędzej pewnie ludzie wylądują na Marsie niż zobaczymy tu poprawny kod autora.

Młodzież tak ma, meczy się nad kodem miesiąc co wycenia na 160h*400zł = 64k zł a robota powinna być zrobiona w 1h (gotowiec z netu) * 30zł (amator). Kodu oczywiście nie chce umieszczać, bo to jest "jego indywidualne dzieło", a tak naprawdę zwykły PLAGIAT.  Czy plagiat jest chroniony prawami autorskimi? Czy za plagiat można żądać wynagrodzenia?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości