Problem with serial interface on windows

Status
Not open for further replies.

Catherine

Member
I'm running the following code on my Teensy LC:

Code:
void setup()
{
  Serial.begin(9600); 
}

void loop()
{
  char inByte = Serial.read();
  // don't print character if not printable
  if(inByte>33)
  {
    Serial.print(inByte);
  }
}

In the serial monitor, if I type in any characters, I get the error:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExceptionat processing.app.Serial.write(Serial.java:191)
	at processing.app.Serial.write(Serial.java:211)
	at processing.app.TeensyMonitor.send(TeensyMonitor.java:95)
	at processing.app.TeensyMonitor.access$100(TeensyMonitor.java:36)
	at processing.app.TeensyMonitor$2.actionPerformed(TeensyMonitor.java:72)
	at javax.swing.JTextField.fireActionPerformed(JTextField.java:508)
	at javax.swing.JTextField.postActionEvent(JTextField.java:721)
	at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836)
	at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)
	at javax.swing.JComponent.processKeyBinding(JComponent.java:2882)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2929)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
	at java.awt.Component.processEvent(Component.java:6312)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4891)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4713)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
	at java.awt.Component.dispatchEventImpl(Component.java:4762)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Window.dispatchEventImpl(Window.java:2750)
	at java.awt.Component.dispatchEvent(Component.java:4713)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Assuming this is a problem with the Arduino IDE serial implementation, I'd like to move away from the Arduino IDE serial monitor. However, the teensy LC does not show up as a COM port.

Here is where I get very confused... a friend of mine swears that he's used the teensy LC on windows through a traditional com interface, but reading this thread: https://forum.pjrc.com/threads/32862-HID-device-to-COM-Port it seems like it should not enumerate as a COM port.

I've run the serial_installer.exe file several times, as administrator, but the device still does not show up as a COM port. I can see it under HID devices. If I had the *.inf file, I could force it to use that, but I can't find this file anywhere.

I'm using Windows Vista and Arduino 1.6.7.
 
Didn't read all, but search for tyqt on the forum


Thanks, so the tyqt serial monitor works without the issues of the Arduino IDE serial monitor.

However, I still need a COM port if I want to control the teensy via python.

Or else I could use the tyqt source code and reverse engineer the HID emulator in python.
 
On windows, I use Visual Micro + Visual Studio. Both are free.
This combo has a multi-port serial monitor that is very well done
  • Each in a window
  • Each window can be positioned as a pane alongside the editing window
  • Multiple serial monitors can be placed horizontally or vertically
  • All serial monitor windows are inside the main project window and not just tossed onto the desktop screen
  • Window placements are saved/restored automatically on next use
  • Each serial monitor has automatic disconnect and reconnect - when the port comes and goes
  • During downloading to a particular serial, hardware or USB serial, the serial monitor automatically closes and reconnects after download
  • Very nice scrolling strategy... to freeze the scrolling, click in the text display. To resume scrolling as text streams in, click a button.
  • Works with Teensy and Teensy's loader
  • Integrated with the Visual Studio IDE and Visual Micro which is a plug-in
 
Last edited:
If you get the serial monitor working in TYQT - under the information tab it will identify the named port - you have a serial COM port - if defined in the IDE under "Tools / USB Type". But if you have the serial monitor open it owns that com port until you close it. In TYQT - you can click the 'Monitor' button and have it disconnect from the com port and then it would be free for other use.
 
@Catherine: Also You might look at : examples\Teensy\Serial\EchoBoth :: under Examples \ Teensy \ Serial.

It shows an "int" for .read():

Code:
        int incomingByte;
	incomingByte = HWSERIAL.read();

Versus the above use of:

Code:
  char inByte = Serial.read();

I was doing some serial transfers not using an int and seeing it odd.

Also putting a conditional delay after the .begin() for the Serial to connect may help someday:
Code:
  Serial.begin(9600);
  while (!Serial && (millis () <= 3000))
    ;
 
@Catherine: Also You might look at : examples\Teensy\Serial\EchoBoth :: under Examples \ Teensy \ Serial.

It shows an "int" for .read():

Code:
        int incomingByte;
	incomingByte = HWSERIAL.read();

Versus the above use of:

Code:
  char inByte = Serial.read();

I was doing some serial transfers not using an int and seeing it odd.

Also putting a conditional delay after the .begin() for the Serial to connect may help someday:
Code:
  Serial.begin(9600);
  while (!Serial && (millis () <= 3000))
    ;

I've switched to running this code:

Code:
/* UART Example, any character received on either the real
   serial port, or USB serial (or emulated serial to the
   Arduino Serial Monitor when using non-serial USB types)
   is printed as a message to both ports.

   This example code is in the public domain.
*/

// set this to the hardware serial port you wish to use
#define HWSERIAL Serial1

void setup() {
	Serial.begin(9600);
 while (!Serial && (millis () <= 3000));
        HWSERIAL.begin(38400);
}

void loop() {
        int incomingByte;
        
	if (Serial.available() > 0) {
		incomingByte = Serial.read();
		Serial.print("USB received: ");
		Serial.println(incomingByte, DEC);
                HWSERIAL.print("USB received:");
                HWSERIAL.println(incomingByte, DEC);
	}
	if (HWSERIAL.available() > 0) {
		incomingByte = HWSERIAL.read();
		Serial.print("UART received: ");
		Serial.println(incomingByte, DEC);
                HWSERIAL.print("UART received:");
                HWSERIAL.println(incomingByte, DEC);
	}
}

Same behaviour - does not show up as a COM port. I'm 99% sure this is a windows driver issue.
 
Do you compile with the Arduino IDE or an other IDE ?
If Arduino, set "USB TYPE" to serial, other make sure that the IDE you use sets the #define USB_SERIAL (in the makefile?)

During programming, the serial port disappears.
 
I'm looking back at my post #5 If you get the serial monitor working in TYQT - under the information tab it will identify the named port . . .

If TYQT was working as expected and allowing you to send and receive it was picking up a COM/USB port for the Teensy - with updated code from post #7?

Then on TYQT information tab in the "Interfaces" section will specify any associated COM port. But unless you click the 'Monitor' button (to gray it) it will consume the COM port - keeping it from Python.
 
Status
Not open for further replies.
Back
Top