Sonifying kapacitiv Data över Serial Port med Teensy och SuperCollider (OSX och Linux) (3 / 4 steg)
Steg 3: Kör Teensy skissen och skicka seriella data
När du är igång med Teensy genom att hänvisa till: http://www.pjrc.com/teensy/td_download.html och några exempel program som körs, bör du vara redo att installera och köra den bifogade exempel skiss som tillhandahålls.
< p > //calibration < br > int avg_reading1, avg_reading2, avg_reading3, avg_reading4, avg_reading5;
int count_cal_readings = 0;
långa total1, total2, total3, total4, total5;
int cap_read1, cap_read2, cap_read3, cap_read4, cap_read5;
booleska done_cal = false;
använda
int touch_threshold;
debug
booleska debug;
int tval1, tval2, tval3, tval4, tval5;
int t_val1, t_val2, t_val3, t_val4, t_val5; < /p >< p > void setup() {
Felsöka = false;
Serial.BEGIN(9600);
done_cal = false;
touch_threshold = 0;
IF(debug==true) {
Serial.println("Starting...");
Delay(1000);
{} < /p >< p >} < /p >< p > void loop() {
cap_read1 = touchRead(A1);
cap_read2 = touchRead(A2);
cap_read3 = touchRead(A3);
cap_read4 = touchRead(A4);
cap_read5 = touchRead(A5);
IF(done_cal==true) {//RUNNING
Delay(10);
t_val1 = abs (cap_read1 - avg_reading1);
Delay(1);
t_val2 = abs (cap_read2 - avg_reading2);
Delay(1);
t_val3 = abs (cap_read3 - avg_reading3);
Delay(1);
t_val4 = abs (cap_read4 - avg_reading4);
Delay(1);
t_val5 = abs (cap_read5 - avg_reading5);
IF(t_val1 > touch_threshold) {
IF(debug==true) {
Serial.Print ("Raw touchRead data [");
Serial.Print(cap_read1); Serial.Print("");
Serial.Print(cap_read2); Serial.Print("");
Serial.Print(cap_read3); Serial.Print("");
Serial.Print(cap_read4); Serial.Print("");
Serial.Print(cap_read5);
Serial.println();
Serial.Print ("] \n");
Serial.Print ("Touch kalibrerade värde [");
Serial.Print(t_val1); Serial.Print("\t"); Serial.Print(t_val2);
Serial.Print("]\n");
} annat {
int tval1 = karta (t_val1, 1, 65536, 200, 1200);
int tval2 = karta (t_val2, 1, 65536, 200, 1200);
int tval3 = karta (t_val3, 1, 65536, 200, 1200);
int tval4 = karta (t_val4, 1, 65536, 200, 1200);
int tval5 = karta (t_val5, 1, 65536, 200, 1200);
Serial.Print(tval1); Serial.Print("");
Serial.Print(tval2); Serial.Print("");
Serial.Print(tval3); Serial.Print("");
Serial.Print(tval4); Serial.Print("");
Serial.Print(tval5);
Serial.println();
}
} annat {//CALIBRATION < /p >< p > if(millis() < 5000 & & done_cal == false) {//first fem sekunder, kalibrera
total1 += cap_read1;
total2 += cap_read2;
total3 += cap_read3;
total4 += cap_read4;
total5 += cap_read5;
count_cal_readings ++;
IF(debug==true) {
Serial.Print(cap_read1); Serial.Print("");
Serial.Print(cap_read2); Serial.Print("");
Serial.Print(cap_read3); Serial.Print("");
Serial.Print(cap_read4); Serial.Print("");
Serial.Print(cap_read5);
Serial.println();
}
} annat {
avg_reading1 = int(total1/count_cal_readings);
avg_reading2 = int(total2/count_cal_readings);
avg_reading3 = int(total3/count_cal_readings);
avg_reading4 = int(total4/count_cal_readings);
avg_reading5 = int(total5/count_cal_readings);
done_cal = sant;
IF(debug==true) {
Serial.println("~~");
Serial.println("AVG");
Serial.Print (avg_reading1 + "");
Serial.Print (avg_reading2 + "");
Serial.Print (avg_reading3 + "");
Serial.Print (avg_reading4 + "");
Serial.println(avg_reading5);
Serial.println("~~");
Delay(1000);
}
}
}
Delay(25); < /p >< p >} < /p >
Observera att denna skiss kod har en kort kalibreringsfasen som det går igenom i initieringen av varje ny kör. Så för att få de mest exakta avläsningarna, dess ' alltid en god idé att ha dina händer utanför Teensy och kablar, och inte har kablarna röra marken eller metall när du först ansluter den. Om du anger flaggan DEBUG till true i skissen kan du se kalibreringsfasen i konsolen Arduino.
När kalibreringen är klar, kommer du då se omgivande numeriskt värden i rulla på skärmen. De faktiska touchRead värden kommer från Teensy är 16 bitar i storlek och sträcker sig från 1-65536 men jag har kartlagt produktionsvärden ner till en mer smal (mindre irriterande) hörbara frekvensområdet för 200-1200 i .ino skissen.