This program uses a NUCLEO-F401RE to control an SNES console by sending the button states. (1 = Unpressed, 0 = Pressed) Data, Clock and Latch from the SNES must be connected to the appropriate pins. The NUCLEO is powered by the SNES through E5V. The power jumper should be moved to E5V configuration when powered by SNES.

Dependencies:   mbed

Committer:
kyancey
Date:
Thu Oct 05 14:43:56 2017 +0000
Revision:
0:2af5c09cf1ee
Child:
1:2a346daf070f
Controls SNES Controller. Sends repeated signal: A, Nothing, A, Nothing, etc.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kyancey 0:2af5c09cf1ee 1 #include "mbed.h"
kyancey 0:2af5c09cf1ee 2
kyancey 0:2af5c09cf1ee 3
kyancey 0:2af5c09cf1ee 4 DigitalOut Data(D2);
kyancey 0:2af5c09cf1ee 5 DigitalIn Latch(D3);
kyancey 0:2af5c09cf1ee 6 DigitalIn Clock(D4);
kyancey 0:2af5c09cf1ee 7
kyancey 0:2af5c09cf1ee 8 void waitUntilHigh(DigitalIn x)
kyancey 0:2af5c09cf1ee 9 {
kyancey 0:2af5c09cf1ee 10 while(x != 1) {};
kyancey 0:2af5c09cf1ee 11 }
kyancey 0:2af5c09cf1ee 12
kyancey 0:2af5c09cf1ee 13 void waitUntilLow(DigitalIn x)
kyancey 0:2af5c09cf1ee 14 {
kyancey 0:2af5c09cf1ee 15 while(x == 1) {};
kyancey 0:2af5c09cf1ee 16 }
kyancey 0:2af5c09cf1ee 17
kyancey 0:2af5c09cf1ee 18 void sendButton(int button)
kyancey 0:2af5c09cf1ee 19 {
kyancey 0:2af5c09cf1ee 20 Data = button;
kyancey 0:2af5c09cf1ee 21 waitUntilLow(Clock);
kyancey 0:2af5c09cf1ee 22 waitUntilHigh(Clock);
kyancey 0:2af5c09cf1ee 23 }
kyancey 0:2af5c09cf1ee 24
kyancey 0:2af5c09cf1ee 25 void sendButtonsPressed(int b, int y, int select, int start,
kyancey 0:2af5c09cf1ee 26 int up, int down, int left, int right,
kyancey 0:2af5c09cf1ee 27 int a, int x, int l1, int r1)
kyancey 0:2af5c09cf1ee 28 {
kyancey 0:2af5c09cf1ee 29 Data = 1;
kyancey 0:2af5c09cf1ee 30 waitUntilHigh(Latch);
kyancey 0:2af5c09cf1ee 31 waitUntilLow(Latch);
kyancey 0:2af5c09cf1ee 32
kyancey 0:2af5c09cf1ee 33 sendButton(b);
kyancey 0:2af5c09cf1ee 34 sendButton(y);
kyancey 0:2af5c09cf1ee 35 sendButton(select);
kyancey 0:2af5c09cf1ee 36 sendButton(start);
kyancey 0:2af5c09cf1ee 37 sendButton(up);
kyancey 0:2af5c09cf1ee 38 sendButton(down);
kyancey 0:2af5c09cf1ee 39 sendButton(left);
kyancey 0:2af5c09cf1ee 40 sendButton(right);
kyancey 0:2af5c09cf1ee 41 sendButton(a);
kyancey 0:2af5c09cf1ee 42 sendButton(x);
kyancey 0:2af5c09cf1ee 43 sendButton(l1);
kyancey 0:2af5c09cf1ee 44 sendButton(r1);
kyancey 0:2af5c09cf1ee 45 }
kyancey 0:2af5c09cf1ee 46
kyancey 0:2af5c09cf1ee 47 int main()
kyancey 0:2af5c09cf1ee 48 {
kyancey 0:2af5c09cf1ee 49 while(1) {
kyancey 0:2af5c09cf1ee 50 sendButtonsPressed(1, 1, 1, 1, //b,y,select,start
kyancey 0:2af5c09cf1ee 51 1, 1, 1, 1, //up,down,left,right
kyancey 0:2af5c09cf1ee 52 0, 1, 1, 1); //a,x,l1,r1
kyancey 0:2af5c09cf1ee 53
kyancey 0:2af5c09cf1ee 54 sendButtonsPressed(1, 1, 1, 1, //b,y,select,start
kyancey 0:2af5c09cf1ee 55 1, 1, 1, 1, //up,down,left,right
kyancey 0:2af5c09cf1ee 56 1, 1, 1, 1); //a,x,l1,r1
kyancey 0:2af5c09cf1ee 57 }
kyancey 0:2af5c09cf1ee 58 }