问题标签 [arduino-due]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
128 浏览

c++ - 如何制作类型定义函数的函数指针数组

我正在尝试实现这个库的 NeopixelAnimator 类:https ://github.com/Makuna/NeoPixelBus 。

我创建了一个动画器类,其中包含库的 NeoPixelAnimator 类的一个实例。要运行动画,我必须调用:.StartAnimation(uint16_t indexAnimation, uint16_t duration, UpdateCallback animUpdate).

我的目标是制作一系列动画,这些动画一个接一个。第二个动画应该在第一个动画完成后开始。由于库本身不提供执行此操作的方法,因此我创建了一个表示队列的向量,它包含要设置动画的动画及其颜色。

问题是该.StartAnimation()函数需要一个UpdateCallback参数,该参数是一个回调函数,每当调用该函数时就会触发该.UpdateAnimations()函数。

动画将由连接到调用.add()函数的 Arduino Due 的开关触发(不在示例代码中)。现在,我想通过在.init().

我的计划是创建一个指向这些回调函数的函数指针数组。问题是我无法让数据类型匹配。

帮助将不胜感激。此外,我们将不胜感激有关如何处理此类问题和构建代码的反馈。

我在 Arduino Due 板上使用 platformIO 和 Arduino 库。

定义.h:

动画师.h:

动画师.cpp:

主.cpp:

平台io.ini:

调用animations.StartAnimation(0, _animationQueue[0][1], _callbackPt[_animationQueue[0][0]]);不会给出任何编译错误。尝试在函数指针数组中设置回调函数会:

“”类型的值AnimUpdateCallback (Animator::*)(const AnimationParam &param)不能用于初始化“ AnimUpdateCallback (*)(const AnimationParam &param)”类型的实体

我的主要困惑是:

  • 我的类中回调函数的数据类型应该是(voidAnimUpdateCallback)?

  • 为什么(const AnimationParam &param)必须在末尾添加(*_callbackPt[NUMBER_OF_ANIMATIONS]),否则我会收到数据类型也不匹配的错误

0 投票
1 回答
77 浏览

arduino - 使用 Arduino TFT 开始新行

我正在尝试在 1.8" TFT 显示器上写入。我试图让 MCU 在每一行上写入,并在到达指定的屏幕“底部”后开始新的一行,但它写入下一行而不是下一行,类似于下面。

而我正在寻找

据我所知,if 语句没有重置,因此程序写入并将光标设置回下一行的顶部。

0 投票
1 回答
669 浏览

qt - SPI raspberry pi (master) & arduino due (slave)

我正在尝试与 SPI 沟通 raspi 和到期。Raspi 是主人,due 是奴隶。我可以毫无问题地通过 SPI 从 raspi 发送字节到到期。但是我在 DUE 方面需要的是,当我收到来自 Raspi 的数据时,我会从 DUE 向 Raspi 发送一个新数据。这是我的代码;

Raspi QT 接线 pi(主)

Arduino到期代码(从)

使用这些代码,我可以成功地将字符从 Raspberry 发送到 DUE,但只能从 DUE 接收“0 0”。但是如果我将 Raspberry pi 上的 MOSI 和 MISO 引脚连接在一起,我将无法成功接收/返回“1 2”

编辑:我用 arduino MEGA 更改了 arduino DUE 并在 gammon 上使用“SLAVE”草图...... GAMMON SLAVE SKETCH 当然,覆盆子方面没有任何变化,一切正常。所以问题出在DUE方面......

0 投票
1 回答
320 浏览

arduino - 带有 2 个带 Arduino 的光电传感器的读取速度并在读取后显示速度

我有 2 个带 NPN 输出的光电传感器:查看数据表,它实际上可能是 LOW(第 14 页 NPN 输出):https ://mouser.com/datasheet/2/307/e3fb_photoelectric-1189416.pdf第 14 页。

2 个传感器相距 152.4 毫米。基本上我想在第一个门被触发时启动一个计时器,并在第二个门被触发时结束,然后将设定的距离(152.4 毫米)除以每个门之间的行进时间,并以米秒为单位输出速度。传感器由 24 VDC 电源供电,NPN 输出电压可高达来自集电极的 3V DC。我首先测试了传感器,以在传感器前面有物体并且能够触发 LED 时触发板载 LED 闪烁:

所以看起来电压在正确的范围内,可以读取为高或低。

所以接下来我尝试读取速度。代码如下:

然而,我在串行监视器中看到的是:

4294967295 出现在没有对象存在并且似乎输出 0 时。我已经调整了几次方程,但我似乎没有得到任何有意义的东西。任何帮助是极大的赞赏。谢谢!

0 投票
1 回答
1100 浏览

arduino - 在 Arduino Due 上设置正确的 ADC 预分频器在定时器和中断驱动的多通道 ADC 采集中

对于 Arduino Due: https ://forum.arduino.cc/index.php?topic= 589213.0,我正在尝试跟踪、调整、理解(并稍微清理一下)那里可用的代码的变体 。我不喜欢论坛的形式,因为事情最终被埋得很深,所以在这里问。不幸的是,这意味着在问题之前有很多解释。如果您认为在这里发布它是错误的,请告诉我,我可以移动。

基本上,这个想法是使用基于定时器的触发将多个 ADC 通道记录在缓冲区中。有一点设置:

然后将时间计数器 0 通道 2 设置为触发 ADC 转换的正确频率:

最后,这可用于触发 ADC:

