Pages: [1] 2   Go Down
Author Topic: Synth(MIDI)-styrda ljuseffekter, påbörjat projekt, uppskattar feedback  (Read 35871 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Spelar bassynth (Minimoog Voyager) i ett Kraftwerk-liknande band och tänkte att vi ska använda oss av mindre ljusseffekter för att ge de låtarna lite olika karaktär. Till en början har jag tänkt att göra två saker, en platta med vita lysdioder som blinkar när jag trycker ner en tangent och en platta med röda lysdioder som tänds i rader som en våg när en tangent trycks ner. PLattorna ska sen dubbleras och därefter vill förhoppningsvis de andra i bandet ha liknande grejer. Har lött de båda plattorna och lärt mig programmera Arduinon så att enstaka lysdioder tänds i en våg.


Vita plattan




Röda plattan





Nu är det dags att få plattorna att tändas med min synth. Har köpt en MIDI Shield från Electrokit och ska nu försöka förstå hur det fungerar med MIDI Library. Det senare har jag svårt att förstå hur det funkar. Men jag har laddat hem det och ser att det finns en liten tutorial, så ikväll blir det att  testa sig fram lite.
« Last Edit: June 05, 2014, 03:37:23 am by martinblom » Logged

Copenhagen, Denmark
Offline Offline
Edison Member
*
Karma: 32
Posts: 1211
Have you testrun your INO file today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Varsågod: Upskattande feedback.  smiley  smiley-grin  smiley-lol

Plattorna är fina. Jag är mera mjukvara expert, så utan kod ingen rigtig feedback.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tack!

Kod på väg.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Här är koden. Har tänkt att hitta ett sätt att få sekvensen att löpa bara en gång, alltså en "våg" och att den börjar om ifall jag trycker ner en tangent innan den löpt färdigt. Men först vill jag bara få den att triggas.

Code:
int switchState=0;
void setup(){
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(2,INPUT);
}
void loop(){
switchState = digitalRead(2);
if(switchState==HIGH) { // the button is pressed
digitalWrite(3, HIGH); //red LED
digitalWrite(4, LOW); //red LED
digitalWrite(5, LOW); //red LED
digitalWrite(6, LOW); //red LED
digitalWrite(7, LOW); //red LED

delay(50); //  wait for a quarter second

digitalWrite(3, HIGH); //red LED
digitalWrite(4, HIGH); //red LED
digitalWrite(5, LOW); //red LED
digitalWrite(6, LOW); //red LED
digitalWrite(7, LOW); //red LED

delay(50); //  wait for a quarter second

digitalWrite(3, HIGH); //red LED
digitalWrite(4, HIGH); //red LED
digitalWrite(5, HIGH); //red LED
digitalWrite(6, LOW); //red LED
digitalWrite(7, LOW); //red LED

delay(50); //  wait for a quarter second

digitalWrite(3, LOW); //red LED
digitalWrite(4, HIGH); //red LED
digitalWrite(5, HIGH); //red LED
digitalWrite(6, HIGH); //red LED
digitalWrite(7, LOW); //red LED

delay(50); //  wait for a quarter second

digitalWrite(3, LOW); //red LED
digitalWrite(4, LOW); //red LED
digitalWrite(5, HIGH); //red LED
digitalWrite(6, HIGH); //red LED
digitalWrite(7, HIGH); //red LED

delay(50); //  wait for a quarter second

digitalWrite(3, LOW); //red LED
digitalWrite(4, LOW); //red LED
digitalWrite(5, LOW); //red LED
digitalWrite(6, HIGH); //red LED
digitalWrite(7, HIGH); //red LED

delay(50); //  wait for a quarter second

digitalWrite(3, LOW); //red LED
digitalWrite(4, LOW); //red LED
digitalWrite(5, LOW); //red LED
digitalWrite(6, LOW); //red LED
digitalWrite(7, HIGH); //red LED

delay(50); //  wait for a quarter second

digitalWrite(3, LOW); //red LED
digitalWrite(4, LOW); //red LED
digitalWrite(5, LOW); //red LED
digitalWrite(6, LOW); //red LED
digitalWrite(7, LOW); //red LED

delay(50); //  wait for a quarter second
}
else {  // the button is not pressed
digitalWrite(3, LOW); //red LED
digitalWrite(4, LOW); //red LED
digitalWrite(5, LOW); //red LED
digitalWrite(6, LOW); //red LED
digitalWrite(7, LOW); //red LED
}
} // go back to the beginning of the loop
Logged

Copenhagen, Denmark
Offline Offline
Edison Member
*
Karma: 32
Posts: 1211
Have you testrun your INO file today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Det där med at "börja" om något er trykt skal kodas sådan
Code:
void loop() {
if ( digitalRead(Button)==HIGH && ButtonStart == LOW  )
  ButtonStart == HIGH ;
if ( ButtonStart == HIGH ) {
  //Våg kode
 // Når vågen er slut 
  ButtonStart == LOW ;
  }
}
Det gör at vågen bara startar när knappen går från LOW til HIGH. Inte om du holder den ned eller släpper den tidligt eller nåt.

Och så gör dig den vana at korrigere dine kommentar när du ändrar kod - delay(50) är inte en kvart sekund.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tack!

Sir, yes sir! smiley-eek
Logged

Sweden
Offline Offline
Sr. Member
****
Karma: 11
Posts: 448
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hum, kul projekt! Verkar enklare att bygga om tex http://www.ikea.com/se/sv/catalog/products/60116540/ eller 1M 30 Pixels WS2812B RGB band. Lite mer programmering men det är ju den roliga delen.

Skulle rekommendera att göra en tabelldriven lösning. Kanske till och med en interpretator för ett byte-orienterat språk. Då skulle man kunna skicka LED styrprogram över MIDI.

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tycker om att bygga saker från noll så mig gör det inget. Då blir det precis som jag vill ha det, även om det inte alltid blir så snyggt. Men jagnjuter mer av att ha gjort det helt själv.

Hmm. Tabelldriven. Det får jag nog vänta med iom att jag inte har en susning om vad det ordet betyder. Vad blir skillnaden?
Logged

Copenhagen, Denmark
Offline Offline
Edison Member
*
Karma: 32
Posts: 1211
Have you testrun your INO file today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

"Tabeldreven" Tja, ja ... Som jag forstår din kunnskab, Martinblom, så kan det förslag vara långt frem i tiden. Men det kan också bare att nyt ord for "Array".

Arrays er som hus på vägen. istället for at skriva "fjärde-hus-på-vägen"  så skriver du Väg[4].  Det vil inte spara något på dit program i sin nuvarende form, men det blir det senere. Lår oss åka lite frem i tid  smiley
Code:
byte Led[6] = { 2,3,4,5,6,7 }   // Kommentar 1
void setup() {
  for (int i=0; i<6; i++) { pinMode(Led[i],OUTPUT) ; } // kommentar 2
 .... og annat setup  }
void loop() {
   ....knap kode osv
  for ( int i=0; i<8; i++) {  // kommentar 3
    if ( i<=5 ) digitalWrite(Led[i]HIGH) ; // kommentar 4
    if ( i>=0 ) digitalWrite(Led[L],LOW) ;  // ... 5
  delay(50) ;   // Måsta slänga delay bort ... en anden Post varför och vad som kommer istället en andan gång
  } // slut på for-loop
 ..annan kode
}
Kommentar 1:  Har reserver vi plads til 6 Led pin placeringar. Den första hetter Led[0], anden Led[1] och sista Led[5]. Om du nu har bytet runt på ledningerna 4 & 5  ved lödningen, så kan du här skriva { 2,3,5,4,6,7 } - och resten af programmet behöver inte veta om ändringen! Det är det smarta.

Kommentar 2: "for ( ... )" kan du slå upp. Det gör at variablen i går från-och-med 0 til-och-med 5 (mindre än 6). För varje i anropas pinMode med Led[i], dvs först med Led[0] (som jo har värden 2, dvs pin2 sätts til output). Nästa omgång er det Led[1] på tur och den sätter så pin 3, og tredje gång klarar den der feltrådning med at Led[2] sätter pin 5 ... I övrigt - just i dette tilfälle behövs { } inte, men tydligere att skriva dom.

Kommentar 3: Här går i från 0 til 7 inklusiv. Man kunne också skriva for ( int i = 0; i <=7 ; i++ ) för att göra det tydligt at vi slutar med 7, men det är en vana som C-programmer har at det oftast skriver "< högsta+1". Det passede jo fint med at Led-arrayet på storlek 6 slutade på [5] på kommentar 1.

Kommentar 4: Om du använder digitalWrite(Led[i],HIGH) och i är mera än 5 så är du utanför området af Led och det är dårligt. Så det gör vi inte. Annars så tänder vi en LED åt gången for dom första 5 omgånger med i.

Kommentar 5: Samma problem , om i bara är 1 så är i-2 lika med -1 och det går inte i Led. Eftersom i slutar på 7 så är i-2 like med 5 som högsta. Här släcker vi en LED åt gången for dom sista 5 omgångarna af i.

Det skulle gärna göra at vågen med LED kör. Du kan jo skriva ned alla värden för i og vilka LED tänns och släcks. Och så vet at ändra på i-loopens start/slut, og om du har i-1 eller i-3 så ändrar du vågens tjocklek. Med lite fantasi kan du gøra snyggare mönster.


P.S: Mit skrevna svensk er USSELT och felfyld. Jag vet det. Kan du läsa danska?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok. Förstår nog mer om ett tag när jag arbetat mer med Arduino. Tyvärr kan jag inte läsa andra skandinaviska språk än svenska. Jag tror jag förstår dig trots din  "usla" svenska.

Har tänkt koppla på en MIDI Shield nu, men förstår inte hur. Har ju såna där pins som sitter i rader och går genom Shielden. Men ska de inte sitta fast i Shieldens hål? Förstår inte alls hur den ska kopplas.  Har googlat liteen blir ite något klokare.

Edit: Aha! Kan det vara så att jag ska löda fast vissa pins som MIDI Shielden använder och så är övriga fria att koppla till annat?

Två frågor till då:

1. Inser att jag kommer behöva fler utgångar än vad som är tillgängligt via MIDI Shielden (den röda plattan behöver ju 10 utgångar), har fått tips om nåt jag tror han kallade breakout board. Kan det vara en idé? Var beställer jag iofs det då? Kollade hos Electrokit, som jag köpte MIDI Shielden hos (snabbt och smidigt) men hittade ingen breakout board som jag tydligt kan se passar Arduino.

2. Går det att koppla pins till mina ljusplattor provisoriskt eller måste de lödas fast?

Kanske är en sån här en bra ide? Så får jag MIDI i/o/thru och en massa utgångar. Allt i ett!
https://www.sparkfun.com/products/9598
« Last Edit: June 09, 2014, 07:10:39 am by martinblom » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Light circuit and basic Arduino programming done! Now I just have to figure out how to use the MIDI Shield.

http://youtu.be/uiHyc1QdwEg
Logged

Copenhagen, Denmark
Offline Offline
Edison Member
*
Karma: 32
Posts: 1211
Have you testrun your INO file today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Edit: Aha! Kan det vara så att jag ska löda fast vissa pins som MIDI Shielden använder och så är övriga fria att koppla till annat?
  :
1) Inser att jag kommer behöva fler utgångar än vad som är tillgängligt via MIDI Shielden (den röda plattan behöver ju 10 utgångar), 2)Går det att koppla pins till mina ljusplattor provisoriskt eller måste de lödas fast?
Kanske är en sån här en bra ide? https://www.sparkfun.com/products/9598
Shielden anvænder bara pin 0 og 1. Da dom också anvænds af Seriel porten ha dom sat en switch på: "Prog". I "Prog" stället ¨r shielden fråkobblat så du kan använda den Seriel porten - typisk for at programmere et nyt program. I det annat läge är det Midin der gäller. Du bör nog kobbla den från USB'en når du spelar.

