En multithreaded blinkande theremin drivs av VIPER (5 / 6 steg)

Steg 5: Förklara koden



Varför använder VIPER

En av de begrepp som många människor hitta utmanande när börjar skriva kod för mikrokontroller är hur du hanterar flera maskinvarurelaterade aktiviteter, till synes alla kör på samma gång. Designers är följaktligen frustrerade över svårigheterna att genomföra sådana funktioner i microcontrollers.

För att lösa dessa smärtor, VIPER stöder alla mest använda hög nivå funktioner i Python som moduler, klasser, multitrådning, callbacks, timers och undantag, plus några maskinvarurelaterade funktioner som avbryter, PWM, digitala I/O, etc.

Varje tråd i VIPER är en slags separerade och parallell process som körs självständigt på brädan. En tråd kräver en funktion som ska köras som indata för definitionen. Samma funktion kan exemplifieras av olika tråd ger dig möjlighet att skriva mycket kortfattat och lättläst kod. Med trådar kan du designa din algoritm arkitektur förutsatt att parallellitet som är typisk för hög nivå. Mer information här.

Inne i koden

Skriptet implementeras med 4 trådar som körs parallellt. En tråd som används för att förvärva och normalisera de analoga signaler som förvärvats genom en potentiometer och en IR rörelsesensor. De andra tre trådarna används för att initiera en generisk blink() funktion som driver två lysdioder på olika frekvenser och en generisk buzz() funktion som driver en Summer på annan frekvens e längd sömn (för att skapa en "beat" effekt), beräknad på grundval av de förvärvade analoga signalerna.

Hämta skriptet från github. Koden har massor av kommentarer. Bara ett par anteckningar.

  • Delay() vs sleep()

I Arduino/kablar med delay() har en bieffekt - Arduino gör ingenting för att även. För att få två eller fler "åtgärder" att köra oberoende av varandra, kan inte du använda delay().

I VIPER avbryts funktionen sleep() den aktuella tråden för tiden uttryckt i time_units men alla andra trådar är fria att fortsätta deras utförande!

  • VIPER inbyggda funktioner

VIPER VM sträcker Python med inbyggda funktioner för att hantera de allmänna ändamål Input Output stiften på den inbyggda enheten. Dessa funktioner liknar de som används av Arduino, men är mer flexibel.

analogRead() vs adc.read()

Funktionen analogRead() tillhandahålls som ett inbyggt att underlätta övergången från den Arduino/ledningar till VIPER.
Men det bästa sättet att läsa en analog pinne i VIPER är:

# importera adc föraren

importera adc

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

Läser analoga värden från PIN-kod som måste vara en av Ax stiften. Om prover är 1 inte eller, returnerar heltalsvärdet läsa från stift. Om prover som är större än 1, returnerar en tupel med heltal storlek prover.

analogWrite() vs pwm.write()

Arduino's analogWrite() funktion ger ett enkelt gränssnitt till maskinvaran PWM, men ger inte någon kontroll över frekvens. Funktionen analogWrite() tillhandahålls som ett inbyggt att underlätta övergången från den Arduino/ledningar till VIPER. Men det bästa sättet att använda pwm i VIPER är:

# importera pwm föraren
importera pwm

PWM.write (pin, period, puls, time_unit = MILLIS)

Statligt av pin slås regelbundet mellan låg och hög enligt parametrar:
-perioden är varaktigheten av en pwm fyrkantsvåg

-puls är tiden pwm fyrkantsvåg stannar i tillståndet hög

-time_unit är den tidsperiod och puls uttrycks i time_unit

Se Steg
Relaterade Ämnen

Enkelt, Billigt och Multiplatform robotarm - drivs av Viper

Skapar med Viper, en enkel robotarm med en Nucleo styrelse, två servomotorer och en billig laser indikator. Du kan flytta armen genom att skriva koordinater som uttrycker grader. För comunication Nucleo styrelse, kan du använda en seriell port och et...

Blinkande LED hjärtat DIY

En serie av 10mm leds placeras i en hjärtformad trälåda att flash med en 555 timer med justerbar blinkande hastighet drivs av ett 9 volts batteri. Jag fick denna idé, eftersom jag tänkte på en present till min flickvän på ett speciellt tillfälle;), o...

Cykla indikator handskar

När jag cykla (särskilt på natten) och med en knepig stänga just av en upptagen huvudvägen (vi kör till vänster i Storbritannien), jag har ofta tänkt jag behövde lite mer synlighet eller bling, så jag bestämde mig att göra dessa "indikator handskar&q...

USB-brons sätta en klocka på slående klocka (med Arduino)

irritera dina medarbetare: leda dem in i ber dig att stänga av din speciella PC-klocka!Denna lilla riggen infact gränssnitt via USB till din PC-klocka och genererar halv timmar dings på en riktig brons sätta en klocka på. Bra grejer i din office och...

