The application HAL

HAL, the link with the outside world

Without the HAL (Hardware Abstraction Layer) communicate with sensors and actuators would be difficult. For each type of sensor you should write a piece of firmware (like you do with Arduino) and ind each new variation of sensors, You should rewrite the firmware.

It would also be very difficult, achieve performance, that can be reached with our firmware, and our HAL (We work from 3 years, ten hours a day, including holidays – make over ten thousand hours, MICA peanuts!)

We were asked “How come you have to use the HAL ?”

The HAL should be used if you need to access your hardware via USB. In theory it is not absolutely necessary, but We did not find a better system. For those wishing to try, Here's the information you need:

Why not expose mechanisms to guide the HAL from the outside?

How many functions you hang, would be missing something (such as charts of the oscilloscope, the configurations, automatic reconnection, the calibration…). But suppose someone, pharaonic work, come to control all functions of the HAL. The result would be only, he recreated a clone of HAL, in a different application.

As already written in the previous paragraph, If someone wants to try, take a seat.

How to use the HAL

The HAL can open and close by itself transparently. All applications that need it, the open and close their own. Normally the HAL open minimized and does not bother. But when you need it, You can open his window which is very useful, to make comfortable adjustments, and try the sensors. Then it minimizes again, so the next time you will get minimized.

How to open and close the HAL from within an application is explained here:

And if an application is not able to open and close the HAL?

