คือผมทำโปรเจ็ค
http://www.idea2ic.com/BiCmosCurveTracer/Arduino%20BiCmos%20Curve%20Tracer.pdf ครับ
ต่อวงจรเสร็จเรียบร้อยและ รันโค้ดที่ Arduino ผ่าน เลยมารันต่อที่โปรแกรม Processing โค้ดก็รันผ่านนะครับ
แต่ติดปัญหาตรงที่ ตามในโค้ดให้กด S เพื่อ Start พอกดแล้วมันขึ้นข้างล่างสีแดงๆว่า "Error, disabling serialEvent() for COM3 null" ครับ
เลยสงสัยว่าจุดที่มีปัญหามันเกิดจากการที่ผมต่อวงจรผิดหรือโค้ดผิดอะครับ ช่วยทีนะครับ
อันนี้เป็นโค้ดที่รันผ่านโปรแกรม Arduino ครับ
int tri = 5; // TriAngle Wave at D5
int vg = 3; // Voltage step port at D3
int j = 0; // Tri value
int k = 0; // Step Value
int slope = 4;
int incomingByte; // read incoming serial data into
void setup()
{ Serial.begin( 9600); // initialize serial communication:
pinMode( tri, OUTPUT); pinMode( vg, OUTPUT);
} // setup
void loop()
{ if (Serial.available() > 0) // see if incoming serial data:
{ incomingByte = Serial.read(); // read oldest byte in serial buffer:
} // if (Serial.available() > 0)
if (incomingByte == 'H') // if H (ASCII 72), printoutput
{ delay( 10);
j = j+slope;
analogWrite( tri, j); // will be PWM 488 Hz
analogWrite( vg, k); // will be PWM 488 Hz Serial.print( analogRead(0)); // read current at A0 Serial.print( " ");
Serial.println( analogRead(1)); // read tri voltage at A1 delay( 10); // to stabilize adc:
if (j > 251) slope = -4 ;
if (j < 1)
{ slope = 4 ; k = k + int(255/5);
} // if (j > 251) slope = -4 ;
if (k > 255 ) k = 0 ;
} // if (incomingByte == 'H')
} // loop()
อันนี้เป็นโค้ด Java ที่ใช้ในโปรแกรม Processing ครับ
import processing.serial.*;
PrintWriter output; // output file
Serial myPort; // The serial port
int xPos = 1; // hor position graph
void setup ()
{ size( 300, 300); // set the window size:
println( Serial.list()); // List serial ports
myPort = new Serial(this, Serial.list()[0], 9600 ); // initialize to 9600 baud
myPort.bufferUntil('\n'); // serialEvent() @ \n:
background( 0); // set inital background:
println( "Click on image and hit s to start"); // will start serial data
println( "Hit w to write to file"); // dump to file ad stop
String file = String.valueOf(year());
file = file +"."+String.valueOf(month());
file = file +"."+String.valueOf(day());
file = file +"."+String.valueOf(hour());
file = file +"."+String.valueOf(minute());
file = file +"."+String.valueOf(second())+".mat";
println( file);
output = createWriter(file); // Sketch->Show_Sketch_fie
} // setup
void draw ()
{ if( keyPressed)
{ if (key == 's' || key == 'S')
{ myPort.write( "H");
} //if (key == 's' || key == 'S')
if (key == 'w' || key == 'W')
{ output.flush(); // Writes the remaining data to the file
output.close(); // Finishes the file
exit(); // Stops the program
} // if (key == 'w' || key == 'W')
} // if( keyPressed)
} // draw ()
void serialEvent (Serial myPort)
{ String inString = myPort.readStringUntil('\n'); // get the ASCII string:
if (inString != null)
{ inString = trim(inString); // trim whitespace:
int[] vv = int(split(inString, ' '));
// println( inString );
output.println( inString );
float val0 = float(vv[0]);
float val1 = float(vv[1]);
val0 = map(val0, 0, 1023, 0, height*.95);
val1 = map(val1, 0, 1023, 0, height*.95);
stroke( 127,34,255); // color to draw
line( val1, height - val0-1, val1+1, height - val0); // draw the line:
if (xPos >= 6*width)
{ xPos = 0; // auto redraw
background( 0);
} // if (xPos >= 2*width)
else
{ xPos= xPos+1;
} // else
} // if (inString != null)
} // serialEvent (Serial myPort)
สอบถามปัญหา Error, disabling serialEvent() for COM3 null
ต่อวงจรเสร็จเรียบร้อยและ รันโค้ดที่ Arduino ผ่าน เลยมารันต่อที่โปรแกรม Processing โค้ดก็รันผ่านนะครับ
แต่ติดปัญหาตรงที่ ตามในโค้ดให้กด S เพื่อ Start พอกดแล้วมันขึ้นข้างล่างสีแดงๆว่า "Error, disabling serialEvent() for COM3 null" ครับ
เลยสงสัยว่าจุดที่มีปัญหามันเกิดจากการที่ผมต่อวงจรผิดหรือโค้ดผิดอะครับ ช่วยทีนะครับ
อันนี้เป็นโค้ดที่รันผ่านโปรแกรม Arduino ครับ
int tri = 5; // TriAngle Wave at D5
int vg = 3; // Voltage step port at D3
int j = 0; // Tri value
int k = 0; // Step Value
int slope = 4;
int incomingByte; // read incoming serial data into
void setup()
{ Serial.begin( 9600); // initialize serial communication:
pinMode( tri, OUTPUT); pinMode( vg, OUTPUT);
} // setup
void loop()
{ if (Serial.available() > 0) // see if incoming serial data:
{ incomingByte = Serial.read(); // read oldest byte in serial buffer:
} // if (Serial.available() > 0)
if (incomingByte == 'H') // if H (ASCII 72), printoutput
{ delay( 10);
j = j+slope;
analogWrite( tri, j); // will be PWM 488 Hz
analogWrite( vg, k); // will be PWM 488 Hz Serial.print( analogRead(0)); // read current at A0 Serial.print( " ");
Serial.println( analogRead(1)); // read tri voltage at A1 delay( 10); // to stabilize adc:
if (j > 251) slope = -4 ;
if (j < 1)
{ slope = 4 ; k = k + int(255/5);
} // if (j > 251) slope = -4 ;
if (k > 255 ) k = 0 ;
} // if (incomingByte == 'H')
} // loop()
อันนี้เป็นโค้ด Java ที่ใช้ในโปรแกรม Processing ครับ
import processing.serial.*;
PrintWriter output; // output file
Serial myPort; // The serial port
int xPos = 1; // hor position graph
void setup ()
{ size( 300, 300); // set the window size:
println( Serial.list()); // List serial ports
myPort = new Serial(this, Serial.list()[0], 9600 ); // initialize to 9600 baud
myPort.bufferUntil('\n'); // serialEvent() @ \n:
background( 0); // set inital background:
println( "Click on image and hit s to start"); // will start serial data
println( "Hit w to write to file"); // dump to file ad stop
String file = String.valueOf(year());
file = file +"."+String.valueOf(month());
file = file +"."+String.valueOf(day());
file = file +"."+String.valueOf(hour());
file = file +"."+String.valueOf(minute());
file = file +"."+String.valueOf(second())+".mat";
println( file);
output = createWriter(file); // Sketch->Show_Sketch_fie
} // setup
void draw ()
{ if( keyPressed)
{ if (key == 's' || key == 'S')
{ myPort.write( "H");
} //if (key == 's' || key == 'S')
if (key == 'w' || key == 'W')
{ output.flush(); // Writes the remaining data to the file
output.close(); // Finishes the file
exit(); // Stops the program
} // if (key == 'w' || key == 'W')
} // if( keyPressed)
} // draw ()
void serialEvent (Serial myPort)
{ String inString = myPort.readStringUntil('\n'); // get the ASCII string:
if (inString != null)
{ inString = trim(inString); // trim whitespace:
int[] vv = int(split(inString, ' '));
// println( inString );
output.println( inString );
float val0 = float(vv[0]);
float val1 = float(vv[1]);
val0 = map(val0, 0, 1023, 0, height*.95);
val1 = map(val1, 0, 1023, 0, height*.95);
stroke( 127,34,255); // color to draw
line( val1, height - val0-1, val1+1, height - val0); // draw the line:
if (xPos >= 6*width)
{ xPos = 0; // auto redraw
background( 0);
} // if (xPos >= 2*width)
else
{ xPos= xPos+1;
} // else
} // if (inString != null)
} // serialEvent (Serial myPort)