Found a wiring for the buttons that works.

main
Thomas Dettbarn 2022-01-24 20:56:13 +01:00
rodzic de9335c57d
commit 2105667509
3 zmienionych plików z 110 dodań i 40 usunięć

Wyświetl plik

@ -14,11 +14,10 @@ is the result.
# COMPILING # COMPILING
Please have a look at the sourcecode. It is imperative that the GPIO numbering from the Please have a look at the sourcecode. It is imperative that the GPIO numbering from the
(deprecated) sysfs is being reflected in the physicalmapping[] array. Thus, the first time you (deprecated) sysfs is being reflected in the physicalmapping[] array. Thus, the first time you
try to compile it, it will fail. try to compile it, it will fail. You need to configure lines 21-26. I am really really sorry.
Find the #if 0 line which reflects your board, or find the correct sysfs mapping for your board. (Yes, both files. oledtest.c as well as keytest.c)
Really really sorry, this is what happens when you become a maker.
Once you changed one of the #if 0 to #if 1, you can compile it with Once you have done this, please run
gcc -O3 -o oledtest.app oledtest.c gcc -O3 -o oledtest.app oledtest.c
gcc -O3 -o keytest.app keytest.c gcc -O3 -o keytest.app keytest.c

Wyświetl plik

@ -17,6 +17,15 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
// Configuration starts here
//#define PATCHED_WIRING // comment in if you did the EXACT SAME wiring as I did ;)
//#define PINOUT_JETSONNANO // comment in if you connected the SH1106 directly to a Jetson Nano
//#define PINOUT_BANANAPI // comment in if you connected the SH1106 directly to a Banana Pi Zero
//#define PINOUT_RASPBERRYPI // comment in if you connected the SH1106 directly to a Raspberry Pi (Zero)
// Configuration ends here
#include <stdlib.h> #include <stdlib.h>
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
@ -47,40 +56,39 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define BITMAP_HEIGHT 64 #define BITMAP_HEIGHT 64
#define BITMAP_WIDTH 128 #define BITMAP_WIDTH 128
//// depends on the development board //// depends on the development board
// the way I understand this is, that the physical pins are mapped into // the way I understand this is, that the physical pins are mapped into
// the system memory. to accces those, there is some sort of memory // the system memory. to accces those, there is some sort of memory
// offset maybe // offset maybe
#if 0 #if defined(PINOUT_JETSONNANO)
#warning "This mapping is for the Jetson Nano board." #warning "This mapping is for the Jetson Nano board."
// Jetson Nano // Jetson Nano
// source: https://maker.pro/nvidia-jetson/tutorial/how-to-use-gpio-pins-on-jetson-nano-developer-kit // source: https://maker.pro/nvidia-jetson/tutorial/how-to-use-gpio-pins-on-jetson-nano-developer-kit
const short physicalmapping[41]={ const short physicalmapping[41]={
0, // placeholder. there is no PIN0 0, // placeholder. there is no PIN0
-1, -1,// PIN1 =3.3V DC, PIN2 =5V DC -1, -1,// PIN1 =3.3V DC, PIN2 =5V DC
-1, -1, -1, -1,// 3,4
-1, -1, -1, -1,// 5,6
216, -1, //PIN7 = AUDIO_MCLK 216, -1, //PIN7 = AUDIO_MCLK
-1, -1, -1, -1, //9,10
50, 79, //PIN11=UART_2_RTS,PIN12=I2S_4_CLK 50, 79, //PIN11=UART_2_RTS,PIN12=I2S_4_CLK
14, -1, 14, -1, //13,14
194,232, 194,232, //15,16
-1, 15, -1, 15, //17,18
16, -1, 16, -1, //19,20
17, 13, 17, 13, //21,22
18, 19, 18, 19, //23,24
-1, 20, -1, 20, //25,26
-1, -1, -1, -1, //27,28
149, -1, 149, -1, //29,30
200,168, 200,168, //31,32
38, -1, 38, -1, //33,34
76, 51, 76, 51, //35,36
12, 77, 12, 77, //37,38
-1, 78 -1, 78 //39,40
}; };
#elif 0 #elif defined(PINOUT_BANANAPI)
#warning "This mapping is for the Banana Pi board." #warning "This mapping is for the Banana Pi board."
// source: https://wiki.fw-web.de/doku.php?id=en:bpi-r64:gpio // source: https://wiki.fw-web.de/doku.php?id=en:bpi-r64:gpio
const short physicalmapping[41]={ const short physicalmapping[41]={
@ -106,8 +114,8 @@ const short physicalmapping[41]={
86, -1, //37,38 86, -1, //37,38
-1, -1 //39,40 -1, -1 //39,40
}; };
#elif 1 #elif defined(PINOUT_RASPBERRYPI)
#warning "This mapping is for the Raspberry Pi Zero W 1.1 board" #warning "This mapping is for the Raspberry Pi (Zero) board"
// source: https://www.theengineeringprojects.com/wp-content/uploads/2021/03/raspberry-pi-zero-5.png // source: https://www.theengineeringprojects.com/wp-content/uploads/2021/03/raspberry-pi-zero-5.png
// NOTE: GPIO16 was actually missing in the diagram. // NOTE: GPIO16 was actually missing in the diagram.
const short physicalmapping[41]={ const short physicalmapping[41]={
@ -134,11 +142,36 @@ const short physicalmapping[41]={
-1, 21 //39,40 -1, 21 //39,40
}; };
#else #else
#error "Please have a look at the source code and select one of the mappings from the sysfs numbering to the physical pins" #error "The physical pins need to be mapped to the GPIO numbers. For some reason, those numbers are different for each board out there. So please have a look at the sourcecode, lines 21-26, and select the one that works best for you."
const int physicalmapping[41]={0};
#endif #endif
// this is the GPIO pinout for the waveshare OLED 1.3 SH1106 hat // this is the GPIO pinout for the waveshare OLED 1.3 SH1106 hat
// source: https://www.waveshare.com/1.3inch-oled-hat.htm // source: https://www.waveshare.com/1.3inch-oled-hat.htm
#ifdef PATCHED_WIRING
// Apparently, not every Key was mapped to a working GPIO pin.
// So I did some rewiring. This is a setup that works
#define PIN_LEFT (physicalmapping[ 3]) // OLED pin 29
#define PIN_UP (physicalmapping[ 5]) // OLED pin 31
#define PIN_FIRE (physicalmapping[ 7]) // OLED pin 33
#define PIN_DOWN (physicalmapping[29]) // OLED pin 35
#define PIN_RIGHT (physicalmapping[31]) // OLED pin 37
#define PIN_KEY1 (physicalmapping[27]) // OLED pin 36
#define PIN_KEY2 (physicalmapping[24]) // OLED pin 38
#define PIN_KEY3 (physicalmapping[26]) // OLED pin 40
#define PIN_BL (physicalmapping[16]) // OLED pin 12
#define PIN_DC (physicalmapping[18])
#define PIN_RST (physicalmapping[22])
#define PIN_CS (physicalmapping[28]) // OLED pin 24
#define PIN_MOSI (physicalmapping[19])
#define PIN_MISO (physicalmapping[21])
#define PIN_SCLK (physicalmapping[23])
#else
#define PIN_LEFT (physicalmapping[29]) #define PIN_LEFT (physicalmapping[29])
#define PIN_UP (physicalmapping[31]) #define PIN_UP (physicalmapping[31])
#define PIN_FIRE (physicalmapping[33]) #define PIN_FIRE (physicalmapping[33])
@ -149,14 +182,17 @@ const short physicalmapping[41]={
#define PIN_KEY2 (physicalmapping[38]) #define PIN_KEY2 (physicalmapping[38])
#define PIN_KEY3 (physicalmapping[40]) #define PIN_KEY3 (physicalmapping[40])
#define PIN_BL (physicalmapping[12]) #define PIN_BL (physicalmapping[12])
#define PIN_DC (physicalmapping[18]) #define PIN_DC (physicalmapping[18])
#define PIN_RST (physicalmapping[22]) #define PIN_RST (physicalmapping[22])
#define PIN_CS (physicalmapping[24]) #define PIN_CS (physicalmapping[24])
#define PIN_MOSI (physicalmapping[19]) #define PIN_MOSI (physicalmapping[19])
#define PIN_MISO (physicalmapping[21]) #define PIN_MISO (physicalmapping[21])
#define PIN_SCLK (physicalmapping[23]) #define PIN_SCLK (physicalmapping[23])
#endif
int gpio_export(int pin) int gpio_export(int pin)

Wyświetl plik

@ -17,6 +17,15 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
// Configuration starts here
//#define PATCHED_WIRING // comment in if you did the EXACT SAME wiring as I did ;)
//#define PINOUT_JETSONNANO // comment in if you connected the SH1106 directly to a Jetson Nano
//#define PINOUT_BANANAPI // comment in if you connected the SH1106 directly to a Banana Pi Zero
//#define PINOUT_RASPBERRYPI // comment in if you connected the SH1106 directly to a Raspberry Pi (Zero)
// Configuration ends here
#include <stdlib.h> #include <stdlib.h>
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
@ -53,7 +62,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// the way I understand this is, that the physical pins are mapped into // the way I understand this is, that the physical pins are mapped into
// the system memory. to accces those, there is some sort of memory // the system memory. to accces those, there is some sort of memory
// offset maybe // offset maybe
#if 0 #if defined(PINOUT_JETSONNANO)
#warning "This mapping is for the Jetson Nano board." #warning "This mapping is for the Jetson Nano board."
// Jetson Nano // Jetson Nano
// source: https://maker.pro/nvidia-jetson/tutorial/how-to-use-gpio-pins-on-jetson-nano-developer-kit // source: https://maker.pro/nvidia-jetson/tutorial/how-to-use-gpio-pins-on-jetson-nano-developer-kit
@ -80,7 +89,7 @@ const short physicalmapping[41]={
12, 77, //37,38 12, 77, //37,38
-1, 78 //39,40 -1, 78 //39,40
}; };
#elif 0 #elif defined(PINOUT_BANANAPI)
#warning "This mapping is for the Banana Pi board." #warning "This mapping is for the Banana Pi board."
// source: https://wiki.fw-web.de/doku.php?id=en:bpi-r64:gpio // source: https://wiki.fw-web.de/doku.php?id=en:bpi-r64:gpio
const short physicalmapping[41]={ const short physicalmapping[41]={
@ -106,8 +115,8 @@ const short physicalmapping[41]={
86, -1, //37,38 86, -1, //37,38
-1, -1 //39,40 -1, -1 //39,40
}; };
#elif 0 #elif defined(PINOUT_RASPBERRYPI)
#warning "This mapping is for the Raspberry Pi Zero W 1.1 board" #warning "This mapping is for the Raspberry Pi (Zero) board"
// source: https://www.theengineeringprojects.com/wp-content/uploads/2021/03/raspberry-pi-zero-5.png // source: https://www.theengineeringprojects.com/wp-content/uploads/2021/03/raspberry-pi-zero-5.png
// NOTE: GPIO16 was actually missing in the diagram. // NOTE: GPIO16 was actually missing in the diagram.
const short physicalmapping[41]={ const short physicalmapping[41]={
@ -134,11 +143,36 @@ const short physicalmapping[41]={
-1, 21 //39,40 -1, 21 //39,40
}; };
#else #else
#error "Please have a look at the source code and select one of the mappings from the sysfs numbering to the physical pins" #error "The physical pins need to be mapped to the GPIO numbers. For some reason, those numbers are different for each board out there. So please have a look at the sourcecode, lines 21-26, and select the one that works best for you."
const int physicalmapping[41]={0};
#endif #endif
// this is the GPIO pinout for the waveshare OLED 1.3 SH1106 hat // this is the GPIO pinout for the waveshare OLED 1.3 SH1106 hat
// source: https://www.waveshare.com/1.3inch-oled-hat.htm // source: https://www.waveshare.com/1.3inch-oled-hat.htm
#ifdef PATCHED_WIRING
// Apparently, not every Key was mapped to a working GPIO pin.
// So I did some rewiring. This is a setup that works
#define PIN_LEFT (physicalmapping[ 3]) // OLED pin 29
#define PIN_UP (physicalmapping[ 5]) // OLED pin 31
#define PIN_FIRE (physicalmapping[ 7]) // OLED pin 33
#define PIN_DOWN (physicalmapping[29]) // OLED pin 35
#define PIN_RIGHT (physicalmapping[31]) // OLED pin 37
#define PIN_KEY1 (physicalmapping[27]) // OLED pin 36
#define PIN_KEY2 (physicalmapping[24]) // OLED pin 38
#define PIN_KEY3 (physicalmapping[26]) // OLED pin 40
#define PIN_BL (physicalmapping[16]) // OLED pin 12
#define PIN_DC (physicalmapping[18])
#define PIN_RST (physicalmapping[22])
#define PIN_CS (physicalmapping[28]) // OLED pin 24
#define PIN_MOSI (physicalmapping[19])
#define PIN_MISO (physicalmapping[21])
#define PIN_SCLK (physicalmapping[23])
#else
#define PIN_LEFT (physicalmapping[29]) #define PIN_LEFT (physicalmapping[29])
#define PIN_UP (physicalmapping[31]) #define PIN_UP (physicalmapping[31])
#define PIN_FIRE (physicalmapping[33]) #define PIN_FIRE (physicalmapping[33])
@ -149,14 +183,15 @@ const short physicalmapping[41]={
#define PIN_KEY2 (physicalmapping[38]) #define PIN_KEY2 (physicalmapping[38])
#define PIN_KEY3 (physicalmapping[40]) #define PIN_KEY3 (physicalmapping[40])
#define PIN_BL (physicalmapping[12]) #define PIN_BL (physicalmapping[12])
#define PIN_DC (physicalmapping[18]) #define PIN_DC (physicalmapping[18])
#define PIN_RST (physicalmapping[22]) #define PIN_RST (physicalmapping[22])
#define PIN_CS (physicalmapping[24]) #define PIN_CS (physicalmapping[24])
#define PIN_MOSI (physicalmapping[19]) #define PIN_MOSI (physicalmapping[19])
#define PIN_MISO (physicalmapping[21]) #define PIN_MISO (physicalmapping[21])
#define PIN_SCLK (physicalmapping[23]) #define PIN_SCLK (physicalmapping[23])
#endif