In this case prepares a folder with your application, the HAL and a file “Start All”, as explained here:

  1. Alessio says:

    Hello Luke,

    You can download a small program that we did to help you, in essence the program launches HAL select pin 1 with ADC_16 slot 0 Pin 2 with ADC_16 slot 1, Remember to send a maximum voltage of input 3,3 V (in the event that major uses a resistive divider) then launch the program Theremino_log and start with the single button capture.

    He will write on C: a file called "log.csv" will date,now,value pin1, pin2 value every second. The reading is from 0 to 1000 on a scale of 0 to 3,3 V .

    Remember that the program will continue to write to the log file, so if you want you can rename, He will recreate another.

    Hope I've done something to please for anything please call me or Livius , Let us help you.

    Hello Alessio.

    • Joseph says:

      The reading is from 0 to 1000 on a scale of 0 to 3,3 V

      right now I can't remember and I have no way to verify if the values between 0 and 1000 are integers or have a decimal part.

      Means that each unit is either 0.30 milliV ?

      • Livio says:

        Each unit does not match 0.30 MV but 3.3 MV (3.3 V / 1000 = 3.3 MV)
        The units are not whole, have 4 or 5 decimal places around.
        Then you get to the micro Volts of resolution.

        But that doesn't mean that the accuracy of the measurements is around micro Volts.
        – The actual accuracy is in the range of milli-volts (10 bit).
        – The over-sampling and media (in the firmware), lead her around 200 UV (14 bit).
        – Finally the Adaptive IIR filter (in application HAL), makes a continuous interpolation. So between a read value and the next you may also find differences in a tiny fraction of units. In the range of uV.

        But this is not true precision, only interpolation between successive values and only valid when using a slow filter (low values). A slow filter will greatly reduce the responsiveness.

        Even if it's just over-sampling, medium and tweens, the data come out much improved. Compared to raw ADC data, are considerably more stable and free from noise.

  2. Alessio says:

    For those who are interested can use this script (opens with Theremino script) to read from 1 or more
    channels (slot) Hw systems interfaced with going through Master Theremino HAL

  3. Livio says:

    Some users have written that touching the pins of the Master, Sometimes the program HAL stops communicating with hardware, writes a red line with the message "disconnected" and you have to press “You acknowledge”.

    This will occur if the body is charged with static electricity, and sends a small electric shock to a pin. All components are chosen with care and do not break but, even if you don't see the spark, It's always tension of many thousands of Volts that send temporarily haywire Microcontroller.

    During the tests we take special care to handle forms only from off, or touch before the mass (for example the USB connector). The final project should always provide an insulated container that prevents users from touching metal parts under voltage.

  4. Livio says:

    Leo wrote some observations on HAL

    QUESTION: I'm not sure if I've found a bug, or I'm taking a bath.
    The set-up and this:
    Theremino HAL 3.4
    Pi1 Pwm_16
    Slot 0
    Max value 680
    Min value 180
    the rest all to default.

    REPLY: The PWM only serves to adjust the brightness of the LEDs or emit a variable output voltage (with a low-pass filter) For the servant does not have to configure the pins like Pwm but as Servo_8 or Servo_16

    QUESTION: By setting the Min and Max, I expect that by changing the duty cycle (with mouse over) reached the minimum value remains set to the minimum value, so’ as for the maximum value, Instead, checking with the oscilloscope the duty cycle, I see you still goes from 0% at 100% and so in my opinion the Min and Max values are not respected.

    REPLY: The Min and Max values are not used to these things, for now keep them always at 0 and in 1000,
    you do realize that there and send them to when you've made friends with the system

    QUESTION: Also in my opinion, in the window “PIN details”, the right scale that goes from 0 to 1000, should autosettarsi the values of Min and Max aren't?

    REPLY: Hard to explain but until now it seemed convenient not restrict the values.
    I try to explain it in part:
    – Min and Max are not limitations but of the values of “scale ratio”
    – Very large or very small numbers may contain slots.
    – Do not restrict the values between Min and Max is wanted and allows some operations impossible
    – The normalization “standard” is from 0 to 1000 but nothing prevents you from working with other ranges
    – MIN and MAX to convert values from 0 to 1000 a range, aliens or convert
    each range “weirdo” in values from 0 to 1000.
    – After Min and Max have done the conversion of scale you could easily restrict the values between Min and Max but you would lose the ability to use values “extrapolated”

    QUESTION: Between an impulse and the next to be sent to the servo, It takes a delay, that the standard would 20 Ms, (but this theoretical), then OK any value from 40 Hz to 200 Hz

    REPLY: Absolutely right, use the Servo_8 and Servo_16 types and you'll see that everything is in place,
    If I remember correctly as “delay” We use 16 mS ( 60 Hz ) they are good for all analogue or digital servo.
    And, I recommend to set the servo travel Fund do not use MIN and MAX but the appropriate boxes.

  5. Livio says:

    Leo asked:
    I would like to put four “key” under a glass (2 mm thick), How can I reduce interference between the keys? What would be the optimal size of key? As I bring the wires to key? Can I use a flat cable through from one wire of the key and the next a wire to GND? Can I create a single PCB with key (When I used adhesive copper)? That layout recommendations?

    The capacitive keys working on very small capacitance changes if noise data from adjacent keys, long strands and glass are too often the useful signal is reduced and becomes difficult or even impossible to make them

    And not just have it work just barely, There must be a strong signal to make them work reliably even after a long time and with changes in temperature.

    With a precise calibration can improve a little’ their behavior laws many times pages 16 to 21 of ThereminoHAL_Help and use the viewer and the numbers indicating below to see how much
    change get in various situations. And read the notes on the fact that after each movement of wires YOU NEED to reset.

    Basically you have to have the highest values possible without finger and as low as possible with your finger. And you should also minimize the impact on neighboring keys.

    What can you do to improve
    – Use thinner glass
    – Do not use certain Windows that don't fit (leaded glass)
    – Keep copper above and not below (closest to the finger)
    – Use larger keys
    – Force the user to touch all the fingertip (No fingertip)
    – Space out multiple keys
    – Whatever the connection wires (flat or normal) shorten them
    – Keep the Master on the right of the four keys so as to minimize the wires

    QUESTION: Use a flat cable through from one wire of the key and the next a wire to GND?
    Any cable uses, shielded, flat or single strands, with massa between or without the results should look like, the more you do long strands and the more difficult it becomes to make them work well.
    If you then add a thick glass you a further factor of difficulty.

    QUESTION: Can I create a single PCB with key?
    Where in the world did you find adhesive copper ??? I want it too!
    You can do a single PCB, but keep spaced far enough keys.

    QUESTION: That layout recommendations?
    Keep spaced tracks (each other and from the keys) and make them as short as possible.

    Use modules Theremino-CapSensor instead of the cap-keys
    If instead you used four modules CapSensor (one per key and they would cost a figure) you could do things in Turkish. We did a kind of mouse that works through a shop window (6 mm) and that no one would touch screen was brilliant.
    With four strips feels the finger position and moves the cursor on the screen as a mouse.
    The software ThereminoHelper can move the cursor on the screen taking data from two slots (then to make a mouse you have to make a piece of software that mixes the four sides and allows to calibrate the limits…)


  6. Francis ardillo says:

    I would like to know if it is possible to connect a linear displacement transducer theremino, using it as a data logger, If you would like to know how to do (p.s transducer characteristics I submitted on fb).

    greetings and thanks

  7. ziotibia says:

    Finally someone who does work his head and
    only the welder… ;-)

    A request : could you post a summary description of
    commands between HAL and Master ?

  8. Starlight says:

    Hi I have installed wine and other programs win as described at linux but opening the hall on pin 1-6 didn't see anything.
    How do I fix

    • Livio says:

      I think it's a problem of Wine that does not reach the USB port. I don't know if installing the right drivers it is fixable, You should ask Roberto who is the expert of systems “Aliens”, write him at:

      My advice is to use Windows, It's been two years that jump out continuing problems on Linux to Mac and no one has yet solved, i.e. do you solve, but then reborn slightly different… on Windows we have nearly fifty applications that work with virtually zero problems. If the reason to use Linux is that Linux is more stable, the practice confirms this right. If the reason is to save, I am the first to want to save! But saving too does not work anymore and you only lose time.

      • alien says:

        I draw inspiration from this comment, Although old (combination) an exact year, for a bitter observation of software ' thereminico ': contrary to what is written on the site, This is a project that's completely Windows based ', more than helpful for Linux, Mac, Android!
        I find nothing wrong in turn its attention to a particular operating system, but I find, Frankly, incorrect do not operate well in evidence.
        It seems jarring that, against a side hardware completely ' open ', We talk to an OS that synthesizes the exact antithesis of the concept of open software. And even more striking is the fact that, instead of stimulate the development, towards ' alien systems’ Please clearly the fact that they are finally available for small Windows machines that make obsolete the Raspberry!
        Your reference to the Free Software Foundation placed at the bottom of each page of this website, is misplaced vine may be worked as.

        • Livio says:

          Thereminico software, as we've written repeatedly, works on all operating systems but “with reduced performance”

          … On PCs and Tablet with Windows, all our applications work with the 100% efficiency and work for (you do not need to perform lengthy and complicated installations)…

          We clearly expressed. The phrase is also highlighted in yellow and stated clearly, at the beginning of the following pages:

          Our software is Free and Open and it works perfectly on Mono (cross-platform virtual machine). Mono has been completed by us and works 100% with very high efficiency. On Linux was not completed and works OK. If you complete our applications will work to 100%, even on Linux, otherwise it will be inefficient. It's your world, and it's up to you to cure it, and make it work well.

          The conception about what is “fair” (stimulate the development of Linux) isn't the truth commanded by the gods. Fortunately, not everyone thinks the same as this world…

          Some of us think that it is useless to continue to waste time on different systems and it would be time to unify on a single operating system. And this will not be operating system Linux, with all its nit-picking, but an operating system that will turn all.

          Today it seems impossible, that an operating system, can run either Windows applications, Android, Mac and Linux. But many things, that seemed unthinkable just a few years ago, We are using it everyday.

          So let's stop this war “Linux versus Windows” and we're all working to unify. Our part we're doing great. Your part is to fix bugs of Mono on Linux. Do it!

          • alien says:

            Dear Livius,
            war Linux versus Windows you declared you and you yourself declared clear winner the second as, as you say, the system works 100% only on Windows machines and all other (Linux, MacOS, Android, etc. ) can be customized by emulating (the microsoft environment).

            Even the “fair” and the gods you summon them, I speak only of clarity in communication of the actual characteristics of the project.

            What you call ' nit-picking’ to me they seem rather technical specifications.
            The terms ' Free’ and ' Open Source’ are the specifications that mean something very specific and should be used with weighting.
            Luckily there are sticklers who insist on running a system in an operating system that can be so adaptable that they can run on any hardware including, to the limit, only the bare essentials in order… alien people to unique system that you would like to see.


            • Livio says:

              All right, Maybe you're right, everyone has the right to think as he pleases. We don't do battles, instead of discussing, We write the software needed to make it work on all. I now come back to write and produce, do it and in the end we will have everybody beautiful applications that run on every operating system of the universe.

              If you need help to migrate our applications on Linux, or other systems, ask and we will give you all the help you can get.

      • Alessio says:

        Hello Paul ,

        I take this opportunity to answer , Since I'm among the collaborators of Livio and system Theremino , in the description on the website are mentioned even so-called systems “Aliens” called so’ because’ many users use Windows , However those who want to experiment with Linux , can’ do it , starting to use Mono , that allows you to experiment without writing a line of code, This however’ does not prohibit those who have the skills’ try on Linux writing new native code without using emulators or software interpreters.
        Encourage the use of Windows and’ absolutely conflicts with an Open , Indeed, for the vast majority of users and’ the only operating system “User Friendly” known and used massively throughout the world.
        In conclusion , We put everything on the table , Hardware and Software , those who want to help test and improve the system Theremino to other platforms so be it , We are delighted to welcome him into our reviewers/contributors , Unfortunately, with our existing resources (We all work in his spare time ) It’ can do different , the proposed solutions.

        • alien says:

          Hello Alessio,
          the very fact of call “Aliens” all operating systems that are not Windows itself qualifies as a ' community’ Windows user and your system qualifies as as an input-output system for Windows-based systems that can be adatttato to other systems by emulating.
          Nothing wrong with everything, But why not write it clearly?

          Windows go to wedding with an open, It seems to me a really challenging statement, almost as much as the concept that it is open because you use it in many and it is user-friendly…
          Your piece of software is free, not that Microsoft, required for further for the proper functioning of your part. Also here a three-card Monte’ not to say clearly “our software is free and open for Microsoft users”.

          The put the material on hand is your unquestionable merit, and indeed deserve more clarity and precision in describing the characteristics.


          • Livio says:

            We have it clearly written! We write often.

            But Windows is not “Necessary for the proper functioning” How do you write wrongly.

            The operation of all our applications is based on virtual machine DotNet (Mono on Linux) that is cross platform. We could have written in CPP or other purely Windows but, to make it easier to use on other systems, We wrote everything into a common language.

            If this common language, on Linux and Mac has been implemented only in part, We don't have to adjust, must do that Linux and Mac experts.

            And frankly it's appropriate to discuss, as it is all in Open Source, If you are interested in our applications just use them, change them, migrate…

            And, just ask, We are ready to give all the help we can get.

          • Alessio says:

            Hello Paul,

            in fact the word “Alien Systems” She was born in jest as he says Livio. Our programs were developed on Mono and, How do you know, works on all operating systems, including Windows. With the latter we had dozens and dozens of tests, fixing bugs and improving the applications. Unfortunately in other platforms, first Linux, We didn't have the same effect, because Roberto worked less but especially because mono, on that system, It did not work properly. To make you understand, I used Raspberry (distribution Raspbian), Thereminiche applications. All right, until I upgraded the system to a new version, the latter is compiled to use the numeric data processor, didn't get our applications, It was not the fault of our code, but in Mono and, on Raspberry, contains errors in libraries that use Floating Point hardware.
            I would be very happy that you could help us with this, just to be able to write in large letters, “Theremino the system works well, also on other platforms”, erasing definitely the word Alien.

  9. Bob says:

    As written at the top of the page :
    “Applications that do not access the USB can be executed with Wine, those who access the USB should run with Mono.”

    You must install the libraries for slots and USB HID and even Mono (typically already present in many Linux distributions).
    These libraries are available and already compiled for Linux systems 32 bit. For Linux 64 use the bits source files and regenerate.

    • alien says:

      I tried to follow step by step the instructions to run the software under linux, but the program's main’ Theremino HAL not working.
      I tried to recompile all the source files listed (about the project C_HID_API missing pthred library reference) Fearing a disallineameno with my Debian Jessie, but still to no avail.
      By examining the log file command.log besides the final exception:

      Unhandled Exception:
      EntryPointNotFoundException System.: CloseHandle
      at (wrapper managed-to-native) Theremino_HID:CloseHandle (int)
      at Theremino_HID. Finalize method () [0x00000] in :0

      It is my understanding that there is no dll winmm.dll (windows media player??!): hard to understand why there are fictional errors due to the fact that mono does a guessing the names of libraries that require…

      someone can give me information, directions?
      And’ can purge the project from unnecessary forms and various charts and restrict her sugar essential cli?


      PS: one more observation, I noticed that among the sources include those of libusb, I'll explain the reason… It is not enough that the distro?

      • Livio says:

        These are exactly the problems we encountered us on Linux. And are the reasons that lead us to advise against Linux, who wants to work serenely.

        The defects that you are experiencing does not depend on us, but at the 100% Linux drivers, from different implementations of Linux (Debian, Ubuntu etc..) and the flaws of the virtual machine on Linux, containing parts not completed and bug.

        We lost months, to stand behind the quirks of Linux and, I promise you, We did everything we could. The problem is that as soon as we can, with great difficulty, to stabilise the operation, Linux libraries change, new bug and we come out again.

        And’ important that it is clear to everyone: Our applications are written on multiplatform virtual machine, and are well written. Prove Linux users that are using, I can put you in touch with dozens of them. Many have written their comments in our blog and no one has ever written, that don't work because of us.

        Often, however, our applications do not work on Linux and the reason is always the same: the list of things to install, fill in and check on Linux is brutally complex. For which “Run away” always something, or you neglect something, who is deemed not important.


        For details to put you in touch with Roberto:

        Roberto has the Mission of “cross-platform” and knows everything about Linux libraries. He works normally on Ubuntu, but is sure to fix your Debian.

      • Livio says:

        I forgot to welcome you among us, I do it now: Welcome to threminomani! We are very pleased to have you as a contributor. Help us improve the functioning on Linux, If you find anything we can improve, We will promptly.

        You must excuse my orsaggine and lack of diplomacy, I'm a combat programmer, and are better at communicating with Mosfet, that with humans.

        Excuse the term “Aliens”, He wanted to be humorous and not derogatory. I have a lot of respect them aliens, and I'd also, during the short human life, You can know someone.

        • alien says:

          No problem, Livio, Nice to meet you.
          I admire all the Whisperers of mosfet's, and I would like to learn from you the art of knowing how to use, I got to know them as a student in tanta in circuit theory and little practice.
          And’ just this interest that attracted me to your pages by trusting their own practical and functional in the sense that distinguishes those who work on circuits…

          as for ' tecnicaglie ', I say my asking you to tell me if I misunderstood and I make misrepresentations.
          from what I understand the need of mono is caused in whole (or almost) GUI management.
          I assume that everything's for, ' system-level’ is enclosed, in the case of linux in two libraries. I know’ ( that, in fact, you fill in correctly).
          I understand that even simple applications the interface could represent not only a simple assessorio, but the choice of ' mono’ means in practice the constraint to the ms windows platform.
          I believe that the market offers alternative valdide is cross-platform that's custom-platform ', but I wonder:
          really to configure/monitor an instance’ theremino need a GUI? It might not be enough to compile a few lines of c (or your favorite language) and have to console a simple ' keep-alive’ informing hardware status? wouldn't it be even enough for many applications ' simple '?


          • Livio says:

            Are you doing a little’ of confusion, Mono is not absolutely tied to Microsoft. Mono is a cross-platform virtual machine par excellence. Practically there is no alternative, for demanding applications like our.

            We could write a Windows-only applications, by directly calling Windows libraries and many times it would have been easier. But we have written in a common language, just to be multi-platform.

            Mono on Windows is called Dot Net, but they are the same thing. The only thing that changes is the implementation specific drivers and libraries, on Linux and on Windows. But language is the CLR, that is the same for all.

            The CLR (The Common Language Runtime) Microsoft is not a closed language!!! The CLR's specifications are Open Source to 100%.

            The “cross-platform alternatives” of which you speak, What are they? We do not know them.

            If you mean Java or Python, I can assure you, they are too slow and too simple. Write our (nearly fifty) applications in those languages, It would be like writing in the dark, with an ostrich feather. If you don't believe it you only have to try. You're not the first to think of these possibilities, but they all surrendered almost immediately.

            About simplify, of course it would be possible. You could do it all in a black window type “console table”, trendy Linux. And write data from the command line, type: Slot1 = 100
            Slot1 = 200

            But there are some problems:
            1) Despite knowing well our software. Change difficult parts as the USB communication, would require months of work.
            2) I just can't imagine how much it would take to set up the hardware without a GUI, GUI tools, Oscilloscopes and accessories.
            3) The end result of a lot of work, would more or less usable only for things ultrasemplici, type: I turn on an led… I turn off an Led.

          • Livio says:

            Some more words about Mono and the CLR.

            Since this is a huge language, It is highly likely that Mono, on Linux, will never be completed. Version already exists 4.5, and we continue to use version 3.5, just to facilitate compatibility… but unfortunately on Linux, did not complete even the version 2.0.

            But there is good news! Microsoft (as usual much more generous than what is expected) He announced that: “The CLR will also available natively for Linux and MacOs starting from version 2015 of the framework”

            And “natively” It means that from one day to the next, everything will work fine, exactly how it works now on Windows.

            It also means, that the dirty work, Linux anyone can finish, they are doing them for you, and pure free!

            • alien says:

              Cheers to the generosity of the Microsoft and, I add, by Big G, Oracle, etc…
              the generosity of the majors I believe very little. I think it's out of context the concept of generosity in an environment that has to do with balance sheets and boards and maximization of profits…
              anything goes, Okay choose their own providers and suppliers as it is believed according to your preferences, inclinations habits, etc… on the other hand the real world is about compromise and ' half-truths '. We all choose our suppliers in one way or another (If for no other reason that none of us Silicon is produced using, in the cellar) It's up to us to assess the fairness of each in relation to our desires or ethics or whatever you want.
              There are those who choose the ' minors ', I throw the term, all those ' producers’ various independent way: University, research centres, consortia, Community indipependenti, community supported but majors, etc… a world that even in its disorder expressed novelty in virtually every sector of IT. at a glance broke a monopoly, which may affect the right to user ' normal’ (or to anyone not entitled to dividends of one of the companies involved), the real news is that were open spaces of freedom for everyone, from those with commercial purposes to those with scientific purposes…
              the adoption of a ' formalism’ (I throw the generic term that applies to a text editor such a decentralised I/O) common passes necessarily through the consent and agreement of the various ' community’ involved.
              in the present case, Mono, doesn't seem to have been accepted in the linux community (or * nix in General) and maybe the reason is you get it from his own presentation:
              “Sponsored by Xamarin, Mono is an open source implementation of Microsoft's Framework based on the ECMA standards for C # and the Common Language Runtime.”

              Therefore the company Xamarin promotes a company's Microsoft created formalism (certified by a Committee whose Chairman is a man in the microsoft). Mono, is an implementation of that formalism which incorporates in whole libraries of microsoft. In short, a modern open-source for the robe was monopolist… It is not so strange that independent implementations arranchino having to adapt to what the ' parent company’ shall decide and communicate (as it is not surprising that some device drivers may be missing the following specifications, watch case, are available elsewhere).
              coincidentally i really don't have the same independent formalisms implementation issues and, beyond appearances, are much more simple and intuitive, provided that you do not confuse this with the mouse and atrophy from colored window.

              • Livio says:

                Are you “pignolando”, for me what counts is that things are working properly, and they are easy to use, even for the 90% of users who are not programmers.

                I might as well learn the necessary setup for Linux long sequences, but we are not working for ourselves. We are working for people who are artists, Researchers, Students… and these people should not become all programmers and fill the head of hidapi.

                And we programmers, We have the task, and responsibility, to allow these people to continue doing artists etc…

                • alien says:

                  I'm just trying to demystify things you wrote, and put the matter in terms understandable to all (in less than a few comma), artists, researchers, students, they are right to be raised by a number of technical details, but they, also, the right to be fully able to know what they're ' shopping’ and what are the implications of your choice even in relation to other choices they have done or will do…

                  For you “What matters is that things are working properly, and they are easy to use for users <<microsoft".

                  I repeat, nothing wrong with this, ma senza mettere in ballo il cross-platform o l'open source (let alone the free and open).

                  as regards the choice of target, do not put your mouth: conosci certamente meglio di me i tuoi 'utenti'. da quello che leggo dai commenti avanzerei l'ipotesi che si tratta di un 'pubblico' people tend to be well accustomed to handling Formalisms and well disposed towards scripting type forms…
                  among the communities that citi would add (at least among potential users) makers and creatives generally. well, hai idea di quanto siano diffusi i 'sistemi alieni' among these people? sono talmente 'alieni' to represent normality! try to imagine a meeting of creators or artists without a mac (speaking of apples), or a bunch of researchers without a linux…

                  All right, the genrosa microsoft will help the rest of us by giving us his healing code that will save the world, but certainly not free thought and free Act.


                  p.s. on how mono is agreeable to the fsf, c'è questo cntributo:
                  Although a little' dated I don't think it's too far from the actual situation.

                  • Livio says:

                    We're not talking about Mac !
                    Microsoft has at least some semblance of Open and Free, but Apple just no. Apple is the most closed and trade exists.
                    Would be fairer to attack Apple. But of course make war to Microsoft is fashionable, but who has the money to overpay a Mac is so cool…

              • Livio says:

                If she hadn't been Microsoft as a barrier, by now we'd all be slaves to Apple and we'll spend the days doing the queues outside the Apple Store. Worst of 1984 by Orwell.

  10. Piro says:

    Hello everyone, with some apps I have some error messages (I just forgot the exact wording)
    Theremino 3d for instance fails to start
    Maybe you need to update Microsoft NET Framework?

  11. Emilio says:

    Good morning everyone. I would try to communicate with HAL in Python. Python has a module that supports Memory Mapped Files, so in theory there should be no problem. Though I immediately run aground, because I tried to open the file “Theremino1” without success. Actually I didn't understand well: the memory mapped file is treated as though it were a file on disk? I.e., still has its own path, even though the data resides in memory? And in that case, What is the full path of the file “Theremino1” (I I assumed it was the same in which the copy of HAL that is spun).
    Thanks for any advice please give me.

    • Livio says:

      Yes, looks like a disk file in that they use similar functions. But it's actually a piece of shared memory. So there is a complete path (C:\) but only the name “Theremino1”.

      All applications in the system must be able to use the same “file”, so the name does not refer to a specific folder. Finally, the file must be long 4080 bytes, because each slot is long 4 bytes and we use 1000 slot (more 80 bytes reserved for future special messages).

      In VBScript it does so:
      Dim MMF1 As MemoryMappedFile
      Mmf1 = New MemoryMappedFile(“Theremino1”, 4080)

      in c #….
      Memorymappedfile MMF1;
      Mmf1 = new MemoryMappedFile(“Theremino1”, 4080);

      But open the file isn't everything, you have to use the Float, multiply by 4 the number of slots, manage your NAN…

      So it's best you download the samples files, in all languages, from this page:

      The right file is the second, I copy here the direct link:

      • Emilio says:

        Thank you. I managed to find the mistake I did. Report here the Python code to read the slot 1 at half-second intervals, in the hope that it will be useful to someone else. Please note that I'm not sure it's optimized in terms of efficiency, for the moment I just functions. I tested with Python 3.4 under Windows XP.

        import mmap
        import struct
        import msvcrt
        import time

        print(' Reading slot 1. Press any key to exit. ')
        shmem = mmap. mmap(0, 4096, “Theremino1”, mmap. ACCESS_READ)
        s = struct. Struct(' 1024f ') # to decode the binary

        While not kbhit msvcrt.(): # check the press of a button
        . . . . dat = s. unpack(shmem)[1] # changing the index changing the slot
        . . . . print(dat)
        . . . . sleep time.(0.5)

        ED: Any indentation that you have (essential in Python) have been replaced by dots because otherwise the HTML if the eating.

        • Livio says:

          The loss of indentation was not your fault but the WordPress editor. We fight every day and sometimes it does just come the nervous. Even writing Code/Code (as thou hast judiciously made), You can fool him. The only way I've found is to add dots and spaces. Don't worry about how they are the messages and errors, If we give him a little work we.

          Thanks for the Python code, will certainly serve to other.

  12. Roberto says:

    "At last", Python Bindings are available.
    You can download it from here:
    and also from here:

    Copy inside the folder of your main program, the “” file and write:
    from module_theremino import Theremino

    The class “Theremino” is cross-platform and it works on any operating system. Even with Wine.

    Thank you for your tests, now everything works even with Raspberry Pi.

  13. Joseph says:

    the system theremino by setting adc_16 has a resolution of 16 bit, then manages to discretize until 50 microvolts (3300/65536).
    the magnitude of the error is ?

    that is the measure that I run is 50 microvolts +/- ????

    Thank you.

    • Livio says:

      The current ADC of CIPS have a resolution of 10 bit. When you read an ADC firmware makes an over-sampling 16 and then does the average of sixteen samples (in a few hundred micro-seconds). The over-sampling brings the number of bits to 14. Finally, the application has an Adaptive IIR filter HAL which averages over time and which interpolates the value further and brings it up to 16 bit (at the expense of responsiveness)

      So if you plan to use the ADC to make measurements then the answer is no. You don't have 50 microvolt precision.

      If instead you use them for process control, dwcw, Robotics etc.. Then the 16 bit, as far as mediated and interpolated, There really are. Theremino the system is basically a PLC, so rather than the accuracy of the measurements is counting the responsiveness and stability.

      For example, if you try to read a potentiometer with Arduino or our ADC, You'll see a difference in impressive stability. This stability is the result of over-sampling, the media and the IIR filter.

      • Joseph says:

        in theory if I would do the measures based on theremino, Whereas has physically a I2C. I might think to connect an external ADC (Apart from the management software).

        Optionally managing I2C you go to firmware level or starting from HAL.

        • Livio says:

          I sure hope you don't have to do steps to that road. There is a door I2C module, But communicating with I2C devices is extremely inconvenient. Unfortunately every I2C device is different, their protocols are very complex. In addition to reading them you should program both the Master firmware, that an extension to our reading Protocol, in application HAL. Not worth it.

          With the normal resolution of the ADC system Theremino are already excellent measurements. Keep in mind that 10 bits are already 1000 measurement points and which you can easily reach the over-sampling 10000 points. A normal electrical tester has only 3 digits and a half, then 2000 measuring points. We are not very far.

  14. alien says:

    on page software tools specifically direct the compiler Microsoft Visual Basic (Express 2008) that is also provided the download link.
    pity that said only functions on MS Windows compiler…
    I was wondering if it was possible to solve the problem by using the compiler (supposed cross-platform) provided by Mono (MonoDevelop): on the other hand States that filled out can also be spun using the run-time support of that framework.
    the thing it seems possible, at least in theory, in fact on the page of mono is said to support a vbnet is aligned exactly to version ' 2008 '.

    I tried to download the source project (suitable for programmers ') and I ' properly’ imported into the Mono IDE, but I immediately bogged down when I tried to build the assembly:
    the default setting includes (and recommend the type) the use of the builder in the microsoft (' CSC '), but, with that setting the build fails: the exception is thrown by the builder vbc, but with no indication ' Diagnostics’
    Task “Vbc”
    Using Vbc task from Microsoft. Build. Csc Tasks., Microsoft. Build. Tasks. v 4.0, Version =, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a
    Task “Vbc” execution — FAILED

    by clearing the use of builder microsoft, Mono, If I understand correctly the documentation should use a builder native produced by mono project-basic on git-hub and installable packages available as ' mono-viable but nonculturable '.
    Unfortunately, this setting causes an error, This time of complilazione (Class_HID class):

    Error VBNC30439: The constant expression cannot be represented in the type ' Integer '. (VBNC30439) (

    the definition of a constant, precisely:
    Private Const GENERIC_READ As Integer = &H80000000

    someone could give me enlightenment?
    is there anyone who has tried to use the compiler that just on microsoft platform and with what results?


    • alien says:

      I forgot a detail not just:
      These experiments I made them on Debian 8 and with packages originating in mono


      • Livio says:

        Of course you can use Mono to build!

        Mono Develop is the Cross Platform compiler, replacing Visual Studio on Linux, and Roberto used it often, to compile some of our applications. You might get send to him the ready projects.

        Unfortunately, While Visual Studio is bug-free to 100%, the Mono Develop is a swamp of defects. If you don't believe me, you only have to try it yourself, and eventually you will give me reason.

        However, I must say that we are not real Linuxiani and then maybe you could succeed where we gave up. I sincerely hope your collaboration and can give good fruits.

        In our tests we found that Mono Develop has fewer flaws when working in CSharp, why you should start from Theremino HAL in CSharp version.

        For more details you should ask Roberto. I to promote Linux I worked hundreds of hours, but he at least ten times more. I wrote your data in one of the previous posts.

      • Livio says:

        You have asked many technical details for Mono Develop, but I do not know answer. Remember that we too had problems similar to Mono, but I don't remember if Roberto managed to solve them, and how did.

        I suggest you write to Roberto directly, because here on the blog too specialized topics, create confusion in others.

        It would be good to publish here only the results, When you and Roberto have found some good solutions, that will be useful to all.

      • Livio says:

        And thanks, Thanks again, for collaboration!
        I expect a real Keith to help us, We'll give you all the support possible. Livio: 0125 57290, Roberto Finally, If you need hardware to ask away, I can make you the PCB with the cutter and Alexi knows how to find the strangest components and can make you kits. Alessio =

        • alien says:

          do not mention it, also because my commitment is what it is and certainly not from ACE of linux skills (or windows, or mac…)
          I'll try to put a direct question to Roberto, but in the meantime, I think you're the right person as regards issues ' architecture '.

          – from what I see, the main problem, for the ' porting’ It is precisely not only there are no ide, but not even command line tools besides those of mono, with the limits that we said.
          – how it originated using
          If I understand correctly from what you wrote and that I got to see the role is to manage the GUI.
          from what you say the ' back-end’ is C++ code that works properly (Maybe with some problems with libusb on linux):
          These are the two dynamic libraries (.dll on windows and .so on linux)
          one that handles communication with HID and specific community Theremino slots.
          going backwards using for the gui back to best handle graphics libraries ' location’ of windows.
          – is thinkable / reasonable use other graphics libraries to achieve the same goal?
          I am reminded of the gtk but maybe there is something better/different.
          I say this because at that point the GUI would become more stable and more compatible C++ ergo also.


          • Livio says:

            No, There's a back end in CPP.
            There are two versions of HAL. One version is written in Visual Basic and the other is written in CSharp. Both VbNet that CSharp are based on the CLR.

            Why we use the CLR instead of other languages (for example, CPP)? Right to be Cross Platform!

            If the HAL was written in CPP, There would be no virtual machine DotNet (Mono) as a common basis, and then the HAL would contain hundreds of direct calls to the Windows libraries. And this is equivocal our applications to Windows. You would speak more than “Cross Platform”, but native languages translation of Linux, Android and Mac. An immense work, that should be remade, with each new version (We publish very often).

            Then there is another aspect: Theremino the system is not a single application, but an entire ecosystem of fifty applications, you talk to each other. The HAL alone really need to just.

            Or you can get a real Cross Platform, or things to spend years to translate all, in CPP (for Linux), in Python (for Android and Raspberry) and also in Objective-C (for Mac). And once finished this job pharaonic, We have published other 50 versions, and we would have to start over.

            • alien says:

              Dear Livius,
              I don't want to be pushy, Neither trying to convince you of anything, but I think we got to the heart of the matter:
              Cross-platform CLR is not and never will be because it is owned by microsoft. So your/your code has already, in fact platform-dependent.
              The supposed independence of the CLR is only presumed, precisely, is a pure assertion by Microsoft, a decoy fielded to curb the rampant excessive power of Java/Sun/Oracle, likely.
              The CLR is a standard stabilto by microsoft and, in fact, imposed on the rest of the IT world, that, watch case, He implemented, with the exception of Novell that produced Mono, also that entirely disregarded by the rest of the world not microsoft.
              and I speak not only of unknown communities of nerds gathered around one or another distro, But even while commercial (Redhat, Debian).
              I'm sorry to admit it, but it is a dead end street, an out-out, Cross-platform CLR xor. just a simple ' Google search’ to realize this.

              you say that the CLR performs better than other machines: I'm not even in doubt. but with regard to portability, It remains nailed to a severe limit, probably, insurmountable.
              you say that microsoft announced the rilascico of the machine for other platforms? It doesn't seem a novelty, but yet another window-dressing, exactly like the Mono project, or Rotor, the CLR for BSD. who should take care of the burden of supporting a similar project? the microsoft? the xamarin/novell/suse? at the moment it looks like there are others who care ( the dotGnu project is over for centuries, the distro monoppix lasted three months, on the other hand you think one average developer of any community can adhere to the policies of the mono project?
              you talk about the work of Pharaonic do the porting of applications Theremino? try to think of the work needed to develop and support the machine CLR/NET, work which is not even planned/built by any ' community’ or organization/Foundation!

              the bitter end is that at present the most reasonable solution, non-Windows user who wants to use Theremino is to use a virtualization. Provided that this does not interfere with communication with the interface. The resulting performance degradation, but at least free from bugs Mono stack.


              • Livio says:

                Yes, You can virtualize or, If you find another solution, the follow willingly. The issues “I would say philosophical”, Let's leave them to other.

                • alien says:

                  You're wrong, I'm sorry I've made my point. otherwise don't trade for ' philosophy’ issues of all practices.

                  • Livio says:

                    All right, but then tries to locate a street that is realistically feasible, and then we will evaluate together.

              • Livio says:

                And it is not correct to say that Mono is by Microsoft. Mono is a creation of Miguel de Icaza and Nat Friedman, they are both men of Linux (and maybe a little’ also Mac), but not Microsoft.

                Miguel and Nat found the CLR virtual machine, so efficient and well made, who decided to import it.

                What I say is not worth much, but Miguel de Icaza is considered one of the “Most Powerful Voices in Open Source”. If he lost much of his life behind the CLR, It is precisely for “philosophical questions” or “practices” What do you call you. This is the dream of having, or sooner or later, a common language for all. And’ the same dream of peace, that inspired many, before us. And I am fully on that line. Not pro Microsoft nor pro Linux. I'm for a Cross-Platform language, and unfortunately there is currently no better than the CLR.

                • alien says:

                  they will also be the most powerful men of open source (aside from the fact, and it's not philosophy, that the linux world is more than open source), but there's no one else who follows them, Apart from the development team of Xamarin/Novell quaòe themselves work.
                  as for the CLR, I repeat, I'm not arguing either how efficient, but there is no one, In addition to the team said that the developments.
                  I don't invent anything, just have a look on the net, If that were not enough the issues we've been discussing.


                  • Livio says:

                    Surely you're right, I am not an expert in the Linux world and its internal divisions. Before we find ourselves discussing how much hair has the Picaza and as many as Torvald, I would propose to limit ourselves only to practical matters.

                    With practice I mean really practices. Not what you define “architectural led” and “technical specifications” but just: “This is possible. This one not be able. Augh!”

                    So I invite you again to answer the question: “What would be the alternative to the CLR that you propose?”

  15. Livio says:

    Important news

    I spoke by phone with Roberto. At this time he doesn't have time for intervention, but he explained that the HAL, from version 5 onwards, may not work, on Linux and on MAC.

    The last version tested, and then you know works, is the 4.6 (both VbNet that CSharp):
    (on our site there are all versions and all sources, just change the version numbers in 4.0/4.1/4.2/4.3/4.4/4.5/4.6/5.0/5.1)

    I invite you to use the binaries as-is, without recompiling them and following the instructions of the Linux page. I'm sure it will work. I myself have seen them work several times, and many of them are using it on Linux, on Mac and also on Raspbian. The Japanese have made their own versions with round buttons and weird writings. Australians use them everyday on MAC. They must work on you too!

    Also try reading the posts of others, such as these:
    (I don't understand little of these councils, but you could find some important details)

    When you have a version 4.6 running, It should be easy to compare versions, and operate the 5.

    I encourage you to persevere with patience, It's worth it. Eventually you'll get the software 100% Open Source, the first line of our, up to the last line of Linux. And it will also 100% Cross-Platform.

  16. Livio says:

    Alien unixiano called alien debianico (Note 1)
    We report an interesting email which probably, did not arrive at its destination, due to interstellar disorders.
    (Note 1) We would like to remind you that these terms are not derogatory, but playful. We have great respect for the basic idea of Open Source, underlying Linux.

    Hi alien,
    Let me introduce myself my name is Ricky and I am helping the system Theremino to migrate.

    I am a professional developer, both sun win and Linux, and I'm doing a port of Theremino on Linux/Unix systems since a few weeks. I'm posting it all on github. If you want to follow my progress, find them here: HTTPS:(link deleted)//
    (We've eliminated the previous link because the software of Ventrella disappeared from the WEB, Why would asked him)

    You describe in short what I am doing: To keep from going crazy to choose and use graphics libraries,
    on various platforms, I decided to use a web page, to configure a HAL, and monitor it. A little’ How do I configure a router, using his IP address with a browser. I then embeddato a webserver, in every instance of the executable, and I'm already testing it on Raspberry, both Mac (BSD Unix) on which development and also on Ubuntu. Seems to go all, I've also found a cross-platform library, that seems to be going well all over the world.

    The web approach, among other things it allowed me to browse (and already works) the HAL from my smartphone or tablet, and also to launch multiple clients, on multiple browsers, on the same HAL.

    I'll tell you right now that I don't have the time or desire to follow blogs, so I didn't even fully read your diatribe/discussion. They asked me to inform you, about what you were doing, and so here I am. The approach I, I also possibly on Win same, Without using MONO or similar (I avoid personal opinions and I try to keep everything in a technical field). Currently I have decided to bring on Raspy without using mono, because the latest version of mono forces him to use a Raspbian softfloat, with no problems. Then the (my) choice of abandoning mono is dictated above all by this. I'm used to build and then cross-compile natively on different machines.

    Then, for recommendations on MONO you can hear Roberto. This email is just to let you know that something is moving and in a few months (Unfortunately work and have little time), I'll be able to release a full version-webbased, that'll run on Linux, so even on Raspy, on Mac and on FreeBSD (and of course also on Win).

    See you soon, Hello

  17. Mirko says:

    Hi I am writing because I have a problem. I state that with visual basic do it considering the fact that I do not know programming but I try with what I. I am unable to create an application from your program “White” able to simulate the keyboard as in key manager and the other to use the value of two slots that take data from a joystick and transform it or joystick( Let me explain …. like the one that windows recognizes as game controllers for example) or in some sort of signal as the darts of the pc based on the value of the slots(In short, a sort of selector 4 vie. sorry to bother you but I can't

    • Livio says:

      The problem as I ask is complex, What do you mean “on the one hand” and “on the other”? It means you should do both these tasks? We could not divide them, leave it to KeyManager in the first half and just focus on the second?

      And the second part in turn should be divided into two parts:
      From Slots to four arrows
      This makes already KeyManager, just use it with the Key Left, Right, Up and Down
      Joystick proportional to the value of two slots
      If your Joystick, at the end of it all, move the mouse cursor on the screen, then this is done by ThereminoPad:
      Instead, if you must do something else, you will need to clarify the results expected.

      You probably don't want to use the software Theremino KeyManager and ThereminoPad, but would like instructions, to do the same things in a simple way, in a few lines, you could easily understand. But unfortunately there is an easier way. We've done everything that we've been able to do, to simplify, published applications.

      Learn how to “Transplant” the right parts from one application to another, It may take years of experience. Suggest that you take it slow, explore what we wrote and try to copy simple functions. If you can't make them work clear and try again. However we are always here and we will help you as much as possible.

      • Mirko says:

        exactly what I wanted to do that is to transplant the instructions or be able to somehow change the keymanager. the problem arises because the key manager has as impulses 0 1000 Instead I need that hasn't done anything when the slot has value 500 While it should do 2 different actions if you have values of 0 and 1000 and this does not allow me to do so. just wanted to know if there is a command for basic that let me given the value of a slot to make action to itself 500 anyway thanks for availability

        • Mirko says:

          or came to my mind now if you can get by the HAL 2 different results from the same pin, a kind of virtual one hand signal splitting values greater than 500 the other minor ones but it seems even more complex of the other solutions .

        • Livio says:

          So you press a key on the keyboard (or for example the left arrow) When the value of a slot goes to zero.

          And would like to press a different key on the keyboard (or for example the right arrow) When the value goes to 1000.

          And would you not do anything when the value is 500.

          If so it only takes a few lines. The whole thing could be written in your own application or Script Theremino or Theremino Automation..


          More or less the principle is as follows:

          Dim v As Single = ReadSlot(100)
          If v < 250 then . WriteSlot(1, 1000) Else . WriteSlot(1, 0) End IF If v > 750 then
          . WriteSlot(2, 1000)
          . WriteSlot(2, 0)
          End IF

          It is assumed that:
          – the slot 100 both the control value
          – the slot 1 go to press the left arrow on the KeyManager
          – the slot 2 go and press the right arrow on the KeyManager

          This piece of code belongs in a Timer event called very often, We say every 10 milliseconds.

          Are there any points in between that will be removed (they served to align the columns – in programming parlance is called “Indent”)

          • Mirko says:

            Thank you 1000 !! I preferred to write it using vb then in my application using so empty that you have put on your site or if it's fine even in automation

  18. alien says:

    Rereading the comments I wrote some time ago and the subsequent ' controversy’ I suspect that someone might be misled, with regard to my personal design considerations Theremino.
    I would like to clarify some aspects for me already apparent then, and largely confirmed by interacting with the ' staff’ by Theremino in General and with Livio in particular.

    What makes a truly ' open project’ is not so much the technicalities (which also, as I tried to explain) have their importance, but the underlying attitude and, from what I see, the basic idea of the system Theremino is genuinely geared towards liberation and sharing of knowledge just as it should be every open-source initiative.
    This is a true and correct incomparably more than attitude that underlies many other projects that they confuse so shameless and cunning the concept of open source to the benefit of their interests sometimes very dirty and even worrying…

    I keep experimenting with Theremino and hope to contribute as soon as possible to the project with contributions that go in the direction of ever greater compatibility with GNU/Linux systems believes that, given precisely the profitable climate of openness, participation and collaboration within a community of users and developers with the most varied needs and feelings to express the potential of an initiative so important.


  19. PATO65 says:

    I installed the firmware 3.2 on the master, I downloaded HAL 5.1 but I don't see the list of Stepper_Dir Stepper type exits and slot configurations.
    How come? where did I go wrong?

    • Livio says:

      What you write is right, TEN PIN must appear in place of the six grade PIN.
      If you appear TEN PIN then the pins 1,3,5,7 and 9 must be configurable as Stepper
      The inscription Stepper is the sixth from the top and little note perhaps you missed out…
      And Stepper_dir does not appear if you have not set up PIN Stepper…

      You appear ten pin?

  20. PATO65 says:

    Very true, It all works……evidently I was watching a pin par :-(

    Here's my Theremino-Master Flintstone :-)

  21. Mirko says:

    Hi I have a problem with rgb LEDs. I got rgb LEDs with initials apa-106-f8 and should be controlled (as far as I understand I) from a signal to 24 bit that is sent with the timing of 0.35 us high + 1.36 us low for bits 0 While 1.36 uS high + 0.35us low for 1 and this for 24 times before a break of at least 50uS now a question how can I fly it and how should I set the hal?
    I tried to see but the pwm signals are not good because they have timelines other than these while using the theremino automation by setting the maximum speed to arrive in the command that does not make me do 10uS in time changes using the DigOUT is no way to adjust the timing signal to send bits instead of raw signals? I know you will understand a lot but don't quite know how to say it :D

    • Livio says:

      I know those LED, their precise timing to be respected, almost a serial line. Cannot get them to work with standard Pin types. You should reprogram the firmware to generate exactly what it takes to them. It would be a huge job and not worth it. The end result of a lot of work would have to be able to fly those specific LED and nothing else. You better use existing driver, I think you can find them at a good price from Pololu and LadyAda.

      Or you could use a mini-Arduino (If someone has already written the firmware to drive your LEDs). And in turn the Arduino could be flown by one of our releases. Arduino is very suitable for making small hardware drivers like this.

      The Theremino system is a generic IN-OUT for PC and has only very simple inputs and outputs. Attention in the future not to use anything of serial (such as I2C sensors), and nothing I have logs to be programmed or precise timing to be respected.

      This applies however only to PIN standard (those who are on the Master and Slave modules). If you pass “by other means” then you can use any device or Protocol. Many are reading the serial send data on slots and Geiger in system Theremino and I read the production of solar panels with an adapter USB-RS485.

      Another example to explain the principle: would it be possible to program the Master to read camera signals. But it would be a very good job and eventually would you undertake the Master, with a large amount of data. And the final result would not be all that great. Then the WebCam cannot connect to the Master, but to the USB, and communicate with the system through software. The same goes for the audio, GPS receivers, the SDR (Software Defined Radio), etc…

  22. Angel says:

    Hello, I'm waiting for my first theremino master, I would like to know if with sw HAL or possibly other, You can sum the signals beds…I mean I wanted to realise a Gaussmeter 3 hall sensors are arranged in 3 different positions but I want to add them together to get a single overall signal,…How do I do or what software to use? or does not exist and should I crearmelo I?
    Thank you

    • Livio says:

      With only the HAL you fail.
      You should write three lines in the application Theremino Automation
      Or a single line inside Theremino Script
      I suggest you Theremino Script though more complex because it has many examples and is much more powerful and expandable.
      Also Theremino Script produces real applications (files.exe).
      – – – – –
      If you can't write me and I'll send you a sample theremino Script that will do exactly what you need.

    • Livio says:

      I made the Theremino example Script
      It's called “SlotOperations. vb”
      Reads the slots 1 + 2 + 3 and put the sum into the Slot 4

      Inside the ZIP file you will also find the compiled application “SlotOperations.exe”
      Download the ZIP from here:

      You can even try it without launching a hardware SlotViewer and moving the sliders of the slots 1, 2 and 3 with the Mouse.

      • Angel says:

        Thanks Livio for the program! I now I kind of need to chew and digest a little well all, because I used the vb years ago (but never applied to hardware) and then the assembler x micro, the script does not know him but I have to learn and then as soon as I get the circuit I have to put together a little on everything…but thanks to your site and collaboration has all the tools to be able to do everything,It just takes good will and time, Thanks again!

        • Livio says:

          The theremino Script is virtually identical to the VbNet but doesn't have the part that allows you to set the user interface in a visual way (you have to write all the code). And he didn't even breakpoints to stop the program and inspect the values of variables. On the other hand is all in a single file and therefore easier to use.

          The firmware does not have to schedule, It's already written in the Master module and you only have to configure it with the application HAL.

          If you need more we are always here.

  23. Angel says:

    Hello, I do readings with a hall sensor and I need not only view but mostly store these measurements in real time, Maybe in an excel file… the HAL looks like it does but I don't remember,fair? How can I do? also I would serve as analog instrument should have control over which see unp optional these measures,already was created in some other application? Thank you

  24. claudio says:

    Hello Livio,
    I'm been familiarizing myself with the slots on VB/script and gray hair don't help.
    Ask a couple of questions and forgive me if are trivial, Maybe you are useful to other.

    1) Slotviewer displays the value (float) the slot by approximating to one decimal place?
    2) theremino-SDR that receives on the slot1 a float with the frequency in KHz Hz (decimal integer.) tunes by approximating to 0.0-0.5-1.0?
    float wrote-> harmony
    103900.125 -> 103900.000
    103900.271 -> 103900.500
    103900.711 -> 103900.500
    103900.800 -> 103901.000

    3) Using Script I saw that 3 decimal digits of a FLOAT (singles in VB) are displayed fully only if the number has 7 overall figures (the rest is approximated)

    the code writes the slot
    const value as single = xxxxx.yyy
    WriteSlot(1, value)

    the code B reads the slot and displays
    Label1. Text = ReadSlot(1).ToString(“F3”) (or even “0.000000”)
    the result is

    value 123.123 -> 123.123
    value 1234.123 -> 1234.123
    value 12345.789 -> 12345.790
    value 123456.123 -> 123456.100
    value 1234567.678 -> 1234568.0

    Depends on the compiler or (almost surely) mistake I?

    Thanks for your patience! Claudio

  25. Vincenzo says:

    Hello Livio, This time I'm not talking about CNC and I have a particular question.
    I need to acquire in numerical form a sequence of events (36 shooting blanks) in a given time (70 or 80 or 90 seconds). In practice since start start… How many seconds and hundredths shoots first, then the second and so on until 36°.
    The sequence of time then I should import into Excel for the appropriate calculations established by regulation race.
    I was thinking if you could use to record each event also piezoelectric by virtue of the fact that I will have to experiment with the signal brooms and look for the best adjustment that does not take account of the echoes generated by the structure that hosts the event.
    At first it was thought to the video recording (with many fps) be analyzed step by step but the acquisition time are high.
    It would be useful to obtain the sequence of time as soon as possible.
    What do you think?


    • Livio says:

      You could use piezo discs, or electret microphones.
      Then it would take a little’ of software to extract the times.
      Remember though that going from Master the accuracy will be around 2..5 milliseconds.
      And that to maintain this accuracy even software should be written well, with appropriate timer, otherwise the accuracy would drop around the 20 Ms or even worse.
      Maybe you could use teremino logger, but it is unproven and would give you only a recording, doesn't the times in seconds and hundredths.

      Or you could use a microphone (or piezo discs) connected to the sound card and record audio. The accuracy would be much higher (better than a millisecond) and you shouldn't write some software.

      I remind everyone that these discussions would be better in a real forum, with an editor better than this and with the ability to publish pictures and keep well divided the topics.
      We have a forum on Elettroamici, Let's use.

  26. lean fabrizio says:

    Hello and congratulations for all the work fatt0!
    I'm going to check with cnc Theremino after starting mach3 to pass current LinuxCNC
    I would use thermino_cnc now and I've already ordered the master, but I have two questions:
    thermino_cnc connecting with an xbox controller running on Windows 7 (I use) It is not detected. I also tried it with a playstation controller but nothing…It must be connected with the master or the whole should also be detected in simulation?
    second thing I would ask if thermino_arduhal can work with one or a Arduino Arduino Mega 2560. I loaded us your sketch thereduino_v.1 but is not detected neither…
    Thank you
    PS: I would use theremino_cnc for laser engraving


    • Livio says:

      Theremino CNC reads and writes values ​​in the Slot,
      if you learn to make good use of our Slots will find it very difficult to continue.
      From what you wrote I almost sconsigliarti from our system.
      You'll have to read much to elaborate on Slots and our applications.

      Then it wants other applications to communicate with hardware Slot
      For the Master would use Theremino_HAL
      For the Arduino would use Theremino_ArduHAL

      None of our applications communicate with strange controller
      but only with Joystick windows standard.
      Try using our test applications for Joystick.

      You opened Theremino_ArduHAL and is looking ArduinoUNO?
      You probably set something wrong, the Baud e.g.
      Read the instructions ArduHAL

      Laser engraving you can get it, but as mentioned you will learn a lot about Slot
      And also have good knowledge of electronics for links.

      • lean fabrizio says:

        Hello, Good morning and thank you for availability.
        for the electronics and the connections we say that to me I could get away (the cnc I entirely self-built…by the driver to the disassembling and reassembling mechanical not know how many older printers) But I'd need an input for starting…
        I am sure that I have everything under your eyes but do not see it: gamepad is seen by Theremino since the application recognizes the name and makes me open the properties, But I can not figure out how to set up slot. I see in the attached text file that describes names and values ​​but I do not know if this kind of table I have to rewrite it in a specific file (to put in the folder theremino_hal) or should do so directly hal therefore should determine itself the device and create the file…
        for Arduino see I try it but do not know where to put your hands…
        I'm sorry about “ignorance” but are not computer programmer it but I want to learn and usually learn quickly…I only just knowing where to start.
        I'm trying to read all the pages of the site but I have yet to find a guide on how to set up slot (if proof were needed of…)
        Thank you

      • lean fabrizio says:

        Hello, Livio nonmi excuse but I see that you have answered my second question, be patient, I would only know where to begin to understand the slots…I trawled the site but I can not understand how I should set them up and where.
        I want to learn, I just a little help…Thank you

        • Livio says:

          Sorry, I had missed the question, I do not know how. Usually they get emails to warn me, but it did not happen, or I have not seen…

          The GamePad should be recognized by the CNC application and then, When you move or press its buttons should change the coordinates of the CNC application.

          The slots are like mail boxes, where all applications can write numbers or reading numbers written by other applications. To learn how to use it launches twice SlotViewer application and move the bars on a seeing that is communicated to the other. Then also open a Wave Generator and Signal Scope and tries to set the same slot and see which one sends another signal.

          This was just to make you an idea what are the 999 slots available.

          THE HAL (When you connect a Master) It presents the rows, one row for each of the Master Pin physical input-output. Then select one of the lines, and you can change many properties. One of the properties is the slot that you can choose from 1 and 999.

          Another important property is the use of the Pin you want to do that if it is an input or an output, of an ADC, a PWM, a digital output or input, a Stepper motor, And so on.

          • lean fabrizio says:

            Thank you very much, In fact, I allowed myself to repeat the question because I figured there was some obstacle, I see more and again answer thanks!
            Now I will start some experiments… But neither one nor Arduino mega me see, It isnt the gamepad… I covered the transfer baud and are correct but nothing… I'll see when you get my master… Meanwhile, study…

            • Livio says:

              Arduino UNO we tried it several times and it works. Call us and we'll see together to fix everything.

              • lean fabrizio says:

                Ok, I wait before the master, I've been toying, study and if I do not solve call you… I like to apply myself before!!
                Thank you

                • Livio says:

                  With regard to the Arduino:

                  Open then arduHAL open communication options and controls that are the last lines:
                  Ports ALL
                  Bauds 500000
                  Names ALL

                  Then open the sketch “ThereDuinoV1.ino” and controls that there is in the Setup:

                  Then load the sketch of Arduino
                  Check that the Arduino programming being flawless.

                  Then open the application ArduHAL
                  (HAL in non ArduHAL)
                  If it was already open awards “You acknowledge”

                  At this point the list on the left part of ArduHAL must fill.


                  Regarding the Gamepad did you feel when they see these two applications?



                  For safety I now tried to connect a gamepad to a towerPC and then a tablet with Windows 10 Home 32 and two bits and all applications have functioned. I have here a Windows 10 technical professionals 64 bit but it should not change anything. No one has ever written there that does not work.
                  So if these two applications do not see it is not a standard Windows or gamepad does not work.

                  Then, to make it work in the CNC application, not just rotate the joystick, but you also must press the buttons rear vertical and horizontal authorization, as explained on page 15 the CNC application instructions.

                  • lean fabrizio says:

                    Thank you, I see to try everything before, although it seems to have already done so, But redo everything step by step and let you know.

        • lean fabrizio says:

          no way…Arduino charge nancy, aprotinin arduhal…It seems to communicate because the LED will flash for a moment then nothing, nothing appears. gamepad works on windows, with the first application makes me open the windows control and works them all, Then I open the second application and makes me a list of a few buttons but nothing happens, n and pressing the buttons will moving the stick…I know that there is something wrong with my PC at this point, or folder permissions problems or other per se because the devices are, They are not seen by Theremino…

          • Livio says:

            What windows you? Windows 10 ?
            And’ It is fitting that one of the two applications do not see anything, the only thing it does is write the values ​​in the Slot. And then see change only if you open the Slot Viewer.

            Install TeamViewer 12 (important that you install the 12 and not the 13 or 14) otherwise then we can not communicate.
            It also installs VisualStudio 2008, as explained on our site.
            Then call us and we'll see you in person what does not work.

            • lean fabrizio says:

              I have windows 7, provider and all as soon as possible. Thank you for your availability

              • Livio says:

                It has to work around even on Windows 7. Only on XP may be a problem, and in certain applications.

                • lean fabrizio says:

                  still nothing to do…I tried it on another pc always window 7 but not them…I know that just something wrong…I'm almost ready with required software…what would be the best times to be able to call…?

  27. Angel says:

    Hello, I do not know if this is the right blog… I would like some clarification: but can the Theremino program the RFID card? If you, on them you can install a frequency generator with a special coil?

    • Livio says:

      No, Theremino the Master module is digital data but only analog sensors.

      The RFID you should use an Arduino Nano connected to our ArduHAL, but then you should also know how to program it to communicate with the RFID module (we never used and we can not help you with this).

  28. Roberto says:

    Good morning , first of all congratulations for the site , all that you have made available and for your immense work that you make public .
    If possible I would ask for clarification , I would like to experiment with your module Relay Switcher to be connected to master and use to test and understand the operation of your software “RelèDriverV6” , but I have a doubt about connections sch watching the relay board , the three wires of the data line I read that need to be configured in lobby as DigOut , the CLOCK pin presume that goes connected to pin 8 the master (SCL) the DATA-IN pin should be connected to pin 7 of the Master (SDA) , but the STORE pin of the relay board to what is to be connected ?
    Sorry if you have already answered this question, but if so I have not found , I tried to look in the software and in the Circuit de file if there were any notes on this thing but I have found (I probably would have escaped ).
    Thank you for your eventual answer

    • Livio says:

      You can use any of the three Master output pins.
      All of the master pin can be configured as DigOut.

      you can use 1, 2 and 3 and then go in HAL and configure them as DigOut
      or use 7, 8 and 9 (that the mass and +5 neighbors and comfortable), and then go in HAL and configure them as DigOut.

      But you could also use the 12, the 9 and the 2 (a dispersed and reverse order), the important thing is that then are HAL configured as DigOut and associated with the three right slot.

      That is, the three slots in which your software will write CLOCK signals, DATE and STORE.

  29. Roberto says:

    Thanks for the explanation Livio , I had been misled viewing SDA and SCL on the screen printing of the master and the relay board schema , opening the test software "RelèDriverV6" I then saw that it was explained in the notes of the same .
    Thank you

  30. Vincenzo says:

    Hello Livio, I can not find a conversation about a year ago where there was talk of a potential change to SignalScope to prevent accidental key press “RUN” blotted recording just made.
    I wanted to know if there are new to the solution of this problem.
    Thank you
    PS. I also tried without success to Elettroamici (I should also have it posted here)

    • Livio says:

      We could not find valid solutions. Ask every time a confirmation, by opening a dialog box, with an OK button to press, It was considered too annoying to everyone.

      After making a recording to be stored just use the “Save buffer”.
      And just remember not to press “Run”, for those brief moments that it takes between “Stop” and the “Save buffer”.

      • Vincenzo says:

        it can happen (under stress / distraction) to accidentally double clicking (that you will not break your mouse suddenly).
        Indeed it happened to click twice, obviously losing record.
        If it deemed annoying to stop to save the buffer, It could be opzionabile.
        Or it could automatically save recordings as numbered sequence, in background (as backups of events), with any set limits (No. Files to keep). This way it does not slow down anything and just delete the files to free up space.
        It seems strange that it was judged annoying, There are one-time events.

        • Livio says:

          In some programs we automatically save files just following the reasoning of saying “if you're going you need them recover”. Well it never happened to use “recovery” and in return, the backup folder you zoom in all the time and every time we exchange the trial versions are enormous zip. When I get a little’ Time to delete. However, now you know what happens and then surely the next time you'll be careful. with regard to “unrepeatable”, relying on them is not a good way to work. Each experiment must be repeatable otherwise it is invalid.

          • Vincenzo says:

            Last year I experienced the reading of these events (shooting blanks) for about three months and it turned out that there is a risk of losing the event. For this reason, the final event prepared two independent Laptops with related hardware Theremino and two operators.
            Through SignalScope read split time between an event and the other to then perform a series of calculations with excel.
            And automatically I get the final ranking.
            An event with about 800/900 actors and 10.000 audience.
            Losing a sequence of events… I think they kill me if I do not change the city in a hurry.
            I wonder if some other light bulb does not light.
            A greeting.
            PS. for a brief summary of the event (

Leave a Reply

Your email address will not be published.