问题标签 [arduino]

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 投票
2 回答
1370 浏览

iphone - 为 iPhone 制作硬件

我非常清楚我构建软件以利用他们通过 EAAccessory 和兄弟与 iPhone 配合使用的硬件设备这一事实。

如果我想将 Arduino 项目与 iPhone 连接,我不清楚从哪里获得硬件规格?

0 投票
5 回答
4482 浏览

c++ - 使用 Arduino 和 C++ 进行字符串操作

我正在尝试在 C++ 中操作字符串。我正在使用 Arduino 板,所以我可以使用的东西有限。我还在学习 C++(抱歉有任何愚蠢的问题)

这是我需要做的:我需要将每小时英里数发送到 7 段显示器。所以如果我有17.812345这样的数字,我需要将17.8显示到7段显示。似乎最有效的方法是首先乘以 10(这是将小数点右移一位),然后将 178.12345 转换为 int(将小数点去掉)。我坚持的部分是如何分解 178。在 Python 中,我可以对字符串进行切片,但我找不到任何关于如何在 C++ 中执行此操作的信息(或者至少,我找不到合适的搜索词为了)

有四个 7 段显示器和一个 7 段显示控制器。它的测量速度可达每小时十分之一英里。非常感谢您提供的帮助和信息。

0 投票
4 回答
5472 浏览

c++ - C++“未在此范围内声明”编译错误及修改提示

我正在尝试修改此代码以使其在 Arduino Mega 上工作。我对C非常陌生,所以我可能犯了一些重大错误。顺便说一句,这是一个自平衡滑板。:P

