arduino 在外面的函数使用 Serial.print();

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arduino 在外面的函数使用 Serial.print();相关的知识,希望对你有一定的参考价值。

初学Arduino 想把 结构弄的清晰点。 定义一个头文件 然后在cpp文件中实现头文件的方法。 其中一句话是
Serial1.print("hello"); 会包 'Serial1' was not declared in this scope. 但是 如果把Serial1.print("hello");放在 主程序 loop() 中之行就没问题。

是不是 在cpp 文件中少了个头文件 像Arduino.h 之类的 求大神

对,
h 里面得定义个类.有private public 之类的方法.
看看这个对你应该会有帮助.
http://www.geek-workshop.com/thread-192-1-1.html
参考技术A 需要帮你做设计吗

在外部覆盖 python 模块函数

【中文标题】在外部覆盖 python 模块函数【英文标题】:Override python module function externally 【发布时间】:2018-12-10 22:12:13 【问题描述】:

是否可以在不修改给定模块的情况下覆盖内部模块功能?

下面的例子是我能想象到的最好的简化。对于原始问题,请查看问题的结尾。

我有一个结构如下的包:

a
├── b.py
├── c.py
└── __init__.py

b.py 在哪里

from c import c_func

def b_func():
    print('b.b_func')
    return c_func()

c.py

def c_func():
    print('c.c_func')
    return 'return_c'

我想从外部 ma​​in.py

修改对 c_func() 的内部调用
import a
from a.b import b_func

print('Calling b_func without modification')
solution = b_func()
print(solution)

# Trying to modify the internal function
print('Calling b_func with modification')
old_c_func = a.c.c_func

def new_c_func(*args, **kwargs):
    print('do something in new_c_func')
    return('return_new_c')

a.c.c_func = new_c_func

solution = b_func()
print(solution)

前面的代码输出如下

Calling b_func without modification
b.b_func
c.c_func
return_c
Calling b_func with modification
b.b_func
c.c_func
return_c

但我会期待

Calling b_func without modification
b.b_func
c.c_func
return_c
Calling b_func with modification
b.b_func
do something in new_c_func
return_new_c_func

最初的问题与 Scipy 的私有函数有关,但我认为我的问题的答案概括为以下问题:

import scipy

# Stack calls
# minimize calls scipy.optimize._minimize_trust_ncg
# See: https://github.com/scipy/scipy/blob/2526df72e5d4ca8bad6e2f4b3cbdfbc33e805865/scipy/optimize/_minimize.py#L463
# _minimize_trust_ncg calls scipy.optimize._trustregion._minimize_trust_region
# See: https://github.com/scipy/scipy/blob/2526df72e5d4ca8bad6e2f4b3cbdfbc33e805865/scipy/optimize/_trustregion_ncg.py#L39
from scipy.optimize import minimize

old_minimize_trust_region = scipy.optimize._trustregion._minimize_trust_region

def new_minimize_trust_region(*args, **kwargs):
    print('new function')
    return old_minimize_trust_region

scipy.optimize._trustregion._minimize_trust_region = new_minimize_trust_region

x0 = [2]
fun = lambda x: x**2 + 42
jac = lambda x: 2*x
hess = lambda x: 2

method = 'trust-ncg'
solution = minimize(fun, x0, method=method, jac=jac, hess=hess)

print(solution)

【问题讨论】:

我发现如果我通过 import c 修改 b.py 中的导入,则该示例有效。然后调用函数 c 为return c.c_func()。但是,我想在不修改包 a 的任何部分的情况下做同样的事情。 供以后参考,请尽量提供更简洁的例子 【参考方案1】:

我通过更改要修改的函数的属性code找到了一个临时解决方案。以下代码按需要工作:

import a.b
import a.c

print('Calling b_func without modification')
solution = a.b.b_func()
print(solution)

# Trying to modify the internal function
print('Calling b_func with modification')

def new_c_func(*args, **kwargs):
    print('do something in new_c_func')
    return('return new_c_func')

a.c.c_func.__code__ = new_c_func.__code__

solution = a.b.b_func()
print(solution)

我仍然缺少完整的解释并知道代码是否合适,但它按预期工作。我受到 *** 问题 Can you patch just a nested function with closure, or must the whole outer function be repeated?

的启发

【讨论】:

以上是关于arduino 在外面的函数使用 Serial.print();的主要内容,如果未能解决你的问题,请参考以下文章

Arduino 中文字符串遍历截取

功能中的代码在运行时不会运行。如果写在外面的功能

在外部覆盖 python 模块函数

Arduino-中断

从Ethernet-Shield Arduino运行远程PHP脚本

AVR开发 Arduino方法 模数转换子系统