double dac(point_t *p, int l, int r) { double d = 10e100; if (r - l <= 3) { for (int i = l; i <= r; ++i) { for (int j = i + 1; j <= r; ++j) { d = min(d, dist2(p[i], p[j])); } } sort(p + l, p + r + 1, cmpY); } else { int mid = (l + r) / 2; d = min(dac(p, l, mid), dac(p, mid + 1, r)); inplace_merge(p + l, p + mid + 1, p + r + 1, cmpY); static point_t tmp[maxN]; int cnt = 0; for (int i = l; i <= r; ++i) { if ((p[i].x - p[mid].x) * (p[i].x - p[mid].x) <= d) tmp[++cnt] = p[i]; } for (int i = 1; i <= cnt; ++i) { for (int j = 1; j <= 8 && j + i <= cnt; ++j) { d = min(d, dist2(tmp[i], tmp[j + i])); } } } return d; }
void dac_volts(float val) { uint8_t r_val=0; if(((int)((val * 255)/DAC_V_REF)) > 255){ r_val = 255; } else r_val = (int)((val * 255)/DAC_V_REF); dac(r_val); }
// ---------------------------------------------------------------------- void makeAll() { noise(); for (int i = 400; i < 800; i +=100) { nmod(i); } for (int i = 4000; i < 4300; i +=100) { dac(i); } }
//This is main() int main() { setup(); #ifdef MAXIMILIAN_PORTAUDIO PaStream *stream; PaError err; err = Pa_Initialize(); if( err != paNoError ) std::cout << "PortAudio error: " << Pa_GetErrorText( err ) << std::endl; double data[maxiSettings::channels]; err = Pa_OpenDefaultStream( &stream, 0, /* no input channels */ maxiSettings::channels, /* stereo output */ paFloat32, /* 64 bit floating point output */ maxiSettings::sampleRate, maxiSettings::bufferSize, /* frames per buffer, i.e. the number of sample frames that PortAudio will request from the callback. Many apps may want to use paFramesPerBufferUnspecified, which tells PortAudio to pick the best, possibly changing, buffer size.*/ &routing, /* this is your callback function */ &data ); /*This is a pointer that will be passed to your callback*/ //PaAlsa_EnableRealtimeScheduling(stream,true); err = Pa_StartStream( stream ); if( err != paNoError ) std::cout << "PortAudio error: " << Pa_GetErrorText( err ) << std::endl; char input; std::cout << "\nMaximilian is playing ... press <enter> to quit.\n"; std::cin.get( input ); err = Pa_Terminate(); if( err != paNoError ) std::cout << "PortAudio error: "<< Pa_GetErrorText( err ) << std::endl; #elif defined(MAXIMILIAN_RT_AUDIO) RtAudio dac(RtAudio::WINDOWS_DS); if ( dac.getDeviceCount() < 1 ) { std::cout << "\nNo audio devices found!\n"; char input; std::cin.get( input ); exit( 0 ); } RtAudio::StreamParameters parameters; parameters.deviceId = dac.getDefaultOutputDevice(); parameters.nChannels = maxiSettings::channels; parameters.firstChannel = 0; unsigned int sampleRate = maxiSettings::sampleRate; unsigned int bufferFrames = maxiSettings::bufferSize; //double data[maxiSettings::channels]; vector<double> data(maxiSettings::channels,0); try { dac.openStream( ¶meters, NULL, RTAUDIO_FLOAT64, sampleRate, &bufferFrames, &routing, (void *)&(data[0])); dac.startStream(); } catch ( RtError& e ) { e.printMessage(); exit( 0 ); } char input; std::cout << "\nMaximilian is playing ... press <enter> to quit.\n"; std::cin.get( input ); try { // Stop the stream dac.stopStream(); } catch (RtError& e) { e.printMessage(); } if ( dac.isStreamOpen() ) dac.closeStream(); #endif return 0; }
int main(void) { int16_t dac_val=511; int16_t cnt; int8_t dac_dir=0; char out_buf[21]; DDRD|= (1<<DDD0); // LED, enable PD0, LED as output LEDOFF; init_dac(); lcd_init(); lcd_clrscr(); lcd_puts("use U+/U-"); lcd_gotoxy(0,1); lcd_puts("and store"); init_kbd(); delay_ms(500); delay_ms(500); lcd_clrscr(); lcd_puts_p(PSTR("pause")); while (1) { if (dac_dir==1){ dac_val++; } if (dac_dir==-1){ dac_val--; } if (dac_val>0xFFF){ dac_val=0xFFF; //max, 13bit } if (dac_val<0){ dac_val=0; } lcd_gotoxy(0,1); itoa(dac_val,out_buf,10); lcd_puts(out_buf); lcd_puts(" "); dac(dac_val); cnt=1; check_u_button(&cnt); if (cnt>1){ lcd_clrscr(); // u+ pressed lcd_puts_p(PSTR("up")); dac_dir=1; LEDOFF; } if (cnt<1){ lcd_clrscr(); // u- pressed lcd_puts_p(PSTR("down")); dac_dir=-1; LEDON; } if (check_store_button()){ lcd_clrscr(); lcd_puts_p(PSTR("pause")); dac_dir=0; } delay_ms(100); cnt=1; check_u_button(&cnt); if (cnt>1){ lcd_clrscr(); // u+ pressed lcd_puts_p(PSTR("up")); dac_dir=1; LEDOFF; } if (cnt<1){ lcd_clrscr(); // u- pressed lcd_puts_p(PSTR("down")); dac_dir=-1; LEDON; } if (check_store_button()){ lcd_clrscr(); lcd_puts_p(PSTR("pause")); dac_dir=0; } delay_ms(100); } return(0); }
double cal(point_t *p, int n) { sort(p + 1, p + 1 + n, cmpX); return sqrt(dac(p, 1, n)); }