This is something that perplexed me a few years ago with Flash Forth on a PIC18/PIC24/Arduino Uno. I was using the Python serial emulator S-Term because it is simple in the source code and worked. I really wanted a way to load more structured Words into the FF dictionary with bookmarks in a way that made sense structurally. That lead to a desire to execute code from the uC on the host system, but I never wrapped my head around how to do this in practice.

As a random simple example, let’s say I set up an interrupt based on the internal temperature sensor of the PIC18. Once triggered the uC must call a Python script on the host system and this script defines a new FF word on the uC by defining the Word in the interpreter.

How do you connect these dots to make this work at the simplest ‘hello world’ level? I tried modifying S-Term at one point, but I didn’t get anywhere useful with my efforts.

  • CalcProgrammer1@lemmy.ml
    link
    fedilink
    arrow-up
    14
    ·
    edit-2
    5 months ago

    I’m not sure about FF specifically, but 99% of the time you’re connecting a microcontroller to a PC you’re doing so over a serial port (UART) of some sort. It may be a physical COM port or it may be a USB to serial adapter or even a purely virtual serial port over a USB connection, but the methodology is all the same. Unless you are running a serial terminal on that port (as in, a commandline on your PC served on the given /dev/ttyX interface, not a terminal emulator letting you read/write from the port), the microcontroller can’t just run scripts on the PC. Instead, you will want to write a script/program that opens the port and waits for a command to be sent from the microcontroller, then that listener script can execute whatever functionality you require. Note that only one application can have the port active at a time, so if your listener is a separate program from your event handler, you will have to close the port on the listener before running the handler, then reopen the port on the listener once the handler is done so it can start listening for the next event. Better to just make it all one program that is always running on the PC and does both listening for events and handling them so there’s only one program that needs access to the serial port.

    • MarauderIIC@dormi.zone
      link
      fedilink
      arrow-up
      5
      ·
      5 months ago

      Yup, pretty much this. I have a small touchscreen Arduino device that I keep plugged into my PC. When I hit a button on the touchscreen it sends some text over serial (which is really a USB wire). I have a Python script on the PC that continuously reads from the serial port and parses the received data to figure out what to do. Specifically it tells my Discord bot to play a sound :)

  • bloodfart@lemmy.ml
    link
    fedilink
    arrow-up
    6
    ·
    5 months ago

    From the uc side, open a serial connection, send data. On the host side, prepare a place for received data. On the host side, walk through the received data until the thing you’re looking for is found, then execute some action (in your case a python script).