[PD-cvs] externals/hardware/arduino/Pd_firmware Pd_firmware.pde, 1.21, 1.22

Hans-Christoph Steiner eighthave at users.sourceforge.net
Wed Dec 6 04:29:08 CET 2006


Update of /cvsroot/pure-data/externals/hardware/arduino/Pd_firmware
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2374/Pd_firmware

Modified Files:
	Pd_firmware.pde 
Log Message:

- fixed up help file so that everything loads with Pd-extended
- fixed up [arduino] so that everything loads with Pd-extended
- started to clean up the firmware and wrote lots of TODOs 


Index: Pd_firmware.pde
===================================================================
RCS file: /cvsroot/pure-data/externals/hardware/arduino/Pd_firmware/Pd_firmware.pde,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** Pd_firmware.pde	31 Oct 2006 00:39:07 -0000	1.21
--- Pd_firmware.pde	6 Dec 2006 03:29:06 -0000	1.22
***************
*** 46,49 ****
--- 46,50 ----
   * TODO: add "pinMode all 0/1" command
   * TODO: add cycle markers to mark start of analog, digital, pulseIn, and PWM
+  * TODO: convert to MIDI protocol using SysEx for longer messages
   */
  
***************
*** 54,59 ****
   * software can test whether it will be compatible with the currently
   * installed firmware. */
! #define MAJOR_VERSION 0
! #define MINOR_VERSION 2
  
  /* firmata protocol
--- 55,60 ----
   * software can test whether it will be compatible with the currently
   * installed firmware. */
! #define MAJOR_VERSION 0  // for non-compatible changes
! #define MINOR_VERSION 3  // for backwards compatible changes
  
  /* firmata protocol
***************
*** 113,122 ****
  /* 230-239 // UNASSIGNED */
  #define REPORT_VERSION          240 // return the firmware version
! /* 240-249 // UNASSIGNED */
  #define DISABLE_PWM             250 // next byte sets pin # to disable
  #define ENABLE_PWM              251 // next two bytes set pin # and duty cycle
! #define DISABLE_SOFTWARE_PWM    252 // next byte sets pin # to disable
! #define ENABLE_SOFTWARE_PWM     253 // next two bytes set pin # and duty cycle
! #define SET_SOFTWARE_PWM_FREQ   254 // set master frequency for software PWMs
  /* 255 // UNASSIGNED */
  
--- 114,122 ----
  /* 230-239 // UNASSIGNED */
  #define REPORT_VERSION          240 // return the firmware version
! /* 240-248 // UNASSIGNED */
! #define SET_PIN_STATE           249 // set a digital pit to INPUT or OUTPUT
  #define DISABLE_PWM             250 // next byte sets pin # to disable
  #define ENABLE_PWM              251 // next two bytes set pin # and duty cycle
! #define RESET                   254 // reset if receive 8 of these bytes
  /* 255 // UNASSIGNED */
  
***************
*** 124,136 ****
  /* two byte digital output data format
   * ----------------------
!  * 0  get ready for digital input bytes (229)
   * 1  digitalOut 7-13 bitmask 
   * 2  digitalOut 0-6 bitmask
   */
  
! /* two byte PWM data format
   * ----------------------
!  * 0  get ready for digital input bytes (ENABLE_SOFTWARE_PWM/ENABLE_PWM)
!  * 1  pin #
   * 2  duty cycle expressed as 1 byte (255 = 100%)
   */
--- 124,136 ----
  /* two byte digital output data format
   * ----------------------
!  * 0  set digital output bytes (229/OUTPUT_TO_DIGITAL_PINS)
   * 1  digitalOut 7-13 bitmask 
   * 2  digitalOut 0-6 bitmask
   */
  
! /* control PWM 
   * ----------------------
!  * 0  send digital input bytes (ENABLE_PWM)
!  * 1  pin # (0-127)
   * 2  duty cycle expressed as 1 byte (255 = 100%)
   */
***************
*** 150,153 ****
--- 150,194 ----
   */
  
+ /* version report format
+  * Send a single byte 240, Arduino will reply with:
+  * ----------------------
+  * 0  version report header (240)
+  * 1  major version (0-127)
+  * 2  minor version (0-127)
+  */
+ 
+ /* PROPOSED PROTOCOL ADDITIONS */
+ 
+ /* set digital pin state (249/SET_PIN_STATE)
+  * ----------------------
+  * 0  set digital pin state
+  * 1  pin number (0-127)
+  * 2  state (OUTPUT/INPUT, 0/1) */
+ 
+ /* toggle analogIn reporting (249/SET_PIN_STATE)
+  * ----------------------
+  * 0  analogIn reporting mode
+  * 1  pin number (0-127)
+  * 2  state (0/1)
+  */
+ 
+ /* control PWM 14-bit
+  * ----------------------
+  * 0  send digital input bytes (ENABLE_PWM)
+  * 1  pin # (0-127)
+  * 2  duty cycle, high bits (8-13)
+  * 3  duty cycle, low bits (0-7)
+  */
+ 
+ 
+ /* pulseIn (uses 32-bit value)
+  * ----------------------
+  * 0  pulseIn
+  * 1  bits 24-31 (most significant byte)
+  * 2  bits 16-23
+  * 3  bits 8-15
+  * 4  bits 0-7 (least significant byte)
+  */
+ 
  #define TOTAL_DIGITAL_PINS 14
  
***************
*** 182,185 ****
--- 223,227 ----
  
  boolean digitalInputsEnabled = true;
+ // TODO: convert this to a bit array int, 1=report, 0=no report
  byte analogInputsEnabled = 6;
  