此代码取自 ATmega32(来自:[url= http://sites.google.com/site/onewheeledselfbalancing/Home/twin-wheel-self-balancing-skateboard-lightweight-version/code4]http://sites .google.com/site/onewheeledsel...t-version/code4[/url] 我正试图让它在 Arduino Mega 上工作。

此代码是为 ATmega32 开发板编写的 http://www.active-robots.com/products/controllr/m32db.shtml

谢谢!

这是我遇到的第一个错误:

在函数“void timer_init()”中:错误:“TCCR0”未在此范围内声明在函数“int main()”中:

有人可以解释我有什么问题吗?我几乎是编程的初学者,但我读过很多书/网站,而且我学得也很快!^^ 这是完整的代码(很长):

定义 CLOCK_SPEED 16000000

定义 OCR1_MAX 1023

typedef 无符号字符 u8; 无效 set_motor_idle(无效);无效初始化端口(无效);浮动级别=0;浮动油门踏板;浮动aa;浮动加速;浮动 x_acc; 浮动累加器;浮动 x_accdeg;

浮法陀螺;

浮动 gangratedeg; 浮动 gangraterads; 浮动 ti = 2.2;

浮动整体增益;浮动增益控制;浮动电池电压 = 24;浮动陀螺仪;浮动角度;浮动角度;浮动平衡扭矩;浮动软启动;

浮动cur_speed;浮动周期时间= 0.0064;浮动平衡点;float a0, a1, a2, a3, a4, a5, a6;//加速度计的Savitzky-Golay变量

诠释我; 诠释 j; 整数提示;void InitPorts(void) { PORTC=0x00; //端口 C 上拉设置为低(无输出电压)以 DDRC=0xFF 开始;//端口 C 引脚都通过端口 C 方向寄存器设置为输出 //PORTC |= (1<

DDRA=0x00;//所有端口 A 引脚设置为输入 PORTA=0x00; //端口A输入上拉设置为低上拉

DDRD=0xFF;//配置所有端口D引脚为输出作为OCR1A(PinD5)和OCR1B(Pin D4)正常工作的前提

端口B=0x00;//端口 B 上拉设置为低(无输出电压)以 DDRB=0xFF 开始;//所有端口B引脚设置为输出

} /* IO:我正在使用带有外部晶体时钟的 ATMega32 16MHz。OSMC 电机控制器 PC4 板载 LED PD5/OC1A ALI -> OSMC 引脚 6 PD4/OC1B BLI -> OSMC 引脚 8 PC1 禁用 -> OSMC 引脚 4 PC2 BHI -> OSMC 引脚 7 PC3 AHI -> OSMC 引脚 5 的新计划引脚排列PA6/ADC6 Vbatt/10 -> OSMC pin 3 PA1/ADC1 pitch rate gyro PA0/ADC0 accelerometer / void adc_init(void) { /关闭模拟比较器,因为我们不使用它 / ACSR = (1 << ACD); /选择PA0 /ADMUX = 0;ADMUX |=(1< 将 ADC 预分频器设置为 128,启用 ADC,并开始转换/ ADCSRA = 0 | (1< /等到虚假的第一次转换完成 */ while (ADCSRA & (1 <<

uint16_t adc_read(uint8_t channel) {
/* 选择通道/ ADMUX = 通道;ADMUX |=(1< 开始转换/
ADCSRA |= (1 << ADSC); /
等待转换完成/ while (ADCSRA & (1 << ADSC)) { } /返回结果 */ return ADCW; }

/* 每秒 156 个周期,每个周期 6.4ms 在示波器上测量 */ /* 读取所有 ADC 输入并进行一些转换 */ void sample_inputs(void) {

=(浮点数)adc0;对于 (j=0; j<7; j++) { adc1 = adc_read(1); //陀螺针 PA1 gyrosum = (float) gyrosum + adc1; //使用陀螺仪每个循环平均7个样本,因此它在程序的每个循环中都得到完整的更新}

位置 PA2*/ adc3 = adc_read(3); /* 位置杆拉回位置 PA3*/ adc4 = adc_read(4); /* Throttle_pedal 位置 PA4*/ adc5 = adc_read(5); /* 位置杆向前推位置 PA5*/ //adc6 = adc_read(6); /* Vbatt 输入来自 OSMC(目前未使用)位置 PA6*/ //Sav Golay filter for accel only a0 = a1; a1 = a2; a2 = a3; a3 = a4; a4 = a5; a5 = a6; a6 = (float) accelraw; accsum = (float) ((-2*a0) + (3*a1) + (6*a2) + (7*a3) + (6*a4) + (3*a5) + (-2*a6)) /21; //Sav Golay计算

//平滑任何电压尖峰并给出范围 0-3 Throttle_pedal=(float) Throttle_pedal*0.9 + 0.1*adc4/341; //平滑任何电压尖峰并给出范围 0-3

//如果松开死人按钮,则切断电机 //(增益控制变量也通过此按钮连接到 adc2 if (adc2<100) { Throttle_pedal=0.001; gaincontrol=0.001; } wholegain = gaincontrol*softstart; //如果杠杆向后拉或向前推或不做任何事情怎么办:Balance_point = 514; if (adc3>100) Balance_point=534;

如果(adc5>100)平衡点=494;

用示波器测量循环时间

/ ACCELEROMETER信号处理//减去偏移量/x_acc=(float) accsum - Balance_point; //accsum 是加速度计的 SG 值,不是真正的“总和”,因此如果 (x_acc<-250) x_acc=-250; 则无需除以 7;//如果 (x_acc>250) x_acc=250; // 将加速度值限制在 -250 到 +250 的范围内(单向倾斜 80 度)/* 加速度计角度变化在 0-30 度(sin theta)范围内每度倾斜约 3.45 个单位 将倾斜度转换为加速度计传感器的倾斜度。Sin 角度大致 = 小角度的角度,所以不需要做三角函数。下面的 x_acc 现在是 DEGREES*/

x_accdeg= (float) x_acc/-3.45; //减号校正了从后到前的加速度计安装!

即我要求的零点是读数减去 512*/

/数据表中每度每秒 20mV 的陀螺角度变化给出每秒角度变化 4.096 个单位(在 0 - 1023 范围内)的变化 这将陀螺角度的变化率限制为仅小于其最大变化率实际上能够测量(100度/秒)。请注意,所有这些分数都会在稍后被四舍五入为整数,然后再发送到 PWM 发生器,而 PWM 发生器又连接到电机控制器/ gangleratedeg=(float)((gyrosum/7) - 508)/4.096; //gyrosum 是一组 7 个样本的总和,因此除以 7 得到陀螺值 if (gangleratedeg < -92) gangleratedeg=-92; 如果 (gangleratedeg

92) gangleratedeg=92 /我在每个主程序周期打开和关闭端口 B2,以便我可以将示波器连接到它并计算程序周期时间我使用周期时间来计算每个周期的陀螺角度变化,你必须知道这个时间间隔的长度/ PORTB &= (0<

/ ti 表示“i”或积分因子的缩放比例(当前为 2.2) gyroangledt 是自上次 CYCLE 以来陀螺传感器的角度变化,其中 ti 是比例因子(理论上应该约为 1,但 2.2 会使电路板感觉更紧)
ganglerate 是现在以度/秒为单位 aa 改变时间常数,即较小的 aa 值使加速度计时间常数更长,因为它会缓慢地校正陀螺仪漂移
/

aa=0.005;gyroangledt = (float)ti cycle_time gangleratedeg;
gangleraterads=(float)ganglerateeg*0.017453;

/ DEGREES 中的新角度是旧角度加上自上一个周期以来陀螺仪的角度变化,其中考虑了一点新的加速度读数/ 角度 = (float)((1-aa) * (angle+gyroangledt)) + (aa * x_accdeg ); //主要的角度计算函数*/ //将角度从度数转换为弧度

+ (0.5*gangleraterads);

cur_speed = (float)(cur_speed + (Throttle_pedal * balance_torque * cycle_time)) * 0.999;

/*电平值从-1到+1,代表要发送到电机的占空比。转换为弧度有助于我们保持在这些限制水平 = (balance_torque + cur_speed) * 总体增益;

}

无效 timer_init() { TCCR0 = 0 | (1<

// PWM 模式为“PWM,相位校正,10 位”TCCR1A = 0 | (1<

(1<

无效 set_motor()

/* leveli 项是从 -1023 重新调整到 +1023 的级别项,作为准备发送到依次连接到 OSMC 的 PWM 电机控制端口的整数*/ {

//if (level<-0.9) level= -0.9;//检查我们是否在合理的范围内 //if (level>0.9) level=0.9;

int16_t leveli = (int16_t)(level*1023); //注意这里我们将我们最终得到的浮点值作为“level”,我们将它乘以 1023,然后将其变成一个整数,然后将该值作为“leveli”输入 PWM 发生器

if (leveli<-1020) leveli=-1020;//再次检查我们是否在合理的 PWM 限制范围内,因为不想突然被抛出板子 if (leveli>1020) leveli=1020;

/在端口 B1 上设置 LED 或蜂鸣器,如果要传递的扭矩超过最大可能的 50%,则警告我减速。这样做的原因是你总是需要一些备用电机功率,以防你开始以速度向前倾斜如果电机已经完全运转,您将要高速摔倒!有些人使用自动提示程序来自动限制最高速度。现在我会这样做更容易/

if (level<-0.7 || level>0.7) {
PORTB |= (1< PORTB &= (0<

软启动=(浮点)软启动+0.001;如果(软启动>1.0)软启动=1.0;

OSMC 工作,两者都关闭以关闭电机/*注意:不知道为什么,但要停止电机切断方向改变,我最终将 AHI 和 BHI 硬线连接到 +12V//通过设置 PinC1 禁用 OSMC输出为零,1 将禁用 OSMC*/ PORTC |= 0x0c;//使 C1 拉低,以便取消禁用 OSMC,即启用它。PORTC &= ~0x02; //disable is off if (leveli<0) { OCR1A = -leveli; // ALI 是 PWM 倒退,因为 leveli 变量是一个负符号值,在这里保留负号!OCR1B = 0;// BLI = 0 } else { OCR1A = 0; // ALI = 0 向前,因为 leveli 变量是一个正符号值 OCR1B = leveli; // BLI 是 PWM } }

int main(void) { InitPorts();

adc_init();

timer_init();

/*初始倾斜启动代码在板倾斜到一侧时打开微型,骑手即将踏上它,如果倾斜角穿过零(中)点平衡算法开始运行,否则永远锁定在这个循环中,直到它倾斜到水平位置当骑手上车*/tipstart=0;加速 = 0;

而(提示开始<1){

// 你需要这个来让 SG 过滤器在你第一次打开机器时达到适当的稳定值,然后再查看 accsum 的值(如下)。

for (i=0; i<20; i++) {
sample_inputs();
}

if (accsum<504 || accsum>524) { //
if (x_accdeg>0) { tipstart=0; } 其他 {tipstart=1;
软启动=0.4;} }

角度=0;cur_speed=0;/* 倾斜起始代码结束。如果超过此点,则机器已变为水平并处于活动状态*/

sei();

而(1){样本输入();

设置电机();

} }

0 投票
4 回答
2593 浏览

c - 编码 AVR ATmega32 和 Arduino Mega 之间的主要区别是什么?

我正在尝试修改此代码以使其在 Arduino Mega 上工作。我对C非常陌生,所以我可能犯了一些重大错误。顺便说一句,这是一个自平衡滑板。

此代码取自 ATmega32(来自此处),我正试图使其在 Arduino Mega 上工作。

此代码是为ATmega32 开发板编写的。


我做了一些修改(纠正了一些错误),但最后我遇到了:

在函数'int main()'中:
错误:重新定义'int main()

这是完整的代码:

0 投票
3 回答
2812 浏览

qt - 列出机器的串口

我有一个通过 USB 连接的基于 Arduino 的设备。

我想QExtSerialPort在插入时使用(或任何必要的)从我的 Qt 4 应用程序中检测它。

如果这不可能,我想我可以以某种方式获取系统端口名称的列表,然后尝试所有这些名称以搜索我的 Arduino(我将在其中实施某种握手程序以使其正确检测到它)。我对这种方法的担忧是,如果我以不同的波特率发送某种握手确认,我不确定设备(例如打印机)是否会损坏。

所以,我真的不知道从哪里开始。哪个是最好的方法?我将如何实施它?

0 投票
1 回答
3202 浏览

c++ - Arduino Web 客户端类不工作

我正在尝试使用 Arduino 客户端类从 Internet 获取 HTML 页面(来自 Arduino 库本身的示例),但它不起作用(连接未建立)。

它在以下方面失败:

我已经尝试过 Ethernet 和 Ethernet2 库。

我的Arduino开发平台版本是0017,操作系统是Windows XP。

以下是我的内联代码和配置:

0 投票
3 回答
21316 浏览

java - Java RXTX 和 Arduino 之间的串行通信

我正在尝试使用串行端口在我的 PC(使用 Netbeans 和 RXTX 的 Windows 7)与 Arduino Pro 之间进行通信。Arduino 实际上是使用 FTDI 电缆连接到 PC 的。

该代码基于此处找到的 Java SimpleRead.Java。

目前,Arduino 只是在启动时打印出一个字符串。我的 Java 程序应该打印已读取的字节数,然后打印出内容。Java程序可以工作,有点......

如果字符串很长(> 10 个字节左右),输出将被分解。

所以如果我在 Arduino 上打印

我的 Java 程序的输出可能类似于:

或者

我认为这是一个时间问题,因为当我使用调试器手动检查代码时,结果字符串始终是它应该是的:一个 20 字节的字符串。

我一直在搞砸各种事情,但我无法解决问题。

这是给我带来问题的代码部分:

0 投票
3 回答
1728 浏览

c - 将代码从 ATmega32 修改为 Arduino Mega - 函数“main”中的错误,即使没有

我正在尝试修改此代码以使其在 Arduino Mega 上工作。我对C非常陌生,所以我可能犯了一些重大错误。顺便说一句,这是一个自平衡滑板。

这段代码取自 ATmega32(从这里开始,我试图让它在Arduino Mega上工作)。

此代码是为ATmega32 开发板编写的。

但是我遇到了这个错误:

o:在功能main':</br> C:\Users\*******\AppData\Local\Temp\build27006.tmp/Test2.cpp:406:</br> undefined reference to设置中'

怎么来的?我什至没有setup在这里参考!

这是我的代码:

顺便说一句,我正在使用Arduino 编译器(您可以在下载 Arduino 软件中找到它)。

0 投票
3 回答
4969 浏览

c++ - 为 Arduino 创建库

我想为我的 Arduino(头文件和类文件)编写一个库,但我不知道该工作使用什么工具以及如何测试和调试它们。

Arduino IDE 只是帮助编写用于直接引导加载的普通程序,而不是完整的项目管理事情(如果我错了,请纠正我并适当地参考相关参考资料)。

请帮忙。

0 投票
3 回答
1123 浏览

c++ - C++ 函数调用中的字符串引用未更新

我正在编写一个 arduino 库来在网络上发布 http 请求。

我正在使用来自http://arduino.cc/en/Tutorial/TextString的 String 类

当我在函数调用后引用我定义的字符串对象时,我的代码表现得很奇怪。

这里实际上我正在尝试获取我的 GET 请求的正文并从 http GET 请求的响应中删除 http 标头。

以下是说明:

方法调用:

输出

方法说明:

输出:

从示例中可以看出,字符串引用对象在 Get 方法中为我提供了正确的字符串,但是当 Get 方法返回时,字符串内容的引用发生了变化。