Een multithreaded knipperende theremin aangedreven door VIPER (5 / 6 stap)

Stap 5: De code uit te leggen


Waarom het gebruik van de VIPER

Een van de begrippen die veel mensen uitdagende vinden bij het begin van het schrijven van code voor microcontrollers is het beheren van meerdere hardware-gerelateerde taken, schijnbaar allemaal draaien op hetzelfde moment. Ontwerpers zijn bijgevolg gefrustreerd door de moeilijkheden bij de tenuitvoerlegging van dergelijke functionaliteiten in microcontrollers.

Om op te lossen deze pijnen, VIPER ondersteunt alle meest gebruikte high-level functies voor Python zoals modules, klassen, multithreading, callbacks, timers en uitzonderingen, plus enkele aangepaste hardware-gerelateerde functies zoals interrupts, PWM, digitale i/o, enz.

Elke thread in de VIPER is een soort gescheiden en parallelle proces dat wordt zelfstandig uitgevoerd op uw bord. Een draad vereist een functie om te worden uitgevoerd als input voor de definitie. Dezelfde functie kan worden verwezen door verschillende thread geven u de mogelijkheid om zeer beknopt en leesbare code te schrijven. U kunt uw algoritme architectuur uitgaande van parallellisme dat typisch is van hoog niveau ontwerpen met draden. Meer info hier.

Binnen de code

Het script wordt uitgevoerd met behulp van 4 draden die parallel lopen. Één thread wordt gebruikt voor het verwerven en het normaliseren van de analoge signalen verworven door middel van een potentiometer- en de sensor van de nabijheid van een IR. De andere drie draden worden gebruikt om het instantiëren van een generieke blink() functie die zorgt voor twee LEDs op verschillende frequenties en een generieke buzz() functie die zorgt voor een zoemer op verschillende frequentie e lengte van de slaap (een effect te creëren "beat"), berekend op basis van de verworven analoge signalen.

Het script van githubophalen De code heeft een ton van de opmerkingen. Gewoon een paar notities.

  • delay() vs. sleep()

In de Arduino/bedrading met behulp van de delay() heeft een bijwerking - de Arduino doet niets voor dat terwijl. Als u twee of meer "acties" uitgevoerd onafhankelijk van elkaar, kunt u niet delay().

In VIPER schorst de sleep() functie de huidige thread voor tijd uitgedrukt in time_units, maar alle andere draden zijn vrij om de uitvoering ervan blijven!

  • VIPER ingebouwde functies

VIPER VM breidt Python met ingebouwde functies om de General Purpose Input Output pinnen van de embedded apparaat. Deze functies lijken op degene die gebruikt zijn door Arduino, maar zijn nu nog flexibeler.

analogRead() vs. adc.read()

De functie analogRead() wordt geleverd als een ingebouwde te vergemakkelijken van de overgang van de Arduino/bedrading naar VIPER.
Echter de aangewezen manier om te lezen van een analoge pin in VIPER is:

# importeren het adc-stuurprogramma

importeren van adc

x = adc.read (pin, monsters = 1)

Leest analoge waarden van pin dat een van de Ax pinnen moet. Als monsters is 1 of niet gegeven is, retourneert de integerwaarde lezen van pin. Als monsters groter is dan 1, geeft als resultaat een tupel van gehele getallen van grootte monsters.

analogWrite() vs. pwm.write()

Van de Arduino analogWrite() functie biedt een eenvoudige interface voor de hardware PWM, maar biedt geen enkele controle over frequentie. De functie analogWrite() wordt geleverd als een ingebouwde te vergemakkelijken van de overgang van de Arduino/bedrading naar VIPER. Maar de beste manier gebruik van pwm in VIPER is:

# importeren het pwm-stuurprogramma
importeren van pwm

PWM.write (pin, periode, pulse, time_unit = MILLIS)

De staat van pin wordt periodiek overgeschakeld tussen lage en hoge volgens parameters:
-periode is de duur van een blokgolf pwm

-pulse is de tijd dat de blokgolf pwm in de hoge Braziliaanse blijft

-time_unit is de eenheid van tijd en pols worden uitgedrukt in time_unit

Gerelateerde Artikelen

Maken van een Mini LED sirene (aangedreven door Arduino!)

Maken van een Mini LED sirene (aangedreven door Arduino!)

Dit is een van de eerste projecten die ik met Arduino gemaakt heb. Het is een beetje sirene met een LED dat verdwijnt en knippert in- en uitschakelen. Het toont basisgebruik van LED's en sprekers. Lees ook dit artikel: 8-Pin programmeren ShieldOpbouw
Steampunked Magic Eye Winker aangedreven door batterijen en USB-kabel is aangesloten

Steampunked Magic Eye Winker aangedreven door batterijen en USB-kabel is aangesloten

Hi iedereenen een gelukkig Nieuwjaar aan de instructables- en ook steampunk-bedrijf.Hier is mijn nieuwste project: deSteampunked Magic Eye Winker.Sinds mijn vroegste jeugd ben ik diep onder de indruk van de magie van licht bij mijn grootouders radio.
Hoe het bouwen van een enorme, knipperende bill board / panel light

Hoe het bouwen van een enorme, knipperende bill board / panel light

Ik ben een partij organisator uit Amsterdam en ik wilde iets speciaal en visuele voor het decoreren van mijn gebeurtenissen. Ik kwam met het idee om een enorme, knipperende billboard bouwen door een bedrijf van de verlichting. Dit was veel te duur, d
ClockWise - een intelligente wekker aangedreven door Intel Edison

ClockWise - een intelligente wekker aangedreven door Intel Edison

Met de klok mee is uw volgende intelligente wekker: het u wakker door het hardop zeggen de weersomstandigheden en uw Google agenda-afspraken voor de dag in een Bluetooth speaker.De basis van dit project is een python-script: met behulp van API's, zoa
Emma: een 8-cijferige alfanumeriek LED Display aangedreven door elektrische Imp

Emma: een 8-cijferige alfanumeriek LED Display aangedreven door elektrische Imp

Emma is een openbaar referentieontwerp voor een imp-aangedreven apparaat van elektrische Imp.Nog nooit gehoord van de elektrische Imp? Het is vrij netjes. "Het GMB" is een klein wifi-verbonden microcontroller ingepakt in de dezelfde vormfactor a
Boor aangedreven door een laptopbatterij gratis

Boor aangedreven door een laptopbatterij gratis

Ik kon vinden dat een gratis oude batterij aangedreven boor en een gratis laptopbatterij.Raadpleeg de boor in actie in de video.Ik had een andere accu boor dus ik kon gebruiken de Lithium-Ion cellen van de laptop accu te geven van het nieuwe leven va
Verticale tuin & weer aangedreven door Intel Edison

Verticale tuin & weer aangedreven door Intel Edison

BioEdison is een slimme verticale tuin op basis van de nieuwe Intel Edison waarmee een eenvoudige, geautomatiseerdebeheer van elk type van plantaardige of plant.Voordelen van het bedieningsorgaan BioEdison dan een traditionele moestuin zijn het effic
DIY auto aangedreven door Smartphone

DIY auto aangedreven door Smartphone

Ik maakte deze auto met behulp van recycling materialen zoals doppen, ijs stokken enz. Interessante ding over deze auto is de aangedreven door Smartphone. Geen behoefte aan een batterij. Net plugin uw Smartphone met OTG ondersteuning en u bent goed o
Vergroten van een Moog Etherwave Theremin

Vergroten van een Moog Etherwave Theremin

I 'm gonna gaan door mijn proces van het hacken van een Moog Etherwave Theremin. Ik gemaakt van een nieuwe acryl top, deels geschuurd te doorschijnend in bepaalde gebieden, en mijn eigen circuit rond een ATMega168 Arduino Bootloaded microcontroller d
Arc reactor model aangedreven door zonne-energie

Arc reactor model aangedreven door zonne-energie

Dit zijn de stappen van het maken van een model van Arc Reactor aangedreven door zonne-energie.这些是如何制作一个由太阳能供电的方舟反应堆模型的步骤.Stap 1: Voorbereiding 准备 Materialen die we nodig heeft: koperen draad, Strijkijzer, schaar, handschoenen, giue, LED's, acrylglas
Multi Cade aangedreven door Raspberry Pi

Multi Cade aangedreven door Raspberry Pi

Herbeleef uw jeugd dagen, of nieuwe degenen met dit leuk om te maken van de arcade kast aangedreven door de raspberry pi ervaring. Deze gids zal u tonen enkele van de basisprincipes arcade creatie en ingaan op het proces nam ik naar mijne bouwen.Stap
Microbiële brandstofcel aangedreven door Urine

Microbiële brandstofcel aangedreven door Urine

Microbiële brandstofcellen (MFC's) zijn duurzame bio-energie-machines die gebruik maken van organische materialen voor de productie van elektriciteit. MFC's bestaan meestal uit twee elektroden, een anode en kathode die door een membraan catie zijn ve
Muzikale oefening: Training Shirt MP3 speler aangedreven door oefening

Muzikale oefening: Training Shirt MP3 speler aangedreven door oefening

Mensen hou het luisteren naar muziek tijdens het sporten. Muziek biedt de motivatie nodig voor particulieren om energie uit te blijven oefenen en in vorm te komen. Dus, omdat mensen genieten van het luisteren naar muziek tijdens het sporten, wat als
Smart Garage aangedreven door pcDuino

Smart Garage aangedreven door pcDuino

hoeveel keer u verdreven weg van huis en af als u uw garage hebt gesloten of niet?Hier presenteren we een slimme garage aangedreven door pcDuino. De garage waarschuwt u door e-mail te sturen als de garagedeur is open gelaten. Als u e-mailen om te slu