Arduino handschoenen (een poging) (2 / 5 stap)

Stap 2: Het schema / de Code


Dit is het schema en de code die ik uit de andere instructable gebruikte. Het enige verschil dat ik heb gemaakt was dat ik wilde twee handschoenen gebruiken in plaats van een handschoen en stok. Die manier wanneer u wilden voor MIME-elk ander instrument die je zou, bijvoorbeeld kunnen als ik wilde spelen een harp ofzo. Dat besluit puur visual-gebaseerd was.

------------------------------------------------------
Een array met daarin de golfvorm
van het geluid van een gitaar
char golfvorm [] =
{125 148, 171, 194, 209, 230, 252, 255,
253, 244, 235, 223, 207, 184, 169, 167,
163, 158, 146, 131, 126, 129, 134, 127,
105, 80 58, 51,38, 22, 12, 2, 10, 35,
58 75, 89, 103, 120, 141, 150, 148, 145,
144, 140, 129, 116, 105, 95, 86, 75, 72,
73, 76, 88, 103, 117, 121, 120, 115, 120,
143, 159, 162, 156, 155, 163, 184, 202,
214, 215, 211, 213, 212, 205, 196, 182,
162, 142, 118, 99, 84, 68, 54, 40, 28,
19, 10, 7, 0, 0, 5, 9, 14, 21, 33,
49, 59, 65, 75, 92, 110};

We gebruiken deze golfvorm te veranderen de
volume van de uitvoer
char [waveformVolume] =
{125 148, 171, 194, 209, 230, 252, 255,
253, 244, 235, 223, 207, 184, 169, 167,
163, 158, 146, 131, 126, 129, 134, 127,
105, 80 58, 51,38, 22, 12, 2, 10, 35,
58 75, 89, 103, 120, 141, 150, 148, 145,
144, 140, 129, 116, 105, 95, 86, 75, 72,
73, 76, 88, 103, 117, 121, 120, 115, 120,
143, 159, 162, 156, 155, 163, 184, 202,
214, 215, 211, 213, 212, 205, 196, 182,
162, 142, 118, 99, 84, 68, 54, 40, 28,
19, 10, 7, 0, 0, 5, 9, 14, 21, 33,
49, 59, 65, 75, 92, 110};
Een array gebruikt als een buffer te vermijden
foutieve stipte afstand
metingen
unsigned int distance_buffer [] {16000, =
16000 16000, 16000, 16000, 16000, 16000,
16000 16000, 16000, 16000, 16000, 16000,
16000 16000, 16000};

Const int distance_length = 3;
int distance_index = 0;

De waarden van de overloop voor 2 octaven
int frequenties [] = {39, 42, 44, 47,
50, 52, 56, 59, 63, 66, 70, 74, 79,
84, 89, 94, 100, 105, 112, 118, 126,
133, 141, 149};

Eerste pitch
int toonhoogte = 160;

Oorspronkelijke volume en versnelling
met de parameter
int lastAcc = 0;
zweven volume = 0;

afspelen van de audio op pin 3
byte speakerpin = 3;

index variabele voor positie in
golfvorm
vluchtige byte waveindex = 0
vluchtige byte currentvalue = 0;

PIN gebruikt voor ultra sonic sensor
Const int pingPin = 7;

Pinnen voor de potentiometers
Const int sustainPin = 1;
Const int sensitivityPin = 2;

Pinnen voor elke vinger van links
hand
Const int finger1 = 9;
Const int finger2 = 10;
Const int finger3 = 11;
Const int finger4 = 12;

int fingerValue = 0;

lange duur, inch, cm;

VOID Setup {}

pinMode(3,OUTPUT); Spreker op pin 3

pinMode(finger1,INPUT);
pinMode(finger2,INPUT);
pinMode(finger3,INPUT);
pinMode(finger4,INPUT);

/**************************
PWM audioconfiguratie
****************************/
Timer2 ingesteld op fast PWM-modus
(dubbel PWM frequentie)
bitSet (TCCR2A, WGM21);
bitSet (TCCR2B, CS20);
bitClear (TCCR2B, CS21);
bitClear (TCCR2B, CS22);

inschakelen interrupts nu die registreert
zijn ingesteld
Sei();

/*************************
Timer 1 interrupt configuratie
*************************/
uitschakelen onderbreekt tijdens het
registers zijn geconfigureerd
cli();

/ * Normale poort operatie, pinnen verbroken
van timer-operatie (breken pwm) * /
bitClear (TCCR1A, COM1A1);
bitClear (TCCR1A, COM1A1);
bitClear (TCCR1A, COM1A1);
bitClear (TCCR1A, COM1A1);

/ * Mode 4, CTC met TOP ingesteld door registreren
OCR1A. Laat ons toe om de variabele timing voor instellen
de interrupt door het schrijven van nieuwe waarden te
OCR1A. */
bitClear (TCCR1A, WGM10);
bitClear (TCCR1A, WGM11);
bitSet (TCCR1B, WGM12);
bitClear (TCCR1B, WGM13);

