Arduino-baserad blå ruta (telefon Phreaking) (3 / 9 steg)

Steg 3: Kod för Schematisk 1

Programmering


Koden för detta nya schema i sin helhet finns här på min pastebin.com profil. Vi kommer att täcka de flesta av de centrala begreppen i syntaxen har jag använt för att skapa denna tutorial. Först och främst Arduino använder ett programmeringsspråk som är objektorienterat; C++. Detta språk är ganska mäktig och driver en hel del moderna webbplats logik, mikro-kontrollanter och mycket mer!

Knappsatsen

Först skapar vi en två dimensionell matris av heltal som vi använder för att hålla frekvenserna som anges per siffra av sidan Wikipedia blå ruta. Vi sätter också en varaktighet som en typedef unsigned heltal array. Dessa heltal är uppspelning längd perioder.

int bb [16] [2] = {/ / MF 0,1,2,3,4,5,6,7,8,9, kp, st, 2400 + 2600, kp2, st2, ss4 super < br > {1300,1500}, {700,900}, {700,1100}, / / 0,1,2
{900,1100}, {700,1300}, {900,1300}, / / 3,4,5
{1100,1300}, {700,1500}, {900,1500}, / / 6,7,8
{1100,1500}, {1100,1700}, {1500,1700}, / / 9, kp, st
{2600,2400}, {1300,1700}, {900,1700}, / / 2400 + 2600, kp2, st2
{2400,2040}, / / ss4 övervakningskommittén
};
< p > uint8_t bbdur [2] = {60,100}. < /p >

Därefter skapar vi en matris matris av nycklar som tecken. Dessa tecken ska användas varje gång en knapp på knappsatsen trycks. Vi också ställa in rader och pins heltal matriser.

char nycklar [4] [4] = {< br > {'1', '2', '3', 'a'},
{'4', '5',' 6', 'b'},
{'7', '8', '9', 'c'},
{'#','0','*','d'}
};
< p > byte rowPins [4] = {5,4,3,2}. ansluta till rad Stifttilldelningar för knappsatsen < br > byte colPins [4] = {9,8,7,6}. ansluta till kolumn Stifttilldelningar för knappsatsen < /p >

Sedan skapar vi en knappsats objekt och en enkel matris av tonar objekt. Eftersom vi spelar toner ur två stift på en gång, gör det bara våra liv enklare när skriva och felsöka koden.

Tonar freq [2]. matris med tonen objekt, nu kan vi spela som freq[0].play(); etc < br > tangentbordet knappsatsen = Keypad(makeKeymap(keys),rowPins,colPins,4,4);

Läsa knappar och spela toner

I funktionen setup() måste vi ange freq [0] och freq [1] stiften för utdata. Detta är enkel. Vi också ange "pin-läge" för 2600-knappen och ange en händelseavlyssnare, som är en procButton() knapp bearbetning anpassad funktion samtal. Detta är händelsestyrd programmering. Detta innebär i princip att vi "lyssna" för nycklar ska pressas, vilket skulle vara en "händelsen." Huvudsakliga loop() funktion är vad hanterar händelser och lyssnare för oss.

Freq[0].BEGIN(11); Initiera våra första tone generator < br > freq[1].begin(12); Initiera våra andra tongeneratorn
pinMode (10, ingång); 2600-knappen
keypad.addEventListener(procButton);

Vi har hållit våra viktigaste loop() metoden enkelt, vilket är bra eftersom det ständigt kallas. Den första raden,

char-knappen = keypad.getKey();

i princip anropar metoden getKey() för objektet knappsatsen att se om och vilken knapptryckningen. Koden,

IF(digitalRead(10)==High) {/ / spela 2600Hz om översta knappen intryckt < br > super(); / / övervakande signalering
}

helt enkelt lyssnar efter spänningen på pin 10 och om hittade, spelar 2600 hz frekvens genom att ringa anpassade signalering super() tillsynsfunktionen. Detta är den första funktionen definieras bara nedan funktionen loop() . Det är också den första funktionen att kalla den anpassade enda frekvens spelar sf() funktion

SF(2600,750);

De argument som vi skickar till denna funktion är frekvensen att spelas och varaktighet. Efter lexically tilldela frekvens och varaktighet till heltal variabler av samma namn, anropar funktionen anpassade sf() endast en enda spela metod på ett enda stift som,

Freq[0].Play(Frequency,duration);

