Arduino: ColecoVision Cartridge Reader (8 / 13 stap)

Stap 8: Arduino Sketch bestand

Het volgende bestand van de Arduino schets zorgt ervoor dat de Arduino te wachten op een lijn vanaf de hostcomputer. Als de lijn lezen "Lees alles" is, zal de Arduino het volgende doen:

  • Stuur een "START:" lijn naar de hostcomputer.
  • Lees alle gegevens van de cartridge en het verzenden van de hostcomputer in HEX, een byte per regel.
  • Stuur een ": einde" lijn naar de hostcomputer.

Zodra de gegevens van de cartridge is verstuurd naar de hostcomputer, is de Arduino klaar voor de volgende opdracht vanaf de hostcomputer.

 // ColecoVision / ADAM Cartridge Reader // for the Arduino UNO // 2014-11-25 //---------------------------------------------------------------------------------- // Arduino Pins const int gcChipSelectLine[4] = { A0, A1, A2, A3 }; const int gcShiftRegisterClock = 11; const int gcStorageRegisterClock = 12; const int gcSerialAddress = 10; const int gcDataBit[8] = { 2, 3, 4, 5, 6, 7, 8, 9 }; // Shifts a 16-bit value out to a shift register. // Parameters: // dataPin - Arduino Pin connected to the data pin of the shift register. // clockPin - Arduino Pin connected to the data clock pin of the shift register. //---------------------------------------------------------------------------------- void shiftOut16(int dataPin, int clockPin, int bitOrder, int value) { // Shift out highbyte for MSBFIRST shiftOut(dataPin, clockPin, bitOrder, (bitOrder == MSBFIRST ? (value >> 8) : value)); // shift out lowbyte for MSBFIRST shiftOut(dataPin, clockPin, bitOrder, (bitOrder == MSBFIRST ? value : (value >> 8))); } // Select which chip on the cartridge to read (LOW = Active). // Use -1 to set all chip select lines HIGH. //---------------------------------------------------------------------------------- void SelectChip(byte chipToSelect) { for(int currentChipLine = 0; currentChipLine < 4; currentChipLine++) { digitalWrite(gcChipSelectLine[currentChipLine], (chipToSelect != currentChipLine)); } } // Set Address Lines //---------------------------------------------------------------------------------- void SetAddress(unsigned int address) { SelectChip(-1); // Disable shift register output while loading address digitalWrite(gcStorageRegisterClock, LOW); // Write Out Address shiftOut16(gcSerialAddress, gcShiftRegisterClock, MSBFIRST, address); // Enable shift register output digitalWrite(gcStorageRegisterClock, HIGH); int chipToSelect; if (address < 0xA000) { chipToSelect = 0; } else if (address < 0xC000) { chipToSelect = 1; } else if (address < 0xE000) { chipToSelect = 2; } else { chipToSelect = 3; } SelectChip(chipToSelect); } // Read data lines //---------------------------------------------------------------------------------- void ReadDataLines() { const char cHexLookup[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; int highNibble = 0; int lowNibble = 0; boolean dataBits[8]; char byteReadHex[4]; for(int currentBit = 0; currentBit < 8; currentBit++) { dataBits[currentBit] = digitalRead(gcDataBit[currentBit]); } highNibble = (dataBits[7] << 3) + (dataBits[6] << 2) + (dataBits[5] << 1) + dataBits[4]; lowNibble = (dataBits[3] << 3) + (dataBits[2] << 2) + (dataBits[1] << 1) + dataBits[0]; Serial.write(cHexLookup[highNibble]); Serial.write(cHexLookup[lowNibble]); Serial.println(); } // Read all of the data from the cartridge. //---------------------------------------------------------------------------------- void ReadCartridge() { unsigned int baseAddress = 0x8000; Serial.println("START:"); // Read Current Chip (cartridge is 32K, each chip is 8k) for (unsigned int currentAddress = 0; currentAddress < 0x8000; currentAddress++) { SetAddress(baseAddress + currentAddress); ReadDataLines(); } Serial.println(":END"); } // Returns the next line from the serial port as a String. //---------------------------------------------------------------------------------- String SerialReadLine() { const int BUFFER_SIZE = 81; char lineBuffer[BUFFER_SIZE]; int currentPosition = 0; int currentValue; do { // Read until we get the next character do { currentValue = Serial.read(); } while (currentValue == -1); // ignore '\r' characters if (currentValue != '\r') { lineBuffer[currentPosition] = currentValue; currentPosition++; } } while ((currentValue != '\n') && (currentPosition < BUFFER_SIZE)); lineBuffer[currentPosition-1] = 0; return String(lineBuffer); } // Indicate to remote computer Arduino is ready for next command. //---------------------------------------------------------------------------------- void ReadyForCommand() { Serial.println("READY:"); } void setup() { // Setup Serial Monitor Serial.begin(57600); // Setup Chip Select Pins for(int chipLine = 0; chipLine < 4; chipLine++) { pinMode(gcChipSelectLine[chipLine], OUTPUT); } // Setup Serial Address Pins pinMode(gcShiftRegisterClock, OUTPUT); pinMode(gcStorageRegisterClock, OUTPUT); pinMode(gcSerialAddress, OUTPUT); // Setup Data Pins for(int currentBit = 0; currentBit < 8; currentBit++) { pinMode(gcDataBit[currentBit], INPUT_PULLUP); } while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only. } // Reset Output Lines SetAddress(0); ReadyForCommand(); } void loop() { if (Serial.available() > 0) { String lineRead = SerialReadLine(); lineRead.toUpperCase(); if (lineRead == "READ ALL") { ReadCartridge(); } // lineRead = "Read All" ReadyForCommand(); } // Serial.available } 

Als je gelukkig dat genoeg om te worden met behulp van een Arduino board met 29 of meer digitale I/O pinnen (b.v. de inachtneming van de Arduino Arduino MEGA ADK, Arduino Mega 2560, enz) en u geen gebruik maakt van de verschuiving registreren circuit, de SetAddress functie in de schets bestand hierboven moet worden herschreven.

Gerelateerde Artikelen

Arduino functie Serial.read() en Serial.readString()

Arduino functie Serial.read() en Serial.readString()

Seriële monitor van Arduino is een zeer nuttige functie. Seriële monitor wordt gebruikt om te zien gegevens ontvangen, verzenden van gegevens, gegevens afdrukken, enzovoort. Seriële monitor is aangesloten op de Arduino via seriële communicatie. Deze
Arduino--Vak analoge reading

Arduino--Vak analoge reading

maakte ik dit vak voor mijn project muziek naar onze school. Dit is alleen de tutorial voor het vak, niet voor het spelen van de melodie. It´s gebaseerd op seriële verbonden switches.U moet:Wat draad6 x schakelaar1 x LED1 x 330 ohm weerstand5 x 2000
Aan de slag met RFID

Aan de slag met RFID

Heb je je ooit afgevraagd hoe uw ID-tag werkt?In deze tutorial zullen we kunnen u tonen hoe om te lezen van een RFID -knop of label, als het wordt aangehouden tegen ID-12 RFID-lezer of een 125 KHz module. Dit project is ook een gemakkelijke en leuke
Magische muziek tabel geen menu's, geen knoppen

Magische muziek tabel geen menu's, geen knoppen

Opmerking:Dit instructable is nu iets oud en een betere machine is geboekt met de onderste delen van de kosten en veel betere software die automatisch u de nieuwe kaarten "pair" met nieuwe nummers kunt zoals ze zijn toegevoegd aan de iPod-playli
Met behulp van de Pololu 5V Boost Regulator

Met behulp van de Pololu 5V Boost Regulator

macht uw Arduino projecten met 2 "AA" batterijen.Ik heb onlangs gewerkt aan een project dat een Arduino worden aangedreven door 2 "AA" batterijen vereist.Een andere draai was dat we verwacht de gebruiker leveren en installeren van de b
Plan B, een opensource 3DP (poeder en inkjet) 3D-printer

Plan B, een opensource 3DP (poeder en inkjet) 3D-printer

Plan B is een opensource 3DP 3D-printer. Het bindmiddel en poeder gebruikt te maken van it´s delen. Het kan worden gebouwd voor €1000,-($1300,-) als de onderdelen zijn direct afkomstig. Het maakt gebruik van standaard 3D printer delen en elektronica,
RFI-DJ: MP3 afspelen van RFID ding

RFI-DJ: MP3 afspelen van RFID ding

de RFI-DJ is een USB-apparaat voor het afspelen van MP3-bestanden van uw computer. Heb je een set van RFID kaarten, elke één met de naam van een liedje geschreven. U kiest een kaart en plaats deze op de RFI-DJ, en uw computer zal spelen dat liedje. H
Starten van een Project in MPLAB X voor chipKIT producten

Starten van een Project in MPLAB X voor chipKIT producten

Deze tutorial komt direct na mijn installeren MPLAB X tutorial, dus als u nog niet hebt geïnstalleerd MPLAB X en de compiler XC32, een check dat eerst.In Arduino, programmering een bord is zo eenvoudig als het selecteren van die Raad en plukken van d
Mind Reader met Arduino

Mind Reader met Arduino

Hallo iedereen!!Dit is mijn Mind Reader voor Arduino.De Mind Reader kan u vertellen welke letter van het alfabet (ABC), of met slechts enkele vragen die spelen kaart u hebben gedacht.Het is een eenvoudig project voor montage en met enkele draad verbi
Kleine e-reader met oled + arduino, test

Kleine e-reader met oled + arduino, test

Dit is mijn eerste pass op een zeer kleine e-reader met behulp van een oled-scherm en een arduino. Het doel is om te lezen van een tekstbestand van een SD-kaart met een vorm factor < 1 vierkante inch.Dit instructable is alleen de zeer basisopstelling
AVR/Arduino RFID Reader met UART Code in C

AVR/Arduino RFID Reader met UART Code in C

RFID is de rage, vond overal - van inventarisatiesystemen badge ID systemen. Als je ooit naar een warenhuis geweest en liepen door die metaal detector-uitziende dingen op de oprijlaan-/ uitvoerhavens, dan je RFID gezien heb.Er zijn verschillende plek
LilyPad Arduino e-Reader geval

LilyPad Arduino e-Reader geval

voor een jeugd- en technologie-klasse, waren we de oprichting van een Arduino LilyPad project toegewezen.  Ik vond het idee van het project LilyPad verbinden met geletterdheid, dus heb ik gekozen voor het maken van een Kindle geval dat zou muziek [He
Barcode Reading met behulp van Roborealm (Output op Arduino LCD)

Barcode Reading met behulp van Roborealm (Output op Arduino LCD)

dit Instructable toont hoe maak je een Barcode-lezer met behulp van alleen een webcam samen met Roborealm en Arduino. De webcam gebruikt in deze demonstratie is de Logitech Quickcam en het LCD-scherm is geëtiketteerd, JHD162A.Wat je nodig hebt voor d
ARDUINO BASED stem geactiveerd HUISTOESTELLEN

ARDUINO BASED stem geactiveerd HUISTOESTELLEN

HUISHOUDELIJKE apparaten activeren met stem via bluetooth is een eenvoudigste manier van het maken van uw huis "A SMART HOME". In deze gaan serie van STEPS.we om erachter te komen hoe cool dat. om over te schakelen op de ventilator is door gewoo