[PD-cvs] externals/hardware/arduino/Pd_firmware Pd_firmware.pde, 1.3, 1.4
Hans-Christoph Steiner
eighthave at users.sourceforge.net
Sat May 20 17:29:50 CEST 2006
Update of /cvsroot/pure-data/externals/hardware/arduino/Pd_firmware
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2211/Pd_firmware
Modified Files:
Pd_firmware.pde
Log Message:
its messy, but digital output and PWM now work at the same time
Index: Pd_firmware.pde
===================================================================
RCS file: /cvsroot/pure-data/externals/hardware/arduino/Pd_firmware/Pd_firmware.pde,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Pd_firmware.pde 20 May 2006 10:18:14 -0000 1.3
--- Pd_firmware.pde 20 May 2006 15:29:48 -0000 1.4
***************
*** 20,25 ****
* Pd->Arduino commands
* --------------------
! * 200-213 - set digital pin 0-13 to output
! * 214-227 - set digital pin 0-13 to input
* 230 - next byte sets PWM0 value
* 231 - next byte sets PWM1 value
--- 20,25 ----
* Pd->Arduino commands
* --------------------
! * 200-213 - set digital pin 0-13 to INPUT
! * 214-227 - set digital pin 0-13 to OUTPUT
* 230 - next byte sets PWM0 value
* 231 - next byte sets PWM1 value
***************
*** 67,72 ****
#define PWM 2
! // this flag says the next serial input will be data, not control
! boolean waitForData = false;
// this flag says the first data byte for the digital outs is next
--- 67,72 ----
#define PWM 2
! // this flag says the next serial input will be PWM data
! byte waitForPWMData = 0;
// this flag says the first data byte for the digital outs is next
***************
*** 130,135 ****
}
else if( (mode == PWM) && (pin >= 9) && (pin <= 11) ) {
! digitalPinStatus = digitalPinStatus &~ (1 << pin);
pwmStatus = pwmStatus | (1 << pin);
}
}
--- 130,136 ----
}
else if( (mode == PWM) && (pin >= 9) && (pin <= 11) ) {
! digitalPinStatus = digitalPinStatus | (1 << pin);
pwmStatus = pwmStatus | (1 << pin);
+ pinMode(pin,OUTPUT);
}
}
***************
*** 139,143 ****
if(serialAvailable()) {
while(serialAvailable()) {
! processInput(serialRead());
}
}
--- 140,144 ----
if(serialAvailable()) {
while(serialAvailable()) {
! processInput( (byte)serialRead() );
}
}
***************
*** 145,163 ****
// -------------------------------------------------------------------------
! void processInput(int inputData) {
// the PWM commands (230-232) have a byte of data following the command
! if (waitForData > 0) {
printByte(150);
printByte(inputData);
! analogWrite(waitForData,inputData);
! waitForData = 0;
}
! else if(inputData < 128) {
printByte(151);
! printByte(inputData);
! // TODO: this section is for digital out...
}
else {
! printByte(153);
switch (inputData) {
case 200:
--- 146,208 ----
// -------------------------------------------------------------------------
! void processInput(byte inputData) {
! byte i;
! int mask;
! // byte writeTest;
! // byte highDigitalPinStatus;
!
// the PWM commands (230-232) have a byte of data following the command
! if (waitForPWMData > 0) {
printByte(150);
printByte(inputData);
! analogWrite(waitForPWMData,inputData);
! waitForPWMData = 0;
}
! else if(inputData < 128) {
printByte(151);
! if(firstInputByte) {
! printByte(160);
! printByte(inputData);
! // TODO: this section is for digital out...
! for(i=0; i<7; ++i) {
! mask = 1 << i;
! /* writeTest = digitalPinStatus;
! // writeTest = writeTest & mask;
! // printByte(writeTest);
! // if(writeTest) {
! // or
! /* if((byte)digitalPinStatus & mask) {
! // digitalWrite(i,(inputData & mask) >> i);
! printByte(254);
! printByte(i);
! printByte(mask);
! printByte(inputData & mask);
! } */
! }
! firstInputByte = false;
! }
! else {
! printByte(161);
! printByte(inputData);
! // output data for pins 7-13
! //highDigitalPinStatus = digitalPinStatus >> 7;
! for(i=7; i<TOTAL_DIGITAL_PINS; ++i) {
! mask = 1 << i;
! printByte(254);
! printByte(i);
! printByte(mask);
! // if(digitalPinStatus & mask) {
! // need to add test for pwmStatus
! if( (digitalPinStatus & mask) && !(pwmStatus & mask) ) {
! digitalWrite(i, inputData & (mask >> 7));
! printByte(inputData & (mask >> 7));
! // printByte(highDigitalPinStatus & mask);
! }
! }
! }
}
else {
! printByte(152);
! printByte(inputData);
switch (inputData) {
case 200:
***************
*** 175,180 ****
case 212:
case 213:
! printByte(inputData);
! setPinMode(inputData-200,OUTPUT);
break;
case 214:
--- 220,224 ----
case 212:
case 213:
! setPinMode(inputData-200,INPUT);
break;
case 214:
***************
*** 192,206 ****
case 226:
case 227:
! printByte(inputData);
! setPinMode(inputData-214,INPUT);
break;
case 230:
case 231:
case 232:
! printByte(inputData);
! waitForData = inputData - 221; // set waitForData to the PWM pin number
! setPinMode(waitForData, PWM);
break;
case 255:
break;
}
--- 236,249 ----
case 226:
case 227:
! setPinMode(inputData-214,OUTPUT);
break;
case 230:
case 231:
case 232:
! waitForPWMData = inputData - 221; // set waitForPWMData to the PWM pin number
! setPinMode(waitForPWMData, PWM);
break;
case 255:
+ firstInputByte = true;
break;
}
***************
*** 223,228 ****
void loop() {
// read all digital pins
! transmitDigitalInput(0);
! transmitDigitalInput(7);
/*
* get analog in
--- 266,271 ----
void loop() {
// read all digital pins
! //transmitDigitalInput(0);
! //transmitDigitalInput(7);
/*
* get analog in
***************
*** 242,250 ****
// bitshift the big stuff into the output byte
printByte(digitalPinStatus >> 7);
! // clear the 8th bit before truncating to a byte for small byte
printByte(digitalPinStatus % 128);
checkForInput();
! printByte(255);
}
--- 285,298 ----
// bitshift the big stuff into the output byte
printByte(digitalPinStatus >> 7);
! // clear the 8th bit before truncating to a byte for small data byte
printByte(digitalPinStatus % 128);
+ printByte(pwmStatus >> 7);
+ printByte(pwmStatus % 128);
+
checkForInput();
! printByte(255);
! setPinMode(13,OUTPUT);
! digitalWrite(13,HIGH);
}
More information about the Pd-cvs
mailing list