Oh sorry, I thought you were using an arduino. Martin
On Tue, Oct 14, 2014 at 1:16 PM, Colet Patrice <[email protected]> wrote: > Le 14/10/2014 15:06, Martin Peach a écrit : > > Not sure why it segfaults, just want to say that that method is really > bad. Because of Pd's control rate as well as the serial interface latency, > your timing will be really sketchy. The way to do what you want is to > implement the ranging entirely on the arduino and send the values back to > Pd via [comport]. So a Pd [pulseIn] object shoud simply send a request to > the arduino to start a pulse and return the time. It could be implemented > as an abstraction containing [comport]. > > > I'm not using serial to read gpio state but fopen() (may be fopen() is not > fast enough), like in a raspberry (but it's not on raspberry), I will try > to do this with python and use pdsend for retrieving value into puredata. > thank you for the advice. > pc > > > Martin > > On Mon, Oct 13, 2014 at 9:29 PM, Colet Patrice <[email protected]> > wrote: > >> Hello, I'm trying to implement the pulseIn() function we can find in >> arduino libraries into an external. >> >> I couldn't make it work because some part doesn't seem to behave like I >> expect so I'm wondering if it's caused by puredata process, >> so maybe someone in the list could enlight me about that. >> >> The purpose of the external is about using an ultrasound sensor connected >> on gpio that require a microsecond timer for getting distance like this: >> >> >> //here is a custom timer using a struct provided by pcduino headers: >> #include core.h >> unsigned long pat_micros() { >> struct timeval tv; >> gettimeofday(&tv,NULL); >> return tv.tv_sec*(uint64_t)1000000+tv.tv_usec; >> } >> >> //here is the custom pulseIn() function: >> unsigned long pat_pulseIn(t_pdpcduino *x, int pin) >> { >> unsigned long timeout = 100000; >> unsigned long start = pat_micros(); >> >> while( pdpcduino_gpio_read2 (x, pin) == 1 ) >> if( pat_micros() - start > timeout ) >> return 0; >> >> // this is where I'm getting a segmentation fault: >> >> while ( pdpcduino_gpio_read2 (x, pin) == 0 ) >> if( pat_micros() - start > timeout ) >> return 0; >> >> //... >> unsigned long value = pat_micros(); >> >> while( pdpcduino_gpio_read2 (x, pin) == 1 ) >> if( pat_micros() - start > timeout ) >> return 0; >> >> return pat_micros() - value; >> >> } >> >> //... >> >> >> If I reduce the timeout number, segfault comes randomly after this >> function has been triggered, so I'm wondering if this method is really >> appropriate, >> is there an exemple of external (containing such while loops) I could get >> inspired from to write this pulseIn() function? >> >> >> >> >> >> >> _______________________________________________ >> Pd-dev mailing list >> [email protected] >> http://lists.puredata.info/listinfo/pd-dev >> > > >
_______________________________________________ Pd-dev mailing list [email protected] http://lists.puredata.info/listinfo/pd-dev
