コード例 #1
0
class EepromClass(ArduinoClass):
    class_name = "EEPROM"
    get = Function("get", [Variable("adress", uint16_t), Variable("target", uint32_t)])
    write = Function(
        "write", [Variable("adress", uint16_t), Variable("value", uint8_t)]
    )
    put = Function("put", [Variable("adress", uint16_t), Variable("source", uint32_t)])
    read = Function("read", [Variable("adress", uint16_t)], return_type=uint8_t)
    update = Function(
        "update", [Variable("adress", uint16_t), Variable("value", uint8_t)]
    )
    include = "<EEPROM.h>"
コード例 #2
0
 def __init__(self):
     self.classes = []
     self.definitions = []
     self.imports = []
     self.global_variables = []
     self.functions = []
     self.includes = []
     self.enums = []
     self.setup = Function(return_type=dt.void,
                           name="setup",
                           obscurable=False)
     self.loop = Function(return_type=dt.void,
                          name="loop",
                          obscurable=False)
コード例 #3
0
    def __call__(self,
                 count_vaiable,
                 continue_condition,
                 raising_value=1,
                 code=None):
        count_vaiable_code = partial(
            lambda_remove_tabs_newline,
            func=count_vaiable.initialize_code,
            remove_endtabs=False,
        )
        continue_condition = continue_condition.inline
        try:
            raising_value = 1 + raising_value - 1
            if raising_value < 0:
                raising_value = count_vaiable.set(count_vaiable -
                                                  abs(raising_value))
            else:
                raising_value = count_vaiable.set(count_vaiable +
                                                  raising_value)
        except:
            pass
        raising_value_code = partial(lambda_remove_tabs_newline,
                                     func=raising_value)
        inner_code = Function(code=code).inner_code
        # (lambda obscure, indentation: "") if code is None else code

        return super().__call__(count_vaiable_code, continue_condition,
                                raising_value_code, inner_code)
コード例 #4
0
    def generate_arduino_getter(self, arduino_getter):
        from arduino_controller.basicboard.board import (
            WRITE_DATA_FUNCTION,
            COMMAND_FUNCTION_COMMUNICATION_ARGUMENTS,
        )

        f = Function(
            arguments=COMMAND_FUNCTION_COMMUNICATION_ARGUMENTS,
            name="get_{}".format(self),
            code=() if arduino_getter is None else arduino_getter,
        )
        if arduino_getter is None:
            if self.add_to_code:
                f.add_call(
                    WRITE_DATA_FUNCTION(self, self.board.byte_ids.get(f)))
        return f