/ * de klok prescaler ingesteld op /8.  */
bitClear (TCCR1B, CS10);
bitSet (TCCR1B, CS11);
bitClear (TCCR1B, CS12);

/ * Force Output vergelijken voor uitschakelen
Kanalen A en B. * /
bitClear (TCCR1C, FOC1A);
bitClear (TCCR1C, FOC1B);

/ * Initialiseert Output vergelijken
Registreren van A op 160 te stellen de
eerste worp * /
OCR1A = 160;

input capture onderbreken uitschakelen
bitClear (TIMSK1, ICIE1);
uitschakelen van de Output
Vergelijk B Match Interrupt
bitClear (TIMSK1, OCIE1B);
Uitvoer inschakelen
Vergelijk een Match-Interrupt
bitSet (TIMSK1, OCIE1A);
uitschakelen Overflow Interrupt
bitClear (TIMSK1, TOIE1);

inschakelen onderbreekt nu dat
registers zijn ingesteld
Sei();
}

Timer overloop handler
ISR(TIMER1_COMPA_vect) {}

/ * timer1 ISR.  Elke keer als het
heet het speakerpin wordt ingesteld op de
eerstvolgende waarde in golfvorm []. Frequentie
modulatie wordt gedaan door het veranderen van de
timing tussen opeenvolgende oproepen van
deze functie, bijvoorbeeld een Toon van 1KHz,
de timing instellen zodat deze wordt uitgevoerd
via golfvorm [] 1000 keer
een tweede. */

waveindex's resetten indien ze het heeft bereikt
het einde van de array

Als (waveindex > 102) {}
waveindex = 0;
}

Stel de waarde van de uitvoer
Als (volume > 0,03) {}
analogWrite (speakerpin,
waveformVolume[waveindex]);
}
waveindex ++;

Bijwerken van de toonhoogte
OCR1A = toonhoogte;
}

void loop
{
Deactiveer interputs, sturen een ping
bericht en wachten op het antwoord.
cli();
pinMode (pingPin, OUTPUT);
digitalWrite (pingPin, laag);
delayMicroseconds(2);
digitalWrite (pingPin, hoge);
delayMicroseconds(5);
digitalWrite (pingPin, laag);
duur = pulseIn (pingPin, hoog, 2000);
Sei();
de tijd omzetten in een afstand
in centimeter
en in buffer opslaan
distance_buffer [distance_index ++
% distance_length] = duur / 20;

In de buffer de kortste zoeken
afstand gemeten
cm = 16000;
for (int i = 0; ik < distance_length; i ++) {}
cm = min (cm, distance_buffer[i]);
}

Controleren welke vingers worden ingedrukt
fingerValue = 5;
if(!digitalRead(finger4)) {}
fingerValue = 4;
}
if(!digitalRead(finger3)) {}
fingerValue = 3;
}
if(!digitalRead(finger2)) {}
fingerValue = 2;
}
if(!digitalRead(finger1)) {}
fingerValue = 1;
}

Update de sustain en
gevoeligheid waarden
float ondersteunen =
map(analogRead(sustainPin), 0,
1024, 101, 130) / 100.0;
int gevoeligheid =
map(analogRead(sensitivityPin),
0, 1024, 100, 200);

Update van het volume
volume = volume / ondersteunen;
Als (volume < 0) {}
volume = 0;
}

De versnellingsmeter controleren
int acc = analogRead(0);
int accDiff = lastAcc - acc;

De volume-waarde bijwerken
Als (accDiff > 5 * (200 - gevoeligheid)) {}
volume += (float)
Pow (accDiff,
gevoeligheid / 100.0) / 50000;
}
lastAcc = acc;

Controleer of volume niet hoger dan 1
Als (volume >.95) {}
volume =. 95;
}

Update het volume in de golfvorm
for (int i = 0; ik < = 102; i ++) {}
waveformVolume [i] =
((golfvorm [i] - 127) * volume) + 127;
}

De toonhoogte instellen volgens de afstand
tussen de twee handen en de
vingers gedrukt
Als (cm < 102 & & cm > 0) {}
Als (cm > 30) {}
toonhoogte = frequenties [7 +
(((cm-30) / 24) * 4 + fingerValue - 1)];
} else {}
toonhoogte = kaart (cm, 0, 30, 39, 79);
}
} else {}
toonhoogte = frequenties [7 +
(((102-30)/24) * 4 + fingerValue - 1)];
}

Vertraging om te voorkomen stuiteren signalen
delay(50);
}

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

Gerelateerde Artikelen

Arduinolyzer.js: Zet je Arduino in een Logic Analyzer

Arduinolyzer.js: Zet je Arduino in een Logic Analyzer

Toen ik bij Intel als een hardware-ontwerper werkte, gebruikte ik een logic analyzer te debuggen van microprocessoren, en chipsets. Een logic analyzer is een machine die verbinding maakt met uw circuit en zet wat er gebeurt in het circuit in een golf
Solar powered iPhone lader en Arduino in een boek

Solar powered iPhone lader en Arduino in een boek