并且可以在相应的 ISR 中捕获 ADC 输出:

我认为这很好理解,但我有一个问题:预分频器的设置。

  • 如果我理解网上的讨论,应该设置预分频器frq_ADC >= sample_rate * nbr_channels,基本上是因为芯片只是通过几个通道多路复用ADC

  • 如果我理解得很好,我们希望在给定先前约束的情况下将这样的预分频器值设置得尽可能高,以使 ADC 频率尽可能低,因为这样可以提高 ADC 转换质量

那正确吗?

问题是我对如何设置预分频器以及什么值对应于什么感到困惑,因为我在数据表中找到的内容与我阅读的其他一些在线回复不一致。

从数据表https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-11057-32-bit-Cortex-M3-Microcontroller-SAM3X-SAM3A_Datasheet.pdf:“ADC 时钟范围在 MCK/2 之间,如果 PRESCAL 为 0,并且 MCK/512,如果 PRESCAL 设置为 255 (0xFF)。"。这与我在第 1334 页上找到的内容一致:“ADCClock = MCK / ((PRESCAL+1) * 2)”。但是第1318页写着转换率为1MHz。那么这与 Due 上 84MHz 的 MCK 频率如何兼容呢?84/2 = 48MHz,84/512 = 0.164MHz,高频值太高。

然后为了增加混乱,我发现了这个问题:https ://arduino.stackexchange.com/questions/12723/how-to-slow-adc-clock-speed-to-1mhz-on-arduino-due/21054# 21054似乎也与 1MHz 上限冲突。

知道我在哪里误解了一些东西吗?(还有关于程序一般工作的更多评论吗?)。

0 投票
1 回答
579 浏览

arduino - 如何在 arduino-due 上使用选定地址写入/读取 arduino 闪存

我需要知道我们是否可以在选定的地址写入或读取 Arduino Due 的闪存,无需 EEPROM。我知道我们有 PROGMEM,但我无法在两个不同的地址写入两个字符串。当我Hello在地址写入闪存IFLASH0_ADDRHi写入地址IFLASH0_ADDR时,我无法将这些字符串读回,因为库DueFlashStorage不适用于那些选定的地址。

拜托,我真的很想知道我该怎么做。

0 投票
1 回答
312 浏览

c++ - arduino due 和 arduino mega 2560 之间的 I2C 连接

我正在尝试将大型设备与每个 I2C 的到期接口连接起来。我已经做好了:

  • 理由是共享的。
  • mega 2560(不是 20/21)上的 SCL/SDA 在到期时连接到 SCL1/SDA1。到期的 SCL/SDA (20/21) 连接到工作正常的 imu bno055。
  • 没有连接上拉电阻。

在兆我做:

到期:

没有 i2c,两个板都可以正常工作。我究竟做错了什么?这仅仅是因为我没有上拉电阻吗?如果是,我应该如何添加它/它们?

编辑:我遵循了另一条路径并改用串行连接。

0 投票
0 回答
50 浏览

c - Understanding TC interrupts in a measurement function

I am trying to understand the use of the interrupt for LDRBS in this specific pseudocode. Our task is to measure the temperature using a temp sensor.

Here is the pseudocode steps:

Initialization

Starting the measurement

Interrupt Handler

The steps that I don't really understand is nr 8 in the initialization and nr 3 in the measurement function. I know for step 3 I am supposed to use

But I don't understand why this step is necessary, I want to know what function the interrupt for LDRBS has in TC0

0 投票
1 回答
157 浏览

visual-studio-code - 使用 Atmel-Ice 在 Visual Studio Code 中调试 Arduino Due

我试图找出哪些外部硬件调试器与 Visual Studio Code 和 JTAG 兼容。我正在查看 Atmel-Ice,但不清楚它是否可以与 Visual Studio Code 集成。

有什么提示可以让我开始吗?

谢谢

-约翰

0 投票
0 回答
213 浏览

arduino - 带有 SAM3X8E(Arduino Due)的 FreeRTOS 10 xTaskCreate 未运行

我正在Microchip Studio 7.0.2542通过 SAM 端口使用 Atmel-ICE JTAG 调试器——所有这些都已连接并且可以单步执行程序。

尽管返回,通过创建的计时器xTimerCreate不会触发,我也无法闯入 FreeRTOS 任务,而且保持在自己的循环中(如预期的那样,我的程序永远不会结束)。xTaskCreate1vTaskStartScheduler

请提问

注意:我创建了一个File -> New -> Example Project -> FreeRTOS Peripheral Control Example - Arduino Due/X并且项目运行,我可以成功地打破任务。

我在初始化和任务创建方面的主循环似乎与演示相同,但​​演示还可以,而我的不行。

请问我做错了什么,或者进一步调试为什么我的任务没有运行的指针?我已经展示了我是如何创建项目的,并FreeRTOSConfig.h在这个问题的末尾包含了默认/未触及的项目。

我在构建过程中为我的示例采取的步骤如下:

它是通过选择File -> New -> Project -> GCC C ASF Board Project -> Select by Board = Arduino Due/X - ATSAM3X8E扩展名创建的Atmel ASF 3.50.0

我确认我通过 ASF Board Wizard 选择了正确的板,然后我通过拉入 FreeRTOS 10ASF Wizard并添加FreeRTOS mini Real-Time Kernel (service) 10.0.0并点击应用。

所有源文件都在Solution -> src -> ASF包括freertos文件下导入。

然后我添加上面的代码,并使用下面的默认配置文件: