Waarschijnlijk had ik, net als alle Arduino-bouwers, een gek idee in mijn hoofd. Ik heb alle benodigde onderdelen uit China besteld. We hebben heel lang moeten wachten, maar toen werden een kloon van het Arduino Uno-bord en een Nokia 5110 LCD-scherm eerder dan gepland geleverd. Omdat ik nog niet eerder bekend was met elektronica en programmeren, besloot ik geen tijd te verspillen en begon ik te leren hoe ik informatie op deze module kon weergeven.
Het eerste wat ik deed was Google en kwam de publicatie “Arduino, Nokia 5110 LCD-module en Cyrillisch alfabet” van de auteur tegen. En toen besefte ik dat alles wat ik eerder had gepland niet zo gemakkelijk zou zijn.
Ik heb het Cyrillische alfabet ontdekt, alles is daar eenvoudig, ik zal het laatste bericht niet kopiëren en plakken, maar er is een echt probleem met de afbeeldingen. De taak is: u moet een afbeelding tekenen en deze naar het scherm uploaden. Geconfronteerd met het eerste probleem, woensdag ingelogd Arduino-programmering Ik zag dat er niet zoiets bestaat als "Invoegen - Afbeeldingen", maar je moet de afbeelding opschrijven met een bepaalde code in het hexadecimale nummersysteem. Ik heb verschillende editors gevonden, maar dat was niet het geval. Het beeld wordt niet goed weergegeven. Ik begon te zoeken naar problemen die er zouden kunnen zijn.
Via een reeks experimenten, pogingen en tests heb ik een algoritme bedacht dat ik met jullie zal delen:
1) Je hebt de afbeelding zelf nodig, in zwart-wit .bmp-formaat met een extensie van 84 x 48 pixels.
Dit kan voor bijna iedereen op verschillende manieren worden gedaan. grafische editor Er is een functie “Opslaan als” waarin we de benodigde parameters specificeren.
Ik deed het in CorelDRAW. Wij krijgen iets soortgelijks. Het is noodzakelijk om te verduidelijken dat de naam van de afbeelding moet worden opgeslagen Latijnse lay-out toetsenborden, omdat volgende programma zal het niet kunnen openen.
2) Indien nodig kun je de afbeelding in verf bewerken, vreemd genoeg zijn daar verschillende eenvoudige en interessante hulpmiddelen voor.
3) Hiermee krijgen we de hexadecimale code van de afbeelding.
4) Invoegen deze code V programmacode Arduino en upload het naar het bord:
// SCK - Pin 8 // MOSI - Pin 9 // DC - Pin 10 // RST - Pin 11 // CS - Pin 12 // #include
#erbij betrekken
Bij het assembleren van apparaten op Arduino worden we vaak geconfronteerd met de behoefte aan autonome uitvoer van informatie. En zoals altijd wil ik dat de oplossing goedkoop is. En hier blijkt dat de keuze aan goedkope apparaten niet erg rijk is.
Als er weinig informatie wordt weergegeven, is het handig om indicatoren met zeven segmenten te gebruiken. Ze zijn erg helder en contrastrijk. Dergelijke linialen van 4 cijfers en 0,36 inch hoog op de TM1637 worden voor 70 cent verkocht en worden bestuurd door slechts 2 pinnen. Zoals je misschien wel raadt, zijn ze voornamelijk ontworpen voor het weergeven van de tijd, hoewel ze bijvoorbeeld gemakkelijk temperatuur, druk en andere parameters kunnen weergeven, waarvoor 4 cijfers voldoende zijn.
Maar als er veel uitvoerinformatie is, zullen ze niet werken. In dergelijke gevallen worden het vaakst "folk" LCD 1602-displays gebruikt, die de mogelijkheid hebben om 2 regels van 16 tekens weer te geven voor een prijs van anderhalve dollar. Zo kun je veel meer informatie weergeven.
Zijn geavanceerdere 4-regelige broer zal nog meer informatie weergeven, maar is al merkbaar duurder, zo'n 5 dollar, en zijn formaat is al behoorlijk groot.
Al deze apparaten hebben hun voor- en nadelen. De belangrijkste nadelen zijn onder meer het gebrek aan ondersteuning voor de Russische taal, omdat de codetabel nauw in de chip is verankerd, en het onvermogen om afbeeldingen weer te geven. Strikt genomen is het mogelijk om Cyrillische firmware in dergelijke apparaten te hebben, maar deze worden voornamelijk in Rusland verkocht en tegen onredelijke prijzen.
Als deze nadelen doorslaggevend zijn voor gebruik in het apparaat dat wordt gemaakt en de resolutie van 84x48 pixels in zwart-witafbeeldingen bij je past, dan moet je op het Nokia 5110-scherm letten. Er was er eens een, maar die was erg onvolledig , en op sommige plaatsen verouderd. Daar werd met name verklaard dat het onmogelijk was het Cyrillische alfabet weer te geven. Tegenwoordig bestaat een dergelijk probleem niet.
De held van onze recensie, geprijsd op minder dan een paar dollar, kwam naar me toe in een duurzame kartonnen doos met een beschermfolie op het scherm, waarvoor veel dank aan de verkoper. Het apparaat heeft een printplaat van 45x45 mm rode printplaat en een LCD-scherm met een resolutie van 84x48 pixels en een formaat van 40x25 mm. Het apparaat weegt 15 g. Het heeft een blauwe achtergrondverlichting die kan worden uitgeschakeld. Voor Arduino bijt dit display 5 digitale pinnen af, de voeding niet meegerekend. Het bord heeft 2 rijen pinnen die parallel lopen, waardoor je slechts één rij kunt gebruiken. Hiervan zijn er 5 voor bediening, 2 voor stroom en één voor het inschakelen van de achtergrondverlichting. Om de achtergrondverlichting in te schakelen, moet je de LIGHT-pin kortsluiten met aarde (er is een andere versie van dit display, zoals ze zeggen - op het blauwe bord, waar deze pin is aangesloten op de voeding). Het bord wordt ongesoldeerd geleverd, twee kammen zijn inbegrepen in de set.
We verbinden dus de SCLK-, DIN-, DC-, CE- en RTS-pinnen met de Arduino-pinnen, bijvoorbeeld 3, 4, 5, 6, 7. De VCC-pin op 3,3 V (precies 3,3, niet 5!), sluit de grond en download de bibliotheek.
Met functies uit deze bibliotheek kunt u grafische primitieven (lijn, cirkel, rechthoek, etc.), rasterafbeeldingen en tekst weergeven. De bibliotheek bevat een voorbeeld dat de mogelijkheden ervan laat zien. Ik raad u aan ernaar te kijken. Maar om de tekst in het Russisch weer te geven, moet u het lettertype aanpassen. Maar gelukkig hebben goede mensen al alles voor ons gedaan en is het vervangende bestand te downloaden.
Ik zal hieronder een voorbeeld geven van de schets en het resultaat van de tekstuitvoer in het Russisch is hierboven te zien. Het is eenvoudig te berekenen dat u bij de kleinste lettergrootte (nr. 1) 84 tekens (14 in 6 regels) kunt weergeven, wat voldoende is om bijvoorbeeld uitgebreide diagnostische berichten weer te geven. Lettertype #2 is twee keer zo groot.
Dankzij de schermresolutie kunt u redelijk goede tweekleurige rasterafbeeldingen weergeven, die als pictogrammen in het programma kunnen worden gebruikt.
Het maken van dergelijke pictogrammen is heel eenvoudig. Onder de spoiler laat ik zien hoe je dit doet.
Hoe u snel een rasterafbeelding kunt maken met behulp van het voorbeeld van het MYSKU-websitelogo
Laten we eerst een screenshot maken van het logoscherm (Print Screen-toets).
Start Paint vanuit standaardprogramma's en druk op Ctrl+V. Het volledige scherm met het logo staat tot onze beschikking.
Selecteer het gewenste fragment en druk op de TRIM-knop. Laten we ons fragment pakken.
Nu moeten we dit fragment in twee kleuren veranderen. Verf zelf kan dit aan. Klik op “Opslaan als” en selecteer het type “Monochrome afbeelding (*.bmp)”. We negeren de waarschuwing van de redacteur en klikken op OK en zien de volgende afbeelding:
Nu moeten we deze set pixels omzetten in een reeks codes voor Arduino. Ik heb er een gevonden die deze taak aankan.
Hij moet een bmp-bestand als invoer indienen, maar het moet 256 kleuren hebben! We klikken dus opnieuw op "Opslaan als" en selecteren het type "256 kleuren bmp-kunst". Laten we nu de afmetingen van de zijkanten van het resulterende bestand onthouden, u zult ze in de schets moeten aangeven (kijk in Paint onderaan in de statusbalk of door Bestandseigenschappen te openen -> tabblad Details) en ga naar de online converter .
Laten we ons bestand selecteren, het vakje met hexadecimale getallen aanvinken en op CONVERTEREN klikken.
Laten we de array nemen die we nodig hebben:
We kopiëren deze array naar de schets, compileren deze en kijken wat er gebeurt.
Laten we nu de achtergrondverlichting uitschakelen en kijken hoe de afbeeldingen er zonder zullen uitzien.
Zoals u kunt zien, zijn zowel de tekst als de pictogrammen leesbaar. Bovendien geldt: hoe helderder het licht, hoe beter de leesbaarheid (oh, ik herinner me hoe prettig het was om de Nokia 1100 op een zonnige dag te gebruiken, terwijl mensen hun handsets met kleurenmatrices in de schaduw verborgen om een nummer te bellen). Over het algemeen kunt u het display in deze modus gebruiken als er voldoende licht is of als de achtergrondverlichting interfereert, of om de batterij te sparen. Als iemands scherm moeilijk te zien is, speel dan met het contrast in de schets. Het beste contrast met en zonder tegenlicht wordt verkregen bij verschillende waarden, hier moet rekening mee gehouden worden.
Een voorbeeldschets voor het weergeven van tekst en afbeeldingen
#erbij betrekken
Nou, en aangezien Arduino (processor+RAM+Bootloader-BIOS)+station (EEPROM) + invoer/uitvoersysteem (IRDA Remote en Nokia 5110) in feite een volwaardige computer is, waarom dan niet een volwaardige computer schrijven? spel ervoor? Natuurlijk kan onze Arduino-computer een spel als GTA niet aan, maar een eenvoudig speelgoedje kan hij wel aan! Laten we een spel aller tijden schrijven: Tetris.
Voor elke programmeur is dit een ochtendoefening: een gemakkelijke oefening voor de hersenen, dus ga je gang! En het is alsof dit nog nooit eerder is gebeurd op muska. En de game zal het potentieel van het onderwerp onthullen.
Als invoersysteem besloot ik de IRDA-afstandsbediening vanaf ELK apparaat te gebruiken. Met deze oplossing hebben we er maar één nodig, voor een prijs van 4 roebel per stuk. En in elk appartement is een IR-afstandsbediening te vinden. Voor stemacteren zullen we ook een piëzo-tweeter van een oud moederbord gebruiken - dit zal onze budgetanaloog van multimedia zijn)). Er komt nu een coolere versie naar mij toe, maar dit verhoogt de prijs van onze supercomputer al met een hele dollar! We komen er voorlopig wel uit. Het zal al bij hem zijn.
Op het breadboard verbinden we uitvoer- en invoerapparaten en onze “multimedia”. Het bleek zo:
Ik heb Arduino Uno gebruikt, omdat deze al de 3,3 V heeft die we nodig hebben, maar als je de Mini gebruikt, zul je de vereiste 3,3 moeten halen uit de 5 volt voor het scherm. De eenvoudigste manier vanaf internet is om twee siliciumdiodes in serie te zetten (selecteer).
Om geen elektrisch schema te tekenen, zal ik eenvoudigweg de Arduino-pinnen aangeven die ik heb gebruikt.
Het Nokia 5110-scherm aansluiten:
pin 3 - Seriële klok uit (SCLK)
pin 4 - Seriële data uit (DIN)
pin 5 - Gegevens/opdrachtselectie (D/C)
pin 6 - LCD-chipselectie (CS)
pin 7 - LCD-reset (RST)
Om de LIGHT-pin van het display te verlichten, gooien we deze naar GND van de Arduino. (Alleen voor rood bord!). Plus voeding op 3,3V. Aarding naar GND.
Aansluiting IR-ontvanger:
pin 8 - IR (bediening). Voeding op respectievelijk +5V en GND.
De piëzo-tweeter aansluiten:
pin 9 - luidspreker, aarde naar GND.
Upload na de installatie de schets
Schets van Tetris-spel
//// © Klop 2017 #include Laten we het samenvatten voor het Nokia 5110-display: Nadelen Oordeel: Voor zijn geld, gebaseerd op het geheel van zijn kenmerken, bezet het vol vertrouwen zijn niche; het is niet voor niets dat het zo'n lange levensduur heeft onder de weergaveapparaten voor Arduino. Weet je nog die keren dat mobiele telefoons ‘oaky’ waren, ze een apart toetsenbord met drukknoppen hadden en een klein monochroom LCD-scherm? Nu behoort deze markt tot allerlei soorten iPhones, Galaxy, enz., maar displays vinden een nieuwe toepassing: doe-het-zelf-projecten! Het zwart-witscherm van 84x48 pixels dat we zullen beschouwen, werd gebruikt in Nokia 3310-telefoons. Hun belangrijkste voordeel is het bedieningsgemak. Zo'n display past perfect in uw project voor interactieve informatie-uitwisseling met de gebruiker. In dit artikel zullen we kijken naar het besturen van dit grafische display met behulp van Arduino. Er wordt rekening gehouden met alle aansluitmogelijkheden, technische kenmerken van het display en het programma voor Arduino. Benodigde materialen Voordat we het display aansluiten en de Arduino programmeren, laten we eerst wat algemene informatie erover bekijken. Om gegevens op het display aan te sluiten en te verzenden, worden twee parallelle rijen van 8 connectoren gebruikt. Elke pin is gemarkeerd op de achterkant van het display. Zoals reeds vermeld, zijn de pinnen parallel aan elkaar verbonden. Hieronder vindt u informatie over het doel van elke connector. U heeft al gemerkt dat het 5110 LCD-scherm twee stroomaansluitingen heeft. De eerste is de belangrijkste: het voeden van de displaylogica. In de datasheet staat dat deze moet worden geselecteerd in het bereik van 2,7 - 3,3 V. Bij normaal gebruik verbruikt het display 6 tot 7 mA. De tweede voedingsconnector is voor de achtergrondverlichting van het display. Als je het display zelf van het bord verwijdert (dit is niet nodig, je kunt gewoon naar de onderstaande figuur kijken), zul je zien dat de achtergrondverlichting heel eenvoudig is geïmplementeerd: vier witte LED's, die zich in de hoeken van het bord bevinden. Houd er rekening mee dat er geen stroombegrenzende weerstanden zijn. Je moet dus voorzichtiger zijn met je dieet. Bij het aansluiten van de "LED"-pin kunt u een stroombegrenzingsweerstand gebruiken of een maximale voedingsspanning van 3,3 V gebruiken. Vergeet niet dat LED's hoge stromen kunnen absorberen! Zonder beperking zullen ze ongeveer 100 mA verbruiken bij een voedingsspanning van 3,3 V. Het display heeft een ingebouwde controller: Philips PCD8544, die de enorme parallelle interface omzet in een handigere seriële interface. De PCD8544 wordt bestuurd met behulp van een synchroon serieel protocol, vergelijkbaar met SPI. Merk op dat er tijdteller (SCLK) en seriële data-invoer (DN) pinnen zijn, evenals active-low chip select (SCE). Boven de beschouwde seriële connectoren is er nog een connector geïnstalleerd - D / C, waarmee informatie wordt ontvangen over de vraag of de gegevens die worden verzonden, kunnen worden weergegeven. Voor een lijst met opdrachten raadpleegt u het gedeelte 'Instructies' van het PCD8544-gegevensblad (pagina 11). Er zijn opdrachten die het scherm leegmaken, pixels omkeren, de stroom uitschakelen, enz. Voordat u de schets uploadt en gegevens naar het display overbrengt, moet u de verbinding begrijpen. Om dit te doen, moet je het probleem van het monteren en aansluiten op Arduino oplossen. Om het beeldscherm te “assembleren” heeft u mogelijk connectoren nodig. 8 stuks zijn voldoende. Je kunt rechte poten of 90 graden poten gebruiken. Afhankelijk van verder gebruik. Als u van plan bent een printplaat te gebruiken, is een rail met rechte connectoren waarschijnlijk de beste keuze. LCD-scherm van Nokia 5110 gemonteerd op een miniprintplaat: Je kunt de adapters ook rechtstreeks op het display solderen. In dit voorbeeld zullen we een LCD-scherm aansluiten op een Arduino. Een vergelijkbare techniek kan eenvoudig worden aangepast aan andere borden en microcontrollers. Om de gegevensoverdrachtpinnen - SCLK en DN(MOSI) - aan te sluiten, gebruiken we Arduino SPI-pinnen, die een snelle gegevensoverdracht mogelijk maken. Chipselectie (SCE), reset (RST) en data/control (D/C) pinnen kunnen op elke digitale pin worden aangesloten. De output van de LED is verbonden met een pin op de Arduino, die PWM-modulatie ondersteunt. Hierdoor is een flexibele aanpassing van de helderheid van de achtergrondverlichting mogelijk. Helaas kan de maximale voedingsspanning van het 5110-display 3,6 volt bereiken, waardoor deze niet rechtstreeks op de standaard 5 V-uitgang van de Arduino kan worden aangesloten. De spanning moet worden aangepast. Dienovereenkomstig verschijnen er verschillende verbindingsopties. De eenvoudigste optie is om rechtstreeks verbinding te maken met Arduino. In dit geval moet u gebruiken Arduino-borden Pro 3,3V/8MHz of 3,3V Arduino Pro Mini. De hieronder voorgestelde optie werkt met Arduino 5V-kaarten. Dit is een werkende optie, maar de levensduur van het scherm kan enigszins worden verkort. Pinnen zijn als volgt verbonden: Een goede en goedkope optie om extra bescherming te bieden is het installeren van weerstanden tussen de gegevensoverdrachtpinnen van de Arduino naar de LCD 5110. Als u gebruik maakt van Arduino Uno De aansluiting is hetzelfde als in het eerste voorbeeld, maar in elk signaalcircuit is een weerstand geïnstalleerd. Er zijn weerstanden van 10 kOhm geïnstalleerd tussen de SCLK-, DN-, D/C- en RST-pinnen. Tussen de SCE-pinnen en pin 7 zit een weerstand van 1 kOhm. Er blijft 330 Ohm over tussen pin 9 en de pin met de LED. en pin 7. De derde aansluitmogelijkheid is het gebruik van niveauconverters om te schakelen tussen 5 en 3,3 V. Voor deze doeleinden kunt u gebruik maken van Bi-Directional Logic Level Converter of TXB0104-modules. Helaas zijn er op het display vijf ingangen voor een 3,3 V-signaal, en vier op de niveauconverters. Je kunt de RTS-uitgang hoog laten (door deze aan te sluiten met een weerstand van 10k ohm). Als gevolg hiervan kunt u niet langer bepalen hoe het beeldscherm opnieuw opstart, maar zijn alle andere functies beschikbaar. Na een succesvolle verbinding kunt u doorgaan met het downloaden van de schets en het weergeven van de gegevens op het display! De opmerkingen in de bovenstaande code moeten u helpen het programma te begrijpen. Het grootste deel van de actie vindt plaats binnen de functie lcdFunTime(). Na het uploaden naar de Arduino begint de schets te werken en wordt een demo gelanceerd: een reeks standaardanimaties en het testen van grafische functies. Laten we eerst een paar pixels weergeven. Daarna gaan we verder met het weergeven van lijnen, rechthoeken en cirkels, het laden van een bitmap, enz. Na voltooiing van de schets schakelt de monitor via het seriële protocol over naar de gegevensoverdrachtmodus. Open de seriële monitor (met een baudrate van 9600 bps). Wat u op de seriële monitor afdrukt, verschijnt op de LCD-monitor. Als u geïnteresseerd bent in de weergavemogelijkheden van rasterafbeeldingen, lees dan verder. We zullen precies bekijken hoe u uw eigen 84x48 bitmapafbeelding kunt importeren en op het scherm kunt weergeven. In dit voorbeeld maken we een nieuwe 84x48 bitmap, integreren deze in de Arduino-code en sturen deze naar de LCD-monitor. Zoek eerst de afbeelding die u op het 5110 LCD-scherm wilt weergeven. U kunt deze niet te veel uitbreiden naar 84x48 pixels, maar het is nog steeds mogelijk. Hier zijn enkele voorbeelden: Nadat u een afbeelding hebt geselecteerd, moet u deze corrigeren: maak deze monochroom (2-bit kleur); houd het formaat 84x48 pixels aan. Hiervoor kunt u de meeste afbeeldingseditors gebruiken. Inclusief Paint, als je Windows hebt. Sla de resulterende afbeelding op. De volgende stap is het converteren van dit bestand naar een tekenarray van 504 bytes. Om dit te doen, kunt u verschillende programma's gebruiken. Bijvoorbeeld LCD-assistent. Om een afbeelding in LCD Assistant te laden, gaat u naar Bestand > Afbeelding laden. Er zou een venster met een voorbeeldafbeelding moeten openen. Zorg ervoor dat de afbeelding de juiste grootte heeft: 84 pixels breed, 48 pixels hoog, en dat de byte-oriëntatie is ingesteld op Verticaal en de grootte-endianness op Klein. De rest van de standaardinstellingen moeten correct zijn ingesteld (8 pixels/byte) Ga hierna naar het tabblad Bestand > Uitvoer opslaan om een tijdelijk tekstbestand te genereren. Open dit tekstbestand om uw prachtige nieuwe array te bekijken. Wijzig het arraytype in char (niet unsigned of const). Zorg er ook voor dat de array de juiste naam heeft (geen streepje, niet begint met een getal, enz.). Kopieer de gemaakte array naar de Arduino-schets. U kunt de schets uit het eerste voorbeeld gebruiken. Plak uw array waar dan ook. Om nu uw schets weer te geven, vervangt u setup() en loop() in uw schets door de onderstaande regels (houd de andere functies en variabelen hetzelfde): // ...variabelen, constanten en bitmaparrays zijn hierboven gedefinieerd lcdBegin(); // Pinnen configureren en het LCD-scherm initialiseren setContrast(60); // Pas het contrast aan (voorkeursbereik is van 40 tot 60) setBitmap(vlamBitmap); // flameBitmap moet worden vervangen door de naam van uw array updateDisplay(); // Update het display om de array weer te geven // Functies voor bediening en grafische weergave op het LCD-scherm worden hieronder gedefinieerd... Echt, het is cool geworden? Je kunt onder andere meerdere afbeeldingen importeren en kleine animaties maken! Probeer het, ik weet zeker dat je het leuk zult vinden! Laat hieronder uw opmerkingen, vragen achter en deel uw persoonlijke ervaringen. Nieuwe ideeën en projecten ontstaan vaak in discussies! Nieuwe artikelen In dit experiment zullen we kijken naar het Nokia 5110 grafische display, dat in Arduino-projecten kan worden gebruikt om grafische informatie weer te geven. Benodigde componenten: Het Nokia 5110 liquid crystal display is een monochroom beeldscherm met een resolutie van 84×48 op een PCD8544-controller, ontworpen om grafische en tekstinformatie weer te geven. De voeding van het beeldscherm moet tussen 2,7 en 3,3 V liggen (maximaal 3,3 V; als er 5 V wordt geleverd aan de VCC-pin, kan het beeldscherm beschadigd raken). Maar de controllerpinnen zijn +5V-tolerant, dus ze kunnen rechtstreeks op de Arduino-ingangen worden aangesloten. Een belangrijk punt is het lage verbruik, waardoor je het display vanaf het Arduino-bord kunt voeden zonder een externe voedingsbron. Rijst. 16.1. Aansluitschema voor Nokia 5110 naar Arduino Om met het Nokia 5110-display te werken, zullen we de Adafruit_GFX-bibliotheek gebruiken, die uitgebreide mogelijkheden heeft voor het weergeven van afbeeldingen en tekst. In ons experiment zullen we verlichtingsgegevens ontvangen van een fotoresistor die is aangesloten op de analoge ingang van Arduino A0 en de verlichtingsgegevens uitvoeren in numerieke en grafische weergave. Het aansluitschema wordt getoond in Fig. 16.2. Rijst. 16.2. Aansluitschema van Nokia 5110 en fotoresistor naar Arduino De code voor onze experimentschets wordt weergegeven in Listing 16.1. We lezen de gegevens van de fotoresistor en geven de numerieke waarde weer, evenals grafisch (voortgangsbalk) de verlichtingssterkte als percentage van de maximale waarde. We nemen de waarden van minimale en maximale verlichting uit experiment 13. // De bibliotheek verbinden
En je kunt vechten. Het spel ondersteunt binding met elke afstandsbediening. Om dit te doen, drukt u aan het begin van het spel, wanneer u wordt gevraagd "Druk op OK", op de knop op de afstandsbediening die verantwoordelijk is voor het draaien van de figuur. Als de afstandsbediening van het spel al bekend is, start het spel onmiddellijk. Als de afstandsbediening nieuw is, komt de code voor de OK-knop niet overeen met de opgeslagen code en moet je in het spel achtereenvolgens op de knoppen "Links", "Rechts" en "Omlaag" drukken. Deze knoppen worden opgeslagen in het niet-vluchtige geheugen van de Arduino en vervolgens wordt deze specifieke afstandsbediening onmiddellijk herkend zodra u op de “OK”-knop drukt.
Wanneer u “faald” op de verzamelde lijn, wordt er een piep gespeeld. Het is geïmplementeerd op basis van verschillende Arduino-pinnen (in ons geval 9) om PWM op een bepaalde frequentie te produceren.
Het spel ondersteunt alle kenmerken van een normaal spel. Er is ook een hint voor het volgende figuur en de huidige score. Het spel houdt records bij. Deze waarde wordt opgeslagen in het niet-vluchtige geheugen van Arduino. Om het record te resetten, wijzigt u gewoon de waarde flfirst=1234 in de schets naar een andere waarde. Het spel verhoogt ook automatisch de valsnelheid elke 30 afgeschreven regels, zodat je niet voor onbepaalde tijd kunt spelen). De schets is niet geoptimaliseerd of zorgvuldig uitgevoerd, maar voor de lol geschreven. Als iemand een fout vindt, schrijf dan. Over ©. Je mag de schets naar eigen wens bewerken. Alleen als u uw opties ergens publiceert, geef dan een link naar de originele bron aan).
Waarom deed ik het - lange weekenden + “uit liefde voor kunst.” Als mijn dochter klein was, zou ik voor 8 maart waarschijnlijk, net op tijd, een minigokautomaat voor haar poppenkamer maken. Ik zou een paar spellen toevoegen, zoals Snake en Arkanoid, en waarschijnlijk de behuizing uit de PCB snijden. Alleen mijn dochter verdedigt dit jaar al haar doctoraat, dus het is een misser, maar misschien is dit idee nuttig voor iemand anders).
Pluspunten
+Mogelijkheid om afbeeldingen weer te geven;
+Geen problemen met het Cyrillische alfabet;
+Laag gewicht;
+Uitstekende verhouding afmetingen/hoeveelheid weergegeven informatie;
+De voordelen van de gebruikte LCD-technologie zijn een laag energieverbruik en een goede leesbaarheid bij fel licht;
+ Schakelbare achtergrondverlichting;
+Prijs.
-De achtergrondverlichting is ongelijkmatig;
-De afbeelding is zwart-wit (geen tinten);
-De noodzaak om voor 3,3V te zorgen, niet elke Arduino heeft zo'n spanning.Nokia 5110 schermspecificaties
Pin-out
Voeding
Besturingsinterface
Het 5110-display monteren en aansluiten
Montage
Een 5110-display aansluiten op Arduino
Directe verbinding met Arduino
Niveau-omzetters
Eerste Arduino-schetsvoorbeeld: LCD-demo
Programma voor Arduino
Schets in actie
Tweede voorbeeld Arduino-schets: bitmaps laden en weergeven
Zoek/maak/wijzig een bitmap
Een bitmap converteren naar een array
Importeer in schets en teken!
Links voor het downloaden van extra programma's, bibliotheken en datasheets
Gegevensbladen voor LCD-scherm en stuurprogramma's
Arduino-bibliotheken en schetsen
Programma's voor het maken van rasterafbeeldingen
● Project 16: Grafische indicator. Verbinding Nokia-scherm 5110
Het aansluitschema voor de Nokia 5110 met Arduino wordt getoond in Fig. 16.1.
Aansluitvolgorde:
1. Sluit de displaysensor en de fotoresistor van de Nokia 5110 aan volgens het diagram in Afb. 16.2.
2. Laad de schets uit Listing 16.1 op het Arduino-bord.
3. Blokkeer de lichtstroom met uw hand en kijk naar de verandering in de verlichtingswaarden op het beeldscherm.
Programmavermeldingen
Eerder in deze blog kwamen verschillende LCD-displays/indicatoren en hun gebruik vanuit Arduino aan bod. Hun belangrijke nadeel is hun vrij grote omvang en gewicht. Vaak is dit geen probleem. Als u bijvoorbeeld een doe-het-zelf-soldeerstation in een zelfgemaakte behuizing monteert, maakt het op de een of andere manier niet uit hoe groot het display is. Aan de andere kant, als je een display nodig hebt op bijvoorbeeld een quadcopter, dan worden gewicht en grootte van cruciaal belang. Daarom zullen we vandaag leren werken met een heel klein en licht scherm van de Nokia 5110-telefoon.
Opmerking: Andere berichten over het onderwerp schermen - Geleerd om tekst weer te geven op een LCD-indicator van Arduino, Over het gebruik van 1602-schermen met een I2C-adapter, Werken met LCD gebaseerd op HD44780 zonder bibliotheken, en Digitale thermometer van een LCD-matrix, TMP36 en Arduino.
Maak je geen zorgen, je hoeft de Nokia 5110, die vandaag de dag feitelijk niet bestaat, niet te kopen, het scherm eruit te halen en alle andere onderdelen weg te gooien. Het Nokia 5110-scherm is een veelgebruikte zelfstandige module voor radioamateurs en kost tussen de $ 2 en $ 5, afhankelijk van de winkel. In Rusland kan de module bijvoorbeeld worden gekocht op tpai.ru, arduino-kit.ru, amperkot.ru, compacttool.ru, chipster.ru of electromicro.ru. En natuurlijk worden de schermen op AliExpress voor de laagste prijs verkocht, maar je zult wel een maand of twee moeten wachten tot ze uit China arriveren.
Zoals vaak gebeurt in de Arduino-wereld, zijn er al kant-en-klare bibliotheken voor de module, en meer dan één. Ik vond de LCD5110-bibliotheek leuk die op de website rinkydinkelectronics.com werd geplaatst. Deze bibliotheek heeft twee versies. De eerste heet LCD5110_Basic. Het is eenvoudiger en kan alleen tekst weergeven in lettertypen van verschillende groottes. Het is mogelijk om uw eigen lettertypen te maken. De tweede versie heet LCD5110_Graph. Het heeft alle mogelijkheden van de eerste bibliotheek en kan daarnaast segmenten, rechthoeken, cirkels, enzovoort tekenen.
Voor de doeleinden van dit bericht wordt de LCD5110_Basic gebruikt. Beide bibliotheken zijn goed gedocumenteerd en bevatten veel gebruiksvoorbeelden, dus als u LCD5110_Graph nodig heeft, kunt u dit eenvoudig zelf uitzoeken. Het is echter vermeldenswaard dat ik, om LCD5110_Basic zonder waarschuwingen te laten compileren, een paar kleine wijzigingen in de code moest aanbrengen.
Een voorbeeld van het gebruik van de bibliotheek:
#erbij betrekken
extern uint8_t BigNumbers ;
extern uint8_t MediumNumbers ;
extern uint8_t SmallFont ;
/* SCK / CLK, MOSI / DIN, DC, RST, CS */
LCD5110lcd(2, 3, 4, 6, 5);
ongeldige instellingen()
{
lcd.InitLCD();
}
int ctr = 0;
lege lus()
{
lcd.clrScr();
LCD.setFont(BigNumbers) ;
lcd.printNumI(ctr, RECHTS, 0);
LCD.setFont(MediumNumbers) ;
lcd.printNumF(12.34, 2, RECHTS, 24);
LCD.setFont(Klein lettertype) ;
lcd.print ("Lijn 1" , 0 , 8 * 0 );
lcd.print("Lijn 2", 0, 8 * 1);
lcd.print ("Lijn 3" , 0 , 8 * 2 );
lcd.print ("L 4" , 0 , 8 * 3 );
lcd.print ("L 5" , 0 , 8 * 4 );
lcd.print ("0123456789ABCD" , 0 , 8 * 5 );
Ctr + = 5;
als (ctr >= 1000 )
ctr = 0;
Vertraging(500);
}
Hoe het eruit ziet in actie:
Ik hoop dat het niet nodig is om op de code te kauwen. Houd er rekening mee dat de module wordt gevoed door 3,3 V, maar dat hij normaal gesproken commando's van Arduino begrijpt zonder enige logische niveau-omzetters. Dienovereenkomstig verbinden we de VCC (stroom) en BL (achtergrondverlichting) pinnen met 3,3 V, verbinden we GND met aarde en verbinden we de resterende vijf pinnen met de digitale pinnen van Arduino. We geven de pincodes door aan de klasseconstructor LCD5110 in overeenstemming met de opmerkingen in de gegeven code.
Eenvoudig, nietwaar? Je kunt de volledige broncode voor dit bericht vinden in deze GitHub-repository. Aanvullingen en vragen zijn, zoals altijd, op alle mogelijke manieren welkom.
Toevoeging: De auteur van de bibliotheek voor het werken met het Nokia 5110-scherm is ook de auteur van de OLED_I2C-bibliotheek, ontworpen om te werken met even populaire OLED-schermen met een I2C-interface. Een voorbeeld van het gebruik van OLED_I2C vind je in het bericht Een Sega Genesis-joystick gebruiken in Arduino-projecten. Zoals je zou verwachten, hebben de twee bibliotheken een vergelijkbare interface.