Detta är vår första titt på tonen syntesmetod spela från tonen biblioteket. Så, om du kan tänka dig spela två toner, för flera frekvenser skulle se liknande, men med två stift, som,

Freq[0].Play(Frequency,duration); < br > freq[0].play(frequency,duration);

Och det är precis vad funktionen anpassade Multi-Frequency spelar mf() gör.

Så hur vi behandlar varje knapptryckning i funktionen procButton() ? Med hjälp av en fall-switch logik. Konstanterna "släppt," "pressad," och "hålla" (inte "HELD" av någon konstig anledning), är en del av knappsatsen biblioteket och vi kan använda den i ett fall-switch logik som,

Växla (keypad.getState()) {< br > fall släppt: / / släppa direkt
göra några saker
bryta;
TRYCKT i mål: / / tillfällig
göra några saker
bryta;
Håll i mål: / / HÖLLS (särskilda funktioner)
göra några saker
bryta;
}

Och det är precis vad vi gör. Eftersom funktionen procButton() är en händelsehanterare som anropas av funktionen loop() , får vi en keypadevent-objektet som skickas till det är handler procButton(). Detta objekt kan behandlas som en enkel karaktär - och vi gör det genom enkel subtraktion heltalet 48 från det för att få vilken knapptryckningen från 0-9.

void procButton (KeypadEvent b) {< br > b-= 48.

Nu vi vet vilken knapptryckningen och skickar det till den mf() funktion som använder den flerdimensionella array bb [] som vi skapade tidigare att spela mf toner. Du kanske har märkt att KP (*) och ST (#) inte är 0-9. Detta är korrekt, eftersom de kommer och efter subtraktion är -13 och 6 respektive. Funktionen mf() sedan hanterar dessa som,

} annat if(digit==-13) {< br > siffra = 12. / / *
} annat if(digit==-6) {
siffra = 14. // #

Detta då spelar tonerna som de tilldelas i bb [] multi-dimensionell array.

Vi har nu omfattas alla av de centrala begreppen programmässigt med detta schema (1), låt oss gå vidare till den andra schematiskt och hur vi kan spela WAV-filer som erbjuder ett helt annat ljud till våra blå lådor.

Extra funktioner

Denna kod ger en massiv mängd extra funktioner, inklusive inspelning siffror i och matris för uppspelning och olika arbetslägen. Koden är mycket rättfram Arduino C++-kod. Tryck länge på "A" för att växla mellan olika lägen. Varje gång vi ändra lägen funktionen notifyMode() kommer puls ut en kod av 440 hz pip att låta oss veta vilket läge vi använder. Alla lägen beskrivs fullt ut på min blogg här eller på Wikipedias sida för blå ruta specifikationer.

Se Steg
Relaterade Ämnen

ProjectMF Installation (telefon Phreaking)

IntroduktionEn ansiktslös vän i en IRC-kanal 2006 gav mig mp3 av den fantastiska ProjectMF hoppas presentation av Mark Abene (Phiber Optik). Sedan dess har jag varit fascinerad av projektet, men saknade den tekniska kunskapen för att konfigurera en s...

Att införa Climaduino - Arduino-baserad termostaten du styr från din telefon!

Uppdatering:Det finns en ny version av Climaduino och Climaduino Controller med några mycket väsentliga ändringar.Stöder flera zonerAnvänder Arduino YúnFungerar med Central luftkonditioneringKommunicerar med MQTT protokoll (kan integrera med andra sy...

Spåra din bil med en Arduino-baserad Lojack

Bilstölder är en verklig dra! Öka dina chanser att få tillbaka din bil genom att installera denna enkla Arduino-baserad tracker i bilen.Detta projekt är ganska enkel, och skulle vara ett bra projekt för nya Arduino programmerare letar efter något lit...

Mobile Robotics med repa: bygga en Arduino-baserad insekt-liknande Walker och programmera den med Scratch

Låt oss springa runt? Detta är en Arduino-baserad, lätt att bygga version av insekt-liknande walker med klädhängare tråd och ursprungligen skapades av Jerome Demers (se också detta instructable) och Gareth Branwyn. Det finns i två versioner:en fristå...

Arduino baserade Robotic Car(wireless controls+Autonomous)

Detta instructable handlar om en Arduino baserad robot bil som använder Arduino, Arduino programmeringsspråk, motor driver, en LCD-skärm visar aktuell status för bilen och även en Bluetooth-modul för trådlös kommunikation från en smartphone eller en...

Arduino-baserad byta spänningsregulatorer

DC till DC omvandlare används effektivt konvertera DC-spänningar. De har en verkningsgrad på upp till 95% vilket gör dem användbara för LED strips, CYKELLYSEN, batteriladdare och solar powered enheter. En spänningsomvandlare kräver en PWM källa som e...

Arduino-baserad Bi-color LED Matrix Flappy fågeln spel

Vi har byggt en hel del projekt med Bi-färg (rött och grönt) LED Matrix drivrutinsmodulen Kit från jolliFactory och har publicerat dem som instructables här. Var och en av dessa moduler använder två MAX7219 Display Driver ICs för att driva en Bi-colo...

Arduino-baserad skugga larm

Shadow larm används vanligen för skydd mot stöld. En skugga larm är en enhet som avger ett larm när en skugga faller på den. Beskrivs här är en enkel krets larm arduino baserade skugga. Denna kompakta skugga larm enhet kan avkänning en rörlig skugga...

Låg höjd miljöövervakning med en Arduino baserade väder Instrument och Aeropod Remote Sensing plattform

ProjektöversiktStudenter på New Lothrop High School i Michigan har arbetat tillsammans för att bygga en plattform för remote sensing låg höjd som kallas en "Aeropod" och rummen har det med ett "Arduino" baserade väder instrument att sa...

Montering en Arduino baserade rök / värme larm

Som ni kan se från denna bloggpost jag utvecklat grunderna för det här projektet för två år sedan som ett larm / avstängning switch för RepRap 3D skrivare kit som jag bara hade samlat ihop... och som hade rökt!Första projektetSedan dess har jag haft...

Daves dans i en en Arduino baserade Motion känsliga ljus kostym

En Arduino baserad motion känsliga ljus kostymDet kan också Visa mönster och sådant även om det bara rörelse sensing i vid. Det använder en ADXL335 accelerometer känna bärare rörelse. Min vän Dave vänligt uttryckte det är dock steg med hans nya dans...

Sondering och fräsning ett kretskort med en Arduino-baserad CNC

Fram till nyligen PCB sondering genom att använda en Arduino var baserad CNC-maskin en ren dröm. Tack till folket på Chilipeppr.com vi har nu baserad ett webbaserat verktyg bänk för alla våra Arduino CNC produkter. Den bästa delen; Det är gratis och...

Arduino-baserad robot med IR radar

robot prototypen i detta Instructable är min andra Arduino-baserad "slumbot" som är en autonom robot. Den är kopplad med husgeråd och skrotar. Roboten ser"" med en IR-scanning sensor roteras ett servo. Det ser vänster, framåt, och rätt...

DIY Arduino baserad MIDI fot Controller

Jag har velat prova en gitarr looper ett tag, men jag gillar inte idén att använda pengar på en looper specifika pedal när jag kan använda en dator för det och eftersom jag har fått lära arduino för kul var mycket meningsfullt att göra en en arduino...

Arduino baserade Encrypter

vi alla vill göra detta cool Arduino projekt, som inte egentligen om flyttalsrenderingsmål, utan mer om programvaran. Väl är här en - Arduino baserad kryptering över Serial Monitor. Det var verkligen roligt att utforma. Det kan finnas otaliga tillämp...

Arduino-baserad ledar-tar tid för skolor

om din skola, eller barn skola eller annan plats utnyttjar en central master klocka som är bruten, du kan ha en användning för den här enheten. Nya master klockor finns naturligtvis, men skolan budgetar är under extrema påfrestningar och det verklige...

GEST kontrollerade Arduino baserade Rover (Wireless + linje följande)

Vad är det kan?1. det kan styras med gester.2. det kan skicka temperatur, objekt avstånd, batterinivå, etc. värden till handsken (LCD).3. kan köras på 45 + graders vinkel.4. Tx Rx par på både rover och handske (för dubbelriktad dataöverföring).Varför...

BOBO Arduino baserad halvautonoma RC bil

Hej Instructables!,BOBO, är mitt försök till en arduino baserat, autonom robot plattform. Den lilla killen är baserad på en arduino mega, även om basen staten kan vara försök på en Arduino Uno eller liknande. Han har 4 oberoende motorer styra varje h...

Energino: en Arduino-baserad energiförbrukning övervakning sköld

Energino är en plug-load mätare som mäter hur mycket ström förbrukas av oavsett DC elektrisk apparat är ansluten till dess. Den var ursprungligen avsedd att övervaka energiförbrukningen för enkel nätverksenheter som Ethernet-växlar och WiFi åtkomstpu...