Mich hat heute mal wieder der Bastelwahn gepackt. Wollte endlich mal was nützliches mit meinem Arduino anfangen. Daher habe ich mir ein kleines Projekt ausgedacht:
Ich will meine NES per Tastenkombination resetten können. Eben genau so wie der IRG fürs SNES von ikari.
Dazu brauche ich einen Microcontroller der das Pad auslesen kann und überwacht. Wenn eine gewisse Tastenkombination (in meinem Fall: Start + Select) über eine gewisse Zeit gehalten wird (z.B. 2 sec) soll der Microcontroller die NES resetten.
Zuerst hab ich mir für den Arduino eine Library rausgesucht um den NES Controller auslesen zu können. Bin auch schnell fündig geworden: code.google.com/p/nespad/
Leider funktionierte die Library nicht sofort mit der neusten Arduino IDE, daher musste noch eine kleine Änderung vorgenommen werden. (hab die gefixte Library unten angehängt)
So, läuft!
Dann hab ich einen Beispiel Sketch so bearbeitet das eine LED an Pin 8 kurz aufleuchtet, wenn Start+Select für etwa 2sec. gedrückt gehalten wird. Die LED soll später gegen einen Optokoppler getauscht werden, der das resetten übernimmt (keine Ahnung ob der wirklich nötig ist).
Ich bin im Thema Arduino noch eher ein Leihe, daher könnt ihr mir gerne ein paar Verbesserungsvorschläge für meinen Sketch machen:
Spoiler anzeigen
Alles anzeigen
Das ganze hat auch super funktioniert. Könnt ihr auch ganz einfach nachbauen. Alles was man braucht ist einen Arduino, NES Pad, eine LED + passendem Wiederstand (220Ohm).
Wie man in dem Sketch sehen kann, habe ich das ganze dann über einen Attiny85 (ohne Arduino) laufen lassen, war auch kein Problem.
Nach einem Funktionstest an der NES mit noch extern angeschlossenem Pad hat auch noch alles super geklappt. Erst als ich vorhin die Kabel für DATA, CLOCK und STROBE an den Controllerport gelötet habe, gab es Probleme. Zwar funktioniert die Resettfunktion per Pad immer noch, aber Attiny verursacht irgendwelche eingaben, so das einfach alle Testen des Pads gedrückt werden. Dachte nicht das die Pins im Readmode irgendwelche Signale senden, auf die das NES reagiert.
Irgendjemand eine Idee?
(Bild Nr 1: Chip links ist der Optokoppler, Chip rechts Attiny85. Ist erstmal alles nur provisorisch skizziert.)
Ich will meine NES per Tastenkombination resetten können. Eben genau so wie der IRG fürs SNES von ikari.
Dazu brauche ich einen Microcontroller der das Pad auslesen kann und überwacht. Wenn eine gewisse Tastenkombination (in meinem Fall: Start + Select) über eine gewisse Zeit gehalten wird (z.B. 2 sec) soll der Microcontroller die NES resetten.
Zuerst hab ich mir für den Arduino eine Library rausgesucht um den NES Controller auslesen zu können. Bin auch schnell fündig geworden: code.google.com/p/nespad/
Leider funktionierte die Library nicht sofort mit der neusten Arduino IDE, daher musste noch eine kleine Änderung vorgenommen werden. (hab die gefixte Library unten angehängt)
So, läuft!
Dann hab ich einen Beispiel Sketch so bearbeitet das eine LED an Pin 8 kurz aufleuchtet, wenn Start+Select für etwa 2sec. gedrückt gehalten wird. Die LED soll später gegen einen Optokoppler getauscht werden, der das resetten übernimmt (keine Ahnung ob der wirklich nötig ist).
Ich bin im Thema Arduino noch eher ein Leihe, daher könnt ihr mir gerne ein paar Verbesserungsvorschläge für meinen Sketch machen:
C-Quellcode
- /*
- NES Pad anschließern:
- Arduino pin2 / Attiny85 pin5 = STROBE
- Arduino pin3 / Attiny85 pin6 = CLOCK
- Arduino pin4 / Attiny85 pin7 = DATA
- Arduino GND / Attiny85 pin4 = GND
- Arduino +5V / Attiny85 pin8 = +5V
- Arduino pin8 / Attiny85 pin2 = LED
- */
- #include <NESpad.h>
- NESpad nintendo = NESpad(2,3,4); //Arduino setup
- //NESpad nintendo = NESpad(0,1,2); //Attiny85 setup
- byte state = 0;
- int hold = 0;
- int led = 8; //Arduino setup
- //int led = 3; //Attiny85 setup
- void setup() {
- Serial.begin(9600); // Arduino only
- pinMode(led, OUTPUT);
- }
- void loop(){
- state = nintendo.buttons();
- Serial.println(state); // Arduino only
- unsigned long time;
- if (state==12){
- time = millis();
- delay(200);
- if(state==12 && time - millis() >1000){
- hold++;
- if(hold==6){
- digitalWrite(led, HIGH);
- delay(300);
- digitalWrite(led, LOW);
- delay(5000);
- hold=0;
- }
- }
- }
- else{
- hold=0;
- }
- }
Das ganze hat auch super funktioniert. Könnt ihr auch ganz einfach nachbauen. Alles was man braucht ist einen Arduino, NES Pad, eine LED + passendem Wiederstand (220Ohm).
Wie man in dem Sketch sehen kann, habe ich das ganze dann über einen Attiny85 (ohne Arduino) laufen lassen, war auch kein Problem.
Nach einem Funktionstest an der NES mit noch extern angeschlossenem Pad hat auch noch alles super geklappt. Erst als ich vorhin die Kabel für DATA, CLOCK und STROBE an den Controllerport gelötet habe, gab es Probleme. Zwar funktioniert die Resettfunktion per Pad immer noch, aber Attiny verursacht irgendwelche eingaben, so das einfach alle Testen des Pads gedrückt werden. Dachte nicht das die Pins im Readmode irgendwelche Signale senden, auf die das NES reagiert.
Irgendjemand eine Idee?
(Bild Nr 1: Chip links ist der Optokoppler, Chip rechts Attiny85. Ist erstmal alles nur provisorisch skizziert.)
[+ ..]