Programming

PlayingModeFlow

Initially we planned to program the Penta-Tone to function in two modes out-of-the-box. First mode is playing music – each end unit represents a tone and a sound and stepping on it will produce that tone and sound. The second mode is playing a game.

We completed the first mode by now and we will add the second mode sometime in the near future.

The End Unit Code:

Each end unit is programmed to wait for a “step” event (load sensor is under pressure) and a “release” event (load sensor sense no pressure).

// read the voltage from the voltage divider 
// (sensor plus resistor)
 sensor = analogRead(0)

In the case of a “step” event the end unit tries to send an RF message that includes the tone it represents, and “ON” command and if successfull – light the LED strip

payload_t payload = { ON, this_node_note }; 
bool ok = network.write(header,&payload,sizeof(payload));
...
analogWrite(GREENPIN, 200); 
analogWrite(BLUEPIN, 50);

In the case of a “step” event the end unit tries to send an RF message that includes the tone it represents, and “OFF” command

payload_t payload = {OFF, this_node_note }; 
bool ok = network.write(header,&payload,sizeof(payload));
...
analogWrite(GREENPIN, 0);
analogWrite(BLUEPIN, 0);
The Controller Code:

The Controller listens for RF messages and as a message arrives it turns it to a MIDI message and sends it through a Serial port:

// Is there anything ready for us?
 while ( network.available() )
 {
  RF24NetworkHeader header;
  payload_t payload;
  network.read(header,&payload,sizeof(payload));
  note = payload.note;
  currentCommand = payload.command;
  if (payload.command == true){ // send note ON command
   MIDInoteON(note, vel);
  }

  if (currentCommand == false) { // send note OFF command
   //turn note off
   MIDInoteOFF(note, 0); 
  } 
 }
}

Controller code: ControlBox

End Unit code: PlayingBox 

(note: for each End Unit Id and Note variables should be adjusted, and LED colors can be changed)

Parts of the code are based on code written by:

Amanda Ghassaei (MIDI On/Off Messages) http://www.instructables.com/id/Send-and-Receive-MIDI-with-Arduino/
And James Coliz, Jr. <maniacbug@ymail.com> RF24Network