***************
*** 274,283 ****
  				setPinMode(storedInputData[0],INPUT);
  				break;
- 			case ENABLE_SOFTWARE_PWM:
- 				break; 
- 			case DISABLE_SOFTWARE_PWM:
- 				break;
- 			case SET_SOFTWARE_PWM_FREQ:
- 				break;
  			}
  			executeMultiByteCommand = 0;
--- 316,319 ----
***************
*** 307,310 ****
--- 343,380 ----
  	else {
  		switch (inputData) {
+ 		case REPORT_VERSION:
+ 			Serial.print(REPORT_VERSION, BYTE);
+ 			Serial.print(MAJOR_VERSION, BYTE);
+ 			Serial.print(MINOR_VERSION, BYTE);
+ 			break;
+ 		case ENABLE_PWM:
+ 			waitForData = 2;  // 2 bytes needed (pin#, dutyCycle) 
+ 			executeMultiByteCommand = inputData;
+ 			break;
+ 		case DISABLE_PWM:
+ 			waitForData = 1;  // 1 byte needed (pin#)
+ 			executeMultiByteCommand = inputData;
+ 			break;      
+ 		case OUTPUT_TO_DIGITAL_PINS:   // bytes to send to digital outputs
+ 			firstInputByte = true;
+ 			break;
+ 		case DISABLE_DIGITAL_INPUTS:   // all digital inputs off
+ 			digitalInputsEnabled = false;
+ 			break;
+ 		case ENABLE_DIGITAL_INPUTS:    // all digital inputs on
+ 			digitalInputsEnabled = true;
+ 			break;
+ 		case ZERO_ANALOG_INS:   // analog input off
+ 		case ONE_ANALOG_IN:     // analog 0 on  
+ 		case TWO_ANALOG_INS:    // analog 0,1 on  
+ 		case THREE_ANALOG_INS:  // analog 0-2 on  
+ 		case FOUR_ANALOG_INS:   // analog 0-3 on  
+ 		case FIVE_ANALOG_INS:   // analog 0-4 on  
+ 		case SIX_ANALOG_INS:    // analog 0-5 on  
+ 		case SEVEN_ANALOG_INS:  // analog 0-6 on  
+ 		case EIGHT_ANALOG_INS:  // analog 0-7 on  
+ 		case NINE_ANALOG_INS:   // analog 0-8 on  
+ 			analogInputsEnabled = inputData - ZERO_ANALOG_INS;
+ 			break;
  		case SET_PIN_ZERO_TO_IN:       // set digital pins to INPUT
  		case SET_PIN_ONE_TO_IN:
***************
*** 339,388 ****
  			setPinMode(inputData - SET_PIN_ZERO_TO_OUT, OUTPUT);
  			break;
- 		case DISABLE_DIGITAL_INPUTS:   // all digital inputs off
- 			digitalInputsEnabled = false;
- 			break;
- 		case ENABLE_DIGITAL_INPUTS:    // all digital inputs on
- 			digitalInputsEnabled = true;
- 			break;
- 		case ZERO_ANALOG_INS:   // analog input off
- 		case ONE_ANALOG_IN:     // analog 0 on  
- 		case TWO_ANALOG_INS:    // analog 0,1 on  
- 		case THREE_ANALOG_INS:  // analog 0-2 on  
- 		case FOUR_ANALOG_INS:   // analog 0-3 on  
- 		case FIVE_ANALOG_INS:   // analog 0-4 on  
- 		case SIX_ANALOG_INS:    // analog 0-5 on  
- 		case SEVEN_ANALOG_INS:  // analog 0-6 on  
- 		case EIGHT_ANALOG_INS:  // analog 0-7 on  
- 		case NINE_ANALOG_INS:   // analog 0-8 on  
- 			analogInputsEnabled = inputData - ZERO_ANALOG_INS;
- 			break;
- 		case ENABLE_PWM:
- 			waitForData = 2;  // 2 bytes needed (pin#, dutyCycle) 
- 			executeMultiByteCommand = inputData;
- 			break;
- 		case DISABLE_PWM:
- 			waitForData = 1;  // 1 byte needed (pin#)
- 			executeMultiByteCommand = inputData;
- 			break;      
- 		case SET_SOFTWARE_PWM_FREQ:
- 			waitForData = 1;  // 1 byte needed (pin#)
- 			executeMultiByteCommand = inputData;
- 			break;
- 		case ENABLE_SOFTWARE_PWM:
- 			waitForData = 2;  // 2 bytes needed (pin#, dutyCycle) 
- 			executeMultiByteCommand = inputData;
- 			break;
- 		case DISABLE_SOFTWARE_PWM:
- 			waitForData = 1;  // 1 byte needed (pin#)
- 			executeMultiByteCommand = inputData;
- 			break;
- 		case OUTPUT_TO_DIGITAL_PINS:   // bytes to send to digital outputs
- 			firstInputByte = true;
- 			break;
- 		case REPORT_VERSION:
- 			Serial.print(REPORT_VERSION, BYTE);
- 			Serial.print(MAJOR_VERSION, BYTE);
- 			Serial.print(MINOR_VERSION, BYTE);
- 			break;
  		}
  	}
--- 409,412 ----
***************
*** 398,401 ****
--- 422,427 ----
  // TODO: load state from EEPROM here
  
+ 	Serial.begin(115200);	
+ 
  /* TODO: send digital inputs here, if enabled, to set the initial state on the
   * host computer, since once in the loop(), the Arduino will only send data on
***************
*** 413,417 ****
  		setPinMode(i,INPUT);
  	}
- 	Serial.begin(115200);	
  }
  
--- 439,442 ----





More information about the Pd-cvs mailing list