Göra ett ljud rör (meddelande i en flaska)

en sund röret är en mycket intuitiv gadget: gör ett ljud i ena änden av röret. Stänga det för att lagra ljud inuti röret. Release ljudet genom att öppna röret 's andra änden.För att ange att ett meddelande som väntar på att släppas, tänds en sträng a...

Arduino Powered Home

Jag har gjort några uppdateringar till detta instructable sedan Aug 2014 ***Jag bestämde mig att dela denna information så att det kan hjälpa andra som har kämpat för att göra liknande saker med deras Arduino. Jag har nyligen fått med Arduino. Jag kö...

Spinning UFO

I detta projekt, kommer att vi använda en LittleBits motor, ljus tråd och Arduino styrelsen att göra en UFO snurra och lysa upp.Total bygga tid: 70 minuter· UFO måleri & konstruktion: 25 minuter· LittleBits motor & ledde församlingen: 20 minuter·...

3 minuters spel Timer

Ovan visas min sista skapade enhet i två olika behållare som som drivs av en USB driva bank (i stället för ett mynt batteri).Jag ville göra en liten intressant timer för att använda med spel som Boggle. Jag hade en Attiny85 Digispark ombord så jag be...

Flera blinkande lysdioder i olika

I denna tutorial ska jag visa dig hur blinka flera lysdioder i olika takt på Arduino-liknande nämnder använder VIPER.Blinkar en LED är känd som "Hej världen av inbäddade enheter"... men med VIPER kan vi göra det roligare. Vi kan blinka många lys...

LED-Lit BSG Viper Mk. II modell bygga

för detta Instructable, byggde jag en LED-lit modell av Viper Mk. II från den nya serien Battlestar Galactica. Satsen är tillverkad av Moebius, jag rekommenderar starkt deras Viper Mk II kit och deras Battlestar Galactica kit, de är båda mycket rolig...

Bygga en startbar UFD för blinkande AMI BIOS

både bärbara och stationära datorer ibland kräva BIOS-uppdateringar. När du besöker en leverantörs webbplats (PC mfgr eller BIOS-tillverkare) och upptäck en ny BIOS med funktioner du vill ha, eller uppgraderingar kräver en ny BIOS, det är dags att lä...

Moldover's Light-Theremin CD (DIY version)

Hej! Jag är Moldover. Jag gör musik och jag göra musikinstrument.Jag släppte min första ursprungliga album (självbetitlade) som Moldover under 2009. Den Awesome upplagan av detta album kom på en CD som monteras på ett skräddarsytt kretskort som också...

AC drivs vita LED cirkulär Skärmförstoraren arbete lampa

,Använd ljusa lysdioder ersätta fluorescerande cirkulär ljus förstoringsglas fungerar lampan. Varde ljus!En medellång svårigheter Instructable att fixa en cirkulär Skärmförstoraren arbete lampa genom att konvertera till en mycket låg energiförbruknin...

Hur man lägger alla Linux-distributioner på en USB blixt driva

i detta instructable jag visar dig hur man lägger nästan alla linux-distributioner på en usb flashdrive. Så du kanske har hört talas om linux innan eller kanske inte. Det spelar egentligen ingen roll om du vet om det eller ingenting om den. I grunden...

Grundläggande tank-drive robot kontroll över Bluetooth med mbed med Freescale K64F

Detta Instructable är baserad på detta tidigare arbete som visar hur man styr en typisk tank-drive stil robot med hjälp av Arduino och en Android app, som visas i denna RC bil för Android Instructable.Jag har använt detta arbete som grund för många r...

EL Wire hatt: Sekvenserade och ljud aktiverat med fjärrkontroll - drivs med Arduino och Sparkfun

Välkommen till Instructable guide av hatten EL Wire med några roliga funktioner.Konceptet är en EL Wired hatt med 8 sekvenserade EL ledningar kontrolleras av en trådbunden fjärrkontroll. Flera hastighetslägen kontrollerbar sekvens är förprogrammerad...

Hur man gör en MIDI-Theremin

Använda Touch styrelsen att åter tänka Theremin!För er som inte har hört av en theremin, är det en tidig elektroniska musikinstrument som kontrolleras eller spelade utan fysisk beröring. Den ursprungliga theremin ritades av uppfinnaren Leon Theremin...

SmartBox drivs av BeagleBone

[detta ett Avealabs projekt, jag är tacksam mot Avealabs faciliteter som för mig]----En gång fanns det PIC mikrokontroller som används för att göra elektronik projekt hemma. Då Arduino Kit har varit utsläppt och ledde ett paradigmskifte i DIY gemensk...

Driv'in mig Batty

jag har alltid tyckt det skulle vara riktigt coolt att ha en massa fladdermöss bidrar till att göra Halloween dekorationer lite roligare.De skulle vara ännu mer coolt om de hade blinkande röda ögon som du ibland se i filmer.Detta projekt visar hur ja...