• 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
#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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Wiadomości w tym wątku
RE: wyswietlacz OLED 128x32 u8g2 menu problem - przez kaczakat - 21-09-2018, 02:33

Skocz do:


Przeglądający: 1 gości