Jump to content

Send nulls and any binary value via MSComm control


 Share

Recommended Posts

I've tried to send 4 byte message via MSComm control VB and in AutoIt.  Message is "*A<msb><lsb>".  This code works in VB with any value 0 or 1 in msb, and 0 to 255 in lsb.

  .Output = "*A" & Chr(0) & Chr(ix)

 

In AutoIt this works, but not if either byte is zero, and not if lsb is 1.

$sAxName = "MSCOMMLib.MSComm.1"
$obj = ObjCreate($sAxName)

With $obj
    .CommPort = 31
    .Settings = "9600,N,8,1"
    .PortOpen = True
    .NullDiscard = False
    .NullDiscard = True
    .HandShaking = 0
    .InputMode = 1
    .DTREnable = True
    .EOFEnable = False
    .RTSEnable = True
EndWith
 
For $iCnt = 0 To 15
    With $obj
        .NullDiscard = False
        $sMsg = "*A"  & Chr(0) & Chr(Int($iCnt))
       .Output = $sMsg
        If $iCnt < 3 then
            MsgBox(0, Default, $iCnt)
        EndIf
    EndWith
    Sleep(200)
Next

You might expect .NullDiscard to be relevant.  The VB works with this true or false, and I've tried both in AutoIt.  It's possible that I have some other property different, but I've looked through them all.

I wonder if AutoIt is passing the whole string to the control, or stopping at the zero.  I can't think how to prove that either way.

Chr(Int($iCnt)) works correctly for values > 2, but for 1 it doesn't do the same as Chr(1) - what am I missing here?

Edited by RichardL
Link to comment
Share on other sites

Alright, you can't use a string with nulls in it.  But you can use 'Binary' and the code below sends a 16 bit number via serial to Arduino.

#cs
Test program for sending message to Arduino.
Message is *A followed by 16 bit binary number, total 4 bytes.
This sends a sequence of numbers from 0 to 256
#ce

Opt("MustDeclareVars", 1)

Local $Msg
Local $sAxName
Local $obj

$sAxName = "MSCOMMLib.MSComm.1"
$obj = ObjCreate($sAxName)

With $obj
    .CommPort = 31
    .Settings = "9600,N,8,1"
    .NullDiscard = False
    .NullDiscard = True
    .HandShaking = 0
    ;.InBufferSize = 50
    ;.OutBufferSize = 50
    .InputMode = 0
    .DTREnable = True
    .EOFEnable = False
    .RTSEnable = True
    .PortOpen = True
EndWith
Sleep(50)

;For $iCnt = 0x100 To 0 Step - 1
For $iCnt = 0 To 0x100
    With $obj
        .NullDiscard = False
        $Msg = Binary("*A"  & Chr(BitShift($iCnt, 8)) & Chr(BitAND($iCnt, 0xFF)))
        .Output = $Msg
    EndWith
    Sleep(50)
Next

With $obj
    .PortOpen = False
EndWith
Link to comment
Share on other sites

I would like to use AutoIt to speak to an Arduino but I don't know much about it.  An Arduino UDF would be purely awesome for us physical computing newbies.

https://esto-es-un-proyecto.googlecode.com/files/funciones%20nativas.rar

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

BrewManNH - that is too cool!  :D

Has that been published here before?  I have searched the forum for Arduino and could not find anything.  I appreciate the sharing.  I would love to get some folks posting some threads on examples and designs.  Thanks for sharing.

Build your own poker game with AutoIt: pokerlogic.au3 | Learn To Program Using FREE Tools with AutoIt

Link to comment
Share on other sites

That was linked to from the Examples scripts section, I haven't used it before, but it looks interesting

'?do=embed' frameborder='0' data-embedContent>>

This one is a GUI to use when programming the arduino

'?do=embed' frameborder='0' data-embedContent>>

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

Thanks for your comments.  The serial protocol I'm using is very simple, copied from here.  I found that it didn't recover if it became out of step, so I made it discard anything that didn't comply.  Really it needs to use acknowledgement and 'please repeat' replies.

       Arduino...
        while ( Serial.peek() != '*'){Serial.read();}
        // do we still have enough for a message?
        if ( Serial.available() >= 4 )
        {
            // this probably has to be true now
            if( Serial.read() == '*' )
            {
                tag = Serial.read();
                if( tag == 'A' )
                {
                    x = Serial.read() * 256;
                    x = x + Serial.read();
                    digitalWrite( 13 , H );
                    delay( 5 );
                    digitalWrite( 13, L );
                    delay( 5 );
                    updateLEDs( x );
                    delay( 10 );
                }
            }
        }

 
Link to comment
Share on other sites

RichardL, I have an embarrassing question as a complete Arduino newb :>.  I grabbed the link for the arduino.au3 file above and the blink example included therein.  I used my Ardunio to attach an led to the digital port 13 and changed the blink example as follows:

#include <arduino.au3>
conecta(7,9600)

While 1
    digitalwrite(13,1)
    Sleep(1000)
    digitalwrite(13,0)
    Sleep(1000)
WEnd

I know I am on port 7 because I checked it in the device manager.  One pin for the LED is in 13 and one is in GRND.  The LED is lit up - but it does not blink.  Can you tell me what I am doing wrong?

Build your own poker game with AutoIt: pokerlogic.au3 | Learn To Program Using FREE Tools with AutoIt

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...