På den ene sidan står D2 til D13 og A0 til A5 - alle dom kan du använda - det är direkt koppling til samme pins som på Arduinoen,. Jag föreslår du köper dig en Pinheader - altså en rad stifter, så kan du anvæde female-jumper-wire för tilslutningen. Jag tycker det er en rigtig bra shield til dit syfte.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aha, nu börjar jag förstå.

Ok, så jag kan behålla den jag har? Alltså:

http://www.electrokit.com/midi-shield.47182

Och så  löder jag alltså fast pins på  RX och TX medan de andra pins går rakt igenom. Och så köper jag female-kopplingar till dessa att löda fast på mina 10 sladdar. Har jag förstått rätt då?
Logged

Copenhagen, Denmark
Offline Offline
Edison Member
*
Karma: 32
Posts: 1211
Have you testrun your INO file today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nej, du skal inte lödda nåt på Rx/Tx ... den där kit saknar nåt i stil med http://www.let-elektronik.dk/komponent-kit/pinheader/arduino-stackable-header-kit-1.html - du hittar säkert samma på Elektrokit. Dom sätts på så pinnarne stikker igennom - så sätter man bare Midi shielden ovan på Arduinoen.

Du skal titta på den Schematic som elektrokit har http://www.electrokit.com/productFile/download/2055 här kan du se at på DEN shield så er flere pins forbundet. Men om du inte trycker på kanpparna (eller inte sätter dem på kortet) så är det bara 6 og 7 som används af LED. Du kan jo använda A0 til A5 som vanliga digital pinnar så du har nog.  Här kommer det trick med tabellen i förra mail til nytta, der kan stå Led[] = { 2, 3, 8, 9, A2 } f.eks. som dina fem LED trådar (eller 10 som du vil ha)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sådär. Kopplingarna funkar, även "via" MIDI Shielden. Nu återstår programmering och MIDI-styrning.

http://youtu.be/uKlUplCvT34
Logged

Pages: [1] 2   Go Up
Jump to: