mesecons/mesecons_microcontroller/doc/microcontroller/description.md

2.6 KiB

The Microcontroller is a semi-advanced programmable component with a persistent 256 bit EEPROM memory.

Warning: This device is largely considered deprecated and might contain bugs. It is recommended to use a Luacontroller instead.

Detailed documentation can be found below:

  • The Microcontroller's code is executed whenever any of the following events happens:
    • The Microcontroller is programmed. In this case the EEPROM and ports are all reset to 0 before.
    • An incoming signal changes its state.
    • An after event happens (see command after below).
  • There are 4 I/O ports (ABCD) and 256 EEPROM bits (1 to 256).
  • The code consists of a sequence of commands.
  • Everything after : is a comment.
  • Strings are enclosed in "s.
  • Spaces and tabs outside of strings are ignored.
  • Basic command syntax:
        command_name`(`param1`,` param2`,` ...`)`
    
  • Commands:
    • if(condition) commands [> else_commands];: Evaluates the given condition and takes the corresponding branch. The else branch is optional (as indicated by the [ and ]). The > is part of the syntax and indicates the start of the else branch. The ; marks the end of the if command.
    • on(port1, port2, ...): Sets the given ports to 1.
    • off(port1, port2, ...): Sets the given ports to 0.
    • print("string" or codition, ...): Evaluates the conditions and prints the concatenation of all params to stdout (only useful in singleplayer).
    • after(time, "more commands"): Executes the commands in the string after the given time in seconds. There can only be one waiting after event at once. Warning: This is not reliable, ie. minetest.after is used.
    • sbi(port_or_eeprom, condition): Evaluates the condition and sets the port or EEPROM bit to the resulting value. Note: EEPROM indices don't use # here, ie. it's sbi(1, #2), not sbi(#1, #2).
  • Conditions (sorted by descending precedence; they are all evaluated from left to right):
    • 0, 1: constant
    • A, ..., D: value of a port. Takes writes that already happened during the current execution into account.
    • #1, ..., #256: value of an EEPROM bit. Takes writes that already happened during the current execution into account.
    • !condition: negation (can only be applied once, ie. not !!1)
    • condition1 = condition2: XNOR (equality)
    • condition1 op condition2 where op is one of:
      • &: AND
      • |: OR
      • ~: XOR (inequality)
    • Note: Explicit precedence using parentheses is not supported.