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.