コード例 #5
0
    farray = acc.add(
        FunctionArray(
            "functionarray",
            arguments=[
                Array("data", dt.uint8_t, 0),
                Variable(type=dt.uint8_t, name="s"),
            ],
            return_type=dt.void,
            size=2,
        ))
    acc.add(Eeprom)
    func1 = acc.add(
        Function(
            name="testfunction",
            arguments=[array1, Variable("a2", dt.uint8_t)],
            return_type=uint16_t,
            code=var1.set(var1 + D1),
            variables=[(dt.uint8_t, "B", 1)],
        ))
    #   print(func1.arg1,func1.arg2)
    func1.add_call(
        var1.set(func1.arg2 * func1.var1),
        func1.arg1[var1].set(10),
        func1.arg1[2].set(var1 % 3),
        ((var1 | (D1 & var1)) ^ D1 + ~var1) >> 3,
    )

    acc.setup.add_call(
        func1(var1, D1),
        var1.set((var1 + D1) * 10),
        var1.set(var1 + (D1 * 10)),
コード例 #6
0
class SerialClass(ArduinoClass):
    _tempvar_T = Variable("var", T)
    class_name = "Serial"
    begin = Function("begin", Variable("var", uint32_t))
    end = Function("end")
    read = Function("read", return_type=int16_t)
    peek = Function("peek", return_type=int16_t)
    flush = Function("flush")
    print = Function("print", _tempvar_T)
    print_format = Function("print", [_tempvar_T, Variable("format", uint8_t)])
    println = Function("println", _tempvar_T)
    println_format = Function("println", [_tempvar_T, Variable("format", uint8_t)])
    write = Function("write", Variable("var", uint16_t))
    write_buf = Function(
        "write", [Array("buffer", uint8_t), Variable("length", uint16_t)]
    )
    available = Function("available", return_type=int16_t)
    readString = Function("readString", return_type=String)
コード例 #7
0
class ArduinoBaseClass(ArduinoClass):

    # Digital I/O
    INPUT = Variable("INPUT", obscurable=False)
    OUTPUT = Variable("OUTPUT", obscurable=False)
    INPUT_PULLUP = Variable("INPUT_PULLUP", obscurable=False)
    EXTERNAL = Variable("EXTERNAL", obscurable=False)
    LOW = Variable("LOW", obscurable=False)
    HIGH = Variable("HIGH", obscurable=False)
    true = Variable("true", obscurable=False)
    false = Variable("false", obscurable=False)

    digitalRead = Function("digitalRead", [(uint8_t, "pin")], uint8_t)
    digitalWrite = Function("digitalWrite", [(uint8_t, "pin"), (uint8_t, "value")])
    pinMode = Function("pinMode", [(uint8_t, "pin"), (uint8_t, "mode")])

    analogRead = Function("analogRead", [(uint8_t, "pin")], uint16_t)
    analogWrite = Function("analogWrite", [(uint8_t, "pin"), (uint8_t, "value")])
    analogReference = Function("analogReference", [(uint8_t, "pin")])

    random = Function("random", arguments=[], return_type=uint16_t)
    randomSeed = Function(name="randomSeed", arguments=[(uint32_t, "seed")])
    memcpy = Function(
        name="memcpy",
        arguments=[
            (uint8_t_pointer, "dest"),
            (uint8_t_pointer, "src"),
            (uint8_t, "size"),
        ],
    )
    millis = Function(return_type=uint32_t, name="millis")
    micros = Function(return_type=uint32_t, name="micros")
    max = Function(
        return_type=uint32_t,
        name="max",
        arguments=[(uint32_t, "val1"), (uint32_t, "val2")],
    )
    min = Function(
        return_type=uint32_t,
        name="min",
        arguments=[(uint32_t, "val1"), (uint32_t, "val2")],
    )
    delay = Function(name="delay", arguments=[(uint32_t, "millis")])
    delayMicroseconds = Function(
        name="delayMicroseconds", arguments=[(uint32_t, "micros")]
    )
    sizeof = Function(name="sizeof", arguments=[(uint32_t, "var")])
    map = Function(
        return_type=uint32_t,
        name="map",
        arguments=[
            (uint32_t, "value"),
            (uint32_t, "fromLow"),
            (uint32_t, "fromHigh"),
            (uint32_t, "toLow"),
            (uint32_t, "toHigh"),
        ],
    )
コード例 #8
0
 def __call__(self, *code):
     inner_code = Function(code=code).inner_code
     return super().__call__(inner_code)
コード例 #9
0
 def __call__(self, condition, code=None):
     inner_code = Function(code=code).inner_code
     condition = condition.inline
     return super().__call__(condition, inner_code)
コード例 #10
0
    def __init__(
        self,
        # for ArduinoVariable
        board,
        name,
        arduino_data_type=None,
        default=None,
        # for module_variable
        html_input=None,
        save=None,
        getter=None,
        setter=None,
        minimum=None,
        maximum=None,
        is_data_point=None,
        allowed_values=None,
        arduino_getter=None,
        arduino_setter=None,
        eeprom=None,
        changeable=None,
        add_to_code=None,
        html_attributes=None,
    ):

        # defaults
        if arduino_data_type is None:
            arduino_data_type = arduino_data_types.uint8_t
        if save is None:
            save = True
        if is_data_point is None:
            is_data_point = False
        if eeprom is None:
            eeprom = False
        if add_to_code is None:
            add_to_code = True

        ACCArdVar.__init__(self,
                           type=arduino_data_type,
                           value=default,
                           name=name)

        # self.add_to_code = add_to_code
        if is_data_point and setter is False:
            setter = None
            changeable = False
        if eeprom:
            save = False

        self.add_to_code = add_to_code
        if isinstance(allowed_values, ArduinoEnum):
            allowed_values = {
                key: val[1]
                for key, val in allowed_values.possibilities.items()
            }
        ModuleVariable.__init__(
            self,
            name=self.name,
            python_type=self.type.python_type,
            board=board,
            html_input=html_input,
            save=save,
            getter=getter,
            setter=setter,
            default=default,
            minimum=minimum,
            maximum=maximum,
            is_data_point=is_data_point,
            allowed_values=allowed_values,
            nullable=False,
            changeable=changeable
            if changeable is not None else arduino_setter != False,
            html_attributes=html_attributes,
        )

        self.eeprom = eeprom

        from arduino_controller.basicboard.board import (
            COMMAND_FUNCTION_COMMUNICATION_ARGUMENTS, )

        self.arduino_setter = (None if arduino_setter is False else Function(
            arguments=COMMAND_FUNCTION_COMMUNICATION_ARGUMENTS,
            name="set_{}".format(self),
            code=self.generate_arduino_setter()
            if arduino_setter is None else arduino_setter,
        ))
        self.arduino_getter = (None if arduino_getter is False else
                               self.generate_arduino_getter(arduino_getter))