dit project loopt, maar het werkt goed als is en ik leerde veel van maken.  Het heeft ongeveer 7 maanden geduurd om te bouwen, beetje bij beetje, als ik kennis en delen verworven.  Ik was oorspronkelijk geïnspireerd door Honus' Mighty Minty Boost, du
Lessons Learned While gebouw een nutteloze doos met behulp van een Arduino en een Instructable

Lessons Learned While gebouw een nutteloze doos met behulp van een Arduino en een Instructable

Dus, ik vond een Instructable op de site dat leek vrij goed. U ziet, ik wilde de kracht van een Arduino te lopen van een nutteloze doos. Ik wilde bouwen en programmeren met behulp van de Instructable vond ik op de site. Niet alleen dat, maar ik ging
Arduino op een Breadboard met een FT232RL

Arduino op een Breadboard met een FT232RL

na het bouwen van een paar projecten met mijn UNO ik wilde om rond te spelen met RF-signalen, maar daarvoor nodig ik een tweede bord. Een beetje van het onderzoek later besloot ik dat 'Arduino op een Breadboard' was de weg te gaan.Ik wil niet ingaan
Krachtige controle met Arduino: Interfacing een lineaire Actuator

Krachtige controle met Arduino: Interfacing een lineaire Actuator

In dit specifieke artikel zullen we bespreken hoe eenvoudig het is om controle van krachtige mechanische kracht met behulp van een microcontroller zoals de Arduino en een lineaire Actuator van DC lineaire actuatoren Inc.Stap 1: MicrocontrollersRaspbe
Hoe te programmeren een AVR (arduino) met een ander arduino

Hoe te programmeren een AVR (arduino) met een ander arduino

deze instructables is handig als:* je hebt je arduino met atmega168 en je kocht een atmega328 op je lokale elektronicawinkel. Het hoeft niet een arduino bootloader* u wilt maken van een project dat geen gebruik maakt van arduino - gewoon een regelmat
Controle van een LED licht-strip kleur via een Arduino en een iPhone over BLE

Controle van een LED licht-strip kleur via een Arduino en een iPhone over BLE

Dit leerprogramma zal u tonen hoe u kunt besturen van een analoge RGB LED light strip via een Arduino en een iOS-apparaat. Het zal gebruik maken van de lichtshow-app waarmee u één kleur instellen of het maken van een lichtshow met een reeks van kleur
Controle LED lichte kleur via een Arduino en een iPhone over BLE

Controle LED lichte kleur via een Arduino en een iPhone over BLE

Dit leerprogramma zal u tonen hoe u kunt besturen een RGB LED via een Arduino en een iOS-apparaat. Het zal gebruik maken van de lichtshow-app waarmee u één kleur instellen of het maken van een lichtshow met een reeks van kleuren.Als u bepalen van een
Stroboscoop (zoetrope) met behulp van de Arduino en een gebroken Xbox 360 DVD-station

Stroboscoop (zoetrope) met behulp van de Arduino en een gebroken Xbox 360 DVD-station

Stroboscoop (AKA zoetrope) is een apparaat waarmee een illusie van een bewegende beeld door weergegeven: een snelle erfopvolging frames "" voor een fractie van een seconde als gevolg van de persistence of vision (POV) effect gestopt. Het is een
Programmering Arduino met een Arduino

Programmering Arduino met een Arduino

Dit is mijn eerste Instructable. In dit Instructable ga ik u tonen hoe te programmeren van een Arduino met een Arduino. Er zijn geen stuurprogramma's nodig! Dit Instructable is ook handig voor het uploaden van schetsen aan de Chinese ArduinoStap 1: D
Zet uw Arduino in een Internet-provider

Zet uw Arduino in een Internet-provider

leren hoe zet je Arduino in een AVR In systeemprogrammeur. Hierdoor zal je branden bootloaders op nieuwe chips of programma AVR's zonder een bootloader.Stap 1: materialenOm te beginnen u het volgende nodig:* Arduino (ik zal worden met behulp van de U
Program je Arduino met een Android toestel!

Program je Arduino met een Android toestel!

Halloin dit Instructable die ik wil je laten zien, kunt hoe u programmeren uw Arduino met uw Androïde apparaat. Het is zeer eenvoudig en goedkoop. Ook het laat ons toe om onze Arduino program waar ooit wij wilt, dit is nuttig voor permanent geïnstall
Draai je Arduino in een magnetische kaartlezer!

Draai je Arduino in een magnetische kaartlezer!

Iedereen heeft een magnetische kaartlezer gebruikt, denk ik. Ik bedoel, wie contant geld deze dagen draagt? Ze zijn niet moeilijk om uw handen krijgen op, ofwel, en tijdens een reis naar mijn favoriete lokale elektronica winkel, vond ik een bakhoogte
ARD-e: de robot met een Arduino als een brein

ARD-e: de robot met een Arduino als een brein

het maken van een opensource gecontroleerd Arduino robot voor onder $100.Hopelijk na het lezen van dit instructable u zal zitten kundig Neem uw eerste stap in de robotica. ARD-e kost ongeveer 90 dollar tot $130 afhankelijk van hoeveel vrije elektroni