Den skygga Nightscape - Jed Diller och Ken Hoff (3 / 6 steg)

Steg 3: Beteendemässiga Kodöversikt



Som tidigare nämnts den Arduino Mega styr beteendet för stjärnor, öga par och firefly. Det finns många saker att tänka på när du skriver du egen kod för uppförandet av bildskärmen. Nedan är vad vi valde att göra.

Mål för skygg Nightscape beteendemässiga koden:

-3 olika grupper av lysdioder: stjärnor, öga par och firefly, alla med en distinkt beteende.
-Individuell stjärnor och öga par fungera som separata enheter
-Firefly fungerar som en enhet
-Stjärnorna tona in och ut, imitera glimten. (Detta var gjort med puls bredd modulation)
-Öga paren blinka slumpmässigt
-Alla grupper svarar på ljud och återuppta beteende kontinuerligt.

Hur det fungerar:

-Under de viktigaste loop är varje entitet (stjärna, öga par, firefly) vaken eller sover
-Om vaken, slumptal används för att bestämma när blink/fade ögon/stjärnorna och firefly fortsätter på sin väg till nästa LED stift
-Om sover, ökas 'tid sovande' variabeln

När det finns ett ljud (och tröskeln kränks):

-Varje enhet är inställd somna, och tiden sover börjar öka
-Medan en enhet sover:
-Varje gång en sovande enhet besöks, ett slumptal genereras och jämfört med den tid företaget har varit sömn - om tid sovande är större, entiteten vaknar upp.
-Detta leder till varje entitet som vaknat upp slumpmässigt på olika tider.

Frågor och råd:

-När du skriver beteendemässiga koden, den inbyggda Arduino delay() funktion måste undvikas eftersom den rymmer upp alla andra processer som pågår. Detta är ohållbart med tre LED grupper beter sig annorlunda och samtidigt. I stället kan antalet huvudloop iterationer användas för tid beroende av beteende. Observera att den tid det tar för varje huvudloop iteration är beroende på hur mycket saker som du har på gång inom it. Prova och konsten av förfining är dina vänner.
-Som beskrivs i steg 3, hade vi oöverstigliga mikrofon buller med mikrofonen på samma styrelse som lysdioder att bli manipulerad. Vår lösning var att helt skilja mikrofonen genom att låta det vara den enda komponenten på en separat ombord, Arduino Uno.

Exempelkod:

Detta är den kod som vi sprang på Arduino Mega under drift. Koden kan köras på Uno finns i steg 2.

---------------------------------------------------------------------------------------------------------------------

Först måste du initiera alla variabler som dina klasser och huvudloop kommer att använda

int max_led = 50;
int star_twinkle_delay = 10;

CONST int light_sensor = A0;

int sensorValue = 0;
int sensorMin = 1023; minsta sensorn värde
int sensorMax = 0;

int tröskel = 255;
flyta a0 = 0,3; coeff för innevarande värde
flyta a1 = 0,2; coeff för plus & minus 1 från calc
flyta a2 = 0,1; coeff för plus & minus 2 från calc
flyta a3 = 0,05; coeff för plus & minus 3 från calc

int sV_adjusted; lagrade justerade värde

int sV_m3; sensor värdet 3 före calc
int sV_m2; sensor värdet 2 före calc
int sV_m1; sensor värdet 1 före calc
int sV_0; sensor värde beräkning centrerar av kurva
int sV_p1; sensor värdet 1 efter att calc
int sV_p2; sensor värdet 2 efter att calc
int sV_p3; sensor värdet 3 efter att calc (vad är actaully att läsa)

Här är där din 3 klasser (typer av lysdioder) definieras. De har en setup och loop funktion, precis som Arduino.

Star

klass stjärna
{
offentlig:
int pin;
int blekning;
int ljusstyrka;
int vaken;
int time_asleep;

void setup_star()
{
vaken = 1;
fading = rand() % 2.
ljusstyrka = rand() % max_led + 1.
}

void twinkle()
{
om (vaken == 1)
{
om (fading == 1)
{
ljusstyrka + = 1;
}
annan ljusstyrka-= 1;

om (ljusstyrka > max_led)
{
ljusstyrka = max_led;
fading = -1;
}
annars om (ljusstyrka < 10)
{
ljusstyrka = 10;
fading = 1;
}

analogWrite (pin, ljusstyrka);
Delay(1);
}
}
};

Ögon

klass eye_pair
{
offentlig:
int pin;
int vaken;
int blinkar;
int blink_duration;
int time_since_blink;
int time_asleep;

void setup_eyes()
{
vaken = 1;
time_since_blink = rand() % 1000;
}

void display_eyes()
{
om (vaken == 1)
{
om (blinkande == 1)
{
digitalWrite (pin, låg);
blink_duration ++;
om (blink_duration > ((rand() % 20) + 10))
{
blinkande = 0;
blink_duration = 0;
time_since_blink = 0;
}
}

om (blinkande == 0)
{
digitalWrite (pin, hög);
om (time_since_blink > ((rand() % 1000) + 500))
{
blinkande = 1;
digitalWrite (pin, låg);
}
annat time_since_blink ++;
}
}
}

};

Firefly - handtag det är egen pin setup

klass firefly
{
offentlig:
int stift [12].
int tid;
int time_to_blink;
int on_off;
int current_pin;
int vaken;
int time_asleep;

void setup_firefly()
{
vaken = 1;
time_to_blink = 100;
för (int jag = 0; jag < 12, i ++)
{

stift [i] = i + 40;
pinMode (stift [i], produktionen);
digitalWrite (stift [i], låg);
}
current_pin = 0;
}

void go_firefly()
{
om (vaken == 1)
{
Stäng av
om ((on_off == 1) & & (tid > (rand() % 100) + 400))
{
digitalWrite (stift [current_pin], låg);
tid = 0;
ON_OFF = 0;
}

slå på
om ((on_off == 0) & & (tid > time_to_blink))
{
current_pin = (current_pin + 1) % 12.
digitalWrite (stift [current_pin], hög);
tid = 0;
ON_OFF = 1;
}
tid ++;
}
}
};

Definierar stjärnor, ögon och firefly objekt - samtal firefly objekt frank bara för att skilja den

stjärniga stjärnor [12] ;// = {2,3,4,5,6,7,8,9,10,11,12,13}.
eye_pair ögon [31].
Firefly frank;

Setup - initialiserar stjärnor, ögon, firefly och sensor

void setup()
{
Serial.BEGIN(9600);
för (int jag = 0; jag < 12, i ++)
{
stjärnor [i] .pin = i + 2.
pinMode (stjärnor [i] .pin, produktionen);
Stars[i].setup_star();
}

för (int jag = 0; jag < 16; i ++)
{
ögon [i] .pin = i + 24.
pinMode (ögon [i] .pin, produktionen);
Eyes[i].setup_eyes();
}

Frank.setup_firefly();

sV_m3 = analogRead(light_sensor);
sV_m2 = analogRead(light_sensor);
sV_m1 = analogRead(light_sensor);
sV_0 = analogRead(light_sensor);
sV_p1 = analogRead(light_sensor);
sV_p2 = analogRead(light_sensor);

}

Huvudloop - läser in ljudingång, sedan hanterar lysdioder

void loop()
{
sV_p3 = analogRead(light_sensor);

beräkna justerat värde
sV_adjusted = (int) (a3 * (float) sV_m3 + a2 * (float) sV_m2 + a1 * (float) sV_m1 + a0 * (float) sV_0 + a1 * (float) sV_p1 + a2 * (float) sV_p2 + a3*(float)sV_p3);

Skift-värden runt för nästa iteration
sV_m3 = sV_m2;
sV_m2 = sV_m1;
sV_m1 = sV_0;
sV_0 = sV_p1;
sV_p1 = sV_p2;
sV_p2 = sV_p3;

om (sV_adjusted < tröskel)
{

för (int jag = 0; jag < 13; i ++)
{
Stars[i].twinkle();
om (stjärnor [i] .time_asleep > ((rand() % 100000000) + 3000))
{
stjärnor i [i] .awake = 1;
stjärnor i [i] .time_asleep = 0;
}
annat
{
stjärnor i [i] .time_asleep ++;
}
}
för (int jag = 0; jag < 30; i ++)
{
Eyes[i].display_eyes();
om (ögon [i] .time_asleep > ((rand() % 100000000) + 3000))
{
ögon [i] .awake = 1;
ögon [i] .time_asleep = 0;
}
annat
{
ögon [i] .time_asleep ++;
}
}
Frank.go_firefly();
om (frank.time_asleep > ((rand() % 100000000) + 3000))
{
Frank.Awake = 1;
Frank.time_asleep = 0;
}
annat
{
Frank.time_asleep++;
}
}
annat
{

för (int j = 0; j < 54; j ++)
{
digitalWrite (j, låg).
för (int jag = 0; jag < 13; i ++)
{
stjärnor i [i] .awake = 0;
}
för (int jag = 0; jag < 30; i ++)
{
ögon [i] .awake = 0;
}
Frank.Awake = 0;
}
}

}

---------------------------------------------------------------------------------------------------------------------

Beteendemässiga kod anteckningar:

Du kanske märker att faltning beteende ses i den här koden alltför. Denna faltning är att vara stöpta på analoga värden som håller på att produktionen av Uno. Om en mer stabil och mindre bullriga mikrofon (eller en ljussensor) användes, användning av Uno kunde elimineras och denna kod inte skulle behöva ändras.

Se Steg
Relaterade Ämnen

Barbie och Ken

min fästman och jag gick till en Halloweenfest som Barbie och Ken.Vi gjort kostym genom att köpa en stor garderob pojke från ett rörligt leverans butik, skära den i hälften, skära FRONTPANELERNA till form och måla den. Sista handen var Mattel logotyp...

Den mörk riddare Batsuit och Bane Mask och kostym

med den kommande utgivningen av The Dark Knight Rises, och slump tidpunkten för min vän, Kevin, att vara skallig från kemoterapi, vi beslutat att vi ska göra en video. Han ville vara Bane, och jag kunde dra av en halvbra Batman. Naturligtvis var jag...

Den Fallout överlevande: Kärnkraft och EMP redo Paracord armband - anti strålning tablett, vattenrening, multiverktyg, kolfiber gasmask

bygga ett Paracord armband som kommer att förbereda dig för en kärnvapenattack, kraftverk härdsmälta och EMP med allra nödvändigaste mot strålning redo remmen. Improvisera en gasmask med medföljande kolfiber, bygga en Faradays bur för att skydda din...

Den perfekta Dr. Som Fez och mini fez

Vill veta hur man gör den perfekta Dr som Fes.Med den här guiden, kan du göra fez som är hög kvalitet och långvariga också så mycket elegant.Väl här är det. Min officiella sätt att göra fezes!Använd inte denna tutorial för att göra produkter att sälj...

Klickern (den sista av oss) Mask och kostym

efter jag spelat det här fantastiska spelet för 5: e gången nu bestämde jag mig för jag hade att göra en klickern kostym.Denna handledning kommer att fokusera på masken, men jag kommer ge bort hur jag gjorde sista och göra upp i slutet; )Fler bilder...

Dill och keso paj

Denna ungerska paj serveras välsmakande paj eller som söt paj. Vissa människor gillar att lägga till antingen socker eller florsocker till fyllningen, några skulle lämna ut från att göra, men ändå vill strö den generöst med florsocker för servering.S...

Texas kaviar - den mest enkla, läckra och friska dopp/Side någonsin

med sommaren i full gång, nu är det dags att dra nytta av det fantastiska sun mogna råvaror som är lätt tillgängliga. I detta Instructable jag kommer att visa hur du gör en sann kråkor pleaser det inte är bara enkla och läckra men också mycket hälsos...

1959 ursprungliga baddräkt Barbie och Ken

även om ovilliga, övertygad om min pojkvän att klä upp som Ken att matcha min Barbie kostym! Allt material för min kostym köptes vid en lokal tygaffär (Mary-Jos i Gastonia, NC) och en vän brukade ett 1950-baddräkt mönster gör baddräkten. Jag beställd...

Ardweeny: den lilla vän Arduino (och hur nötkött upp)

öppen hårdvara? Arduino(TM) är det första namnet som kommer att tänka! Lika stor som det är, behöver ibland vi en liten mikrokontroller lösning för ett projekt eller en avskalad version för kostnadseffektivitet.Ardweeny är lösningen. Dessa små kit är...

Hur man gör den perfekta jordnötssmör och gelé smörgås

när jag var i första klass hade jag ett uppdrag att lära sig hur man gör en PB & J smörgås. Bara i fall du aldrig fick att läxa i skolan, eller om du har glömt, har jag lämnat enkla steg för steg instruktioner att göra perfekt jordnötssmör och gelé s...

Håll ner lång runda saker med denna snabbis bänk Loop-och-V Vice

ibland du har att hålla en lång runda cylinder till din arbetsbänk. Jag ha brukar att hålla ner en mast för bearbetning till segling kanot framdrivning. Bearbetning processen kräver oftast att du roterar runt objektet som smärtsamt (ibland blodigt) s...

Den enklaste uppladdningsbart batteri krets (och rädda planeten alltför)!

Hallo alla...Idén kom till mig när jag var redo att ersätta en battericell i min väckarklocka bredvid min säng. Även använder jag de senaste 5 år endast laddningsbara batterierna av de flesta typer jag övervägt hur många battericeller människor värld...

Den verkliga $5, webbaserad kraft och gas mätare

Detta instructable är ett pågående arbete, kommer att lägga till mer när jag har tid under nästa vecka eller så.I detta instructable jag kommer gå igenom de steg som jag brukade göra en webb-baserad, realtid, electricy och gasmätare, för ungefär $5....

Den ultimata Facebook tillägg och Extension Guide

denna guide fungerar bara för Google Chrome, som kan laddas genom att gå till detta länk.Google Chrome har många set ryggar, mest som jag tvivlar på att fixas, men Google Chrome har extensions och tillägg, som du hittar här.Detta Instructable kommer...

Den ultimata guiden på kommando och Conquer: Red Alert 3 uppdrag och strategier

** uppdatering **De flesta av dessa strategier är gamla och denna instructibles är fortfarande oavslutat, men jag kommer att publicera det och några allmänna scirmish tips. Om du har några tips också, bara kommentar, jag kommer att lista dem här på d...

Jag skickar den: ett spel av romantik och enstaka explosionen

Jag vet inte om dig, men jag älskar frakt. Sjöfarten är romantiska hopkoppling av olika karaktärer och kändisar. Jag tillbringar mina dagar läser om alla Destiel, Johnlock, Appledash, Crundee, och mycket mer. Detta spel hjälper inspirera berättelser...

Visste du att med den långa tryck/peka och håll funktion kan du använda ytterligare funktioner på din kobo ansökan för iPhone, iPad och iPod Touch?

När du använder långa tryck/peka och håll funktion på någon viss bok i biblioteket, på din kobo ansökan för iPhone, iPad eller iPod Touch, du kommer att tas till en översikt över skärmen. Från skärmen översikt tillgång du till ytterligare funktioner...

Den brusande 20's Lady och hennes Gangsta

Reaktionen var fantastisk. Vi kom i ser ut som en miljon dollar. Alla ögon var alla på oss. Ofta imiterade aldrig duplicerade....

Toothless, ryta plysch marionett

detta är det andra projektet våren 2012 saker att tänka computern vetenskap kurs vid University of Colorado, Boulder. Målet med detta projekt var att skapa en plysch som också använde computing på något sätt. Laget består av Jed Diller och Ken Hoff,...