[dorkbotpdx-blabber] (2nd try) Programming Help Needed Please
Donald Delmar Davis
ddelmardavis at gmail.com
Sun Apr 5 14:25:50 EDT 2009
Hans,
Since you are only passing the data through without processing it you
should intercept and retransmit the bytes in the serial interrupt
routine.
In wiring_serial.c
change
unsigned char c = UDR0;
to
unsigned char c = UDR0;
#ifdef WIRING_ECHO_SERIAL
UDR0 = c; //write c back to the Usart Data Register for transmission.
#endif
and #define WIRING_ECHO_SERIAL=1 somewhere.
To do it right you should class serial or create a new core, its a bit
invasive but its actually what you really want here.
Don.
On Apr 5, 2009, at 11:07 AM, Hans Lindauer wrote:
> Let's try this again, without the attachments. You can find them at
> the provided link.
>
> ----- Forwarded Message ----
> From: Hans Lindauer <armatronix at sbcglobal.net>
> To: dorkbotpdx-blabber at dorkbot.org
> Sent: Sunday, April 5, 2009 10:41:47 AM
> Subject: Programming Help Needed Please
>
> OK, I have (hopefully) one line to program to finish my re-write of
> my MIDI lights firmware. It's the line that modifies the MIDI
> library so that it passes any incoming bytes to the THRU port.
>
> In my old program, I just did a Serial.read follower by a
> Serial.print, as follows:
>
> void loop () {
> if (Serial.available() > 0) {
> newbyte = Serial.read(); // read the incoming byte
> Serial.print(newbyte); // echo the incoming byte
> ...
>
> I tried that again here, but with no luck. Then I looked at how
> they send data to the serial port for MIDI OUT in the library, and
> saw that they use a slightly different syntax: serial_.print (b,
> TYPE). So I tried adding that instead, as follows. I've included
> an extra snippet that shows how they're doing it, for context. My
> line is the one with the asterisks. I assumed that I could ignore
> the type argument, since I'm just passing the (int) variable c
> straight thru. (I also tried it as INT and BYTE types):
>
>
> // Try to read data at serial port & pass anything read to
> processing function
> void Midi::poll(void)
> {
> int c;
>
> // Just keep sucking data from serial port until it runs out,
> processing
> // MIDI messages as we go
> while((c = serial_.read()) != -1) {
> recvByte(c);
> serial_.print(c); // ***** pass MIDI data THRU *****
> }
> }
>
>
> // Send Midi NOTE OFF message to a given channel, with note 0-127
> and velocity 0-127
> void Midi::sendNoteOff(unsigned int channel, unsigned int note,
> unsigned int velocity)
> {
> int status = STATUS_EVENT_NOTE_OFF | ((channel - 1) & 0x0f);
>
> if (sendFullCommands_ || (lastStatusSent_ != status)) {
> serial_.print(status, BYTE);
> }
>
> serial_.print(note & 0x7f, BYTE);
> serial_.print(velocity & 0x7f, BYTE);
> }
>
>
> If it helps to see the full library code from http://timothytwillman.com/?page_id=240
> , it's attached (this snippet is in midi.cpp). Please let me know
> if you have any ideas. By the way, this MIDI library seems to work
> pretty well otherwise (with only one light).
>
> Thanks,
> -Hans
> _______________________________________________
> dorkbotpdx-blabber mailing list
> dorkbotpdx-blabber at dorkbot.org
> http://music.columbia.edu/mailman/listinfo/dorkbotpdx-blabber
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://music.columbia.edu/pipermail/dorkbotpdx-blabber/attachments/20090405/0aadcd96/attachment.html
More information about the dorkbotpdx-blabber
mailing list