Tag: arduino

Arduino中的core.a(main.cpp.o)错误是什么?

我在Arduino中编写代码,突然间我收到了这个错误: core.a(main.cpp.o): In function `main’: D:\Personal\Arduino\arduino-1.0.4-windows\arduino- 1.0.4\hardware\arduino\cores\arduino/main.cpp:11: undefined reference to `setup’ D:\Personal\Arduino\arduino-1.0.4-windows\arduino-1.0.4\hardware\arduino\cores\arduino/main.cpp:14: undefined reference to `loop’ 我不知道这意味着什么。 这是我的代码: #ifndef dht_h #define dht_h #if ARDUINO < 100 #include #else #include #endif #define DHT_LIB_VERSION “0.1.05” #define DHTLIB_OK 0 #define DHTLIB_ERROR_CHECKSUM -1 #define DHTLIB_ERROR_TIMEOUT -2 #define DHTLIB_INVALID_VALUE -999 #include #define TIMEOUT 10000 class dht { public: int read22(uint8_t […]

AT命令响应(理解Arduino上代码执行的顺序)

我正在从Arduino Uno / Nano(ATmega328)向ESP8266发送AT命令并试图解析收到的字符串的结尾,以确定ESP如何反应以及它是否成功(以及它是否已准备好接收另一个命令然而)。 我知道解析AT命令响应之前已经讨论过了: 获取AT命令响应 但是我有一个特定的问题,那里的其他人可能也会感兴趣… 首先,调用一个函数,它将AT命令发送到ESP以连接到ThingSpeak(数据记录服务器)。 这在手动模式下工作正常,并且在尝试解析响应时也连接但是它只解析返回的第一行。 例如,串行监视器中的预期输出将是: c AT+CIPSTART=”TCP”,”api.thingspeak.com”,80 CONNECT OK Connected to ThingSpeak! 其中c只是我输入的命令字符以启动连接。 但实际反应如下: c AT+CIPSTART=”TCP”,”api.thingspeak.com”,80 Cannot connect to ThingSpeak! CONNECT OK 这意味着解析函数在收到响应之前结束…如下面的代码所示,当前指定了10秒的超时。 即使有20秒的超时,同样的事情发生了,尽管事实上,当手动执行时,响应在大约一秒钟内到达。 只是为了测试解析函数,我尝试搜索”80″并返回true,因为这是在响应的第一行末尾找到的。 无论是搜索”OK”还是”OK\r\n” ,结果都是相同的,它返回false,然后收到其余的响应。 这是代码: boolean waitForResponse(String target, unsigned long timeout) { unsigned long startTime = millis(); String responseBuffer; char charIn; //keep checking for ESP response until […]

PHP中的XTEA加密和C中的解密

我正在尝试在网站和Arduino之间建立通信。 我需要validation从我的网站到Arduino的所有消息,所以我发现使用XTEA加密技术的时间更少。 我的网站PHP代码是: mcrypt_encrypt(MCRYPT_XTEA, ‘qwertyuiasdfghjk’, ‘asdfasdf’, MCRYPT_MODE_ECB); 其中“qwertyuiasdfghjk”是128位密钥,“asdfasdf”是64位消息。 在Arduino方面,我正在使用: void _xtea_dec(void* dest, const void* v, const void* k) { uint8_t i; uint32_t v0=((uint32_t*)v)[0], v1=((uint32_t*)v)[1]; uint32_t sum=0xC6EF3720, delta=0x9E3779B9; for(i=0; i<32; i++) { v1 -= ((v0 <> 5) + v0) ^ (sum + ((uint32_t*)k)[sum>>11 & 3]); sum -= delta; v0 -= ((v1 <> 5) + v1) ^ […]

xcode,带有arduino的c ++串口

我正在制作一个非常简单的c ++程序,它通过一个串口向arduino发送一个角度,然后arduino将这个角度应用到伺服电机上。 我知道Unix看到串口设备就像一个文件,实际上这是c ++代码: #include #include using namespace std; int main() { int angole; FILE * arduino; do { arduino = fopen(“/dev/tty.usbmodem3a21″,”w”); cout<>angole; fprintf(arduino,”%d”,angole); sleep(1); }while(angole>=0 && angole<=179); } 这是arduino的: #include Servo servo; const int pinServo = 2; int angle; void setup() { Serial.begin(9600); servo.attach(pinServo); servo.write(0); } void loop() { if(Serial.available()>0) { angle = Serial.read(); […]

为什么这个编译器障碍不强制执行排序?

我正在查看Atmel网站上的文档,我遇到了这个例子 ,他们解释了重新排序的一些问题。 这是示例代码: #define cli() __asm volatile( “cli” ::: “memory” ) #define sei() __asm volatile( “sei” ::: “memory” ) unsigned int ivar; void test2( unsigned int val ) { val = 65535U / val; cli(); ivar = val; sei(); } 在这个例子中,他们正在实现一个类似于关键区域的机制。 cli指令禁用中断,sei指令启用它们。 通常,我会保存中断状态并恢复到该状态,但我离题了…… 他们注意到的问题是,在启用优化的情况下,第一行上的除法实际上会在cli指令之后移动到。 当您尝试尽可能在最短的时间内进入关键区域时,这可能会导致一些问题。 为什么如果cli()MACRO扩展为内联asm明显破坏内存,这怎么可能呢? 编译器如何在此语句之前或之后自由移动? 另外,我修改了代码以在__asm volatile(“” ::: “memory”);forms的每个语句之前包含内存屏障__asm volatile(“” ::: “memory”); 它似乎没有改变任何东西。 […]

C – 如何使用PROGMEM存储和读取char数组

我有三个char数组,我不希望Arduino将它存储在SRAM中 ,所以我想使用PROGMEM来存储和读取flash 。 char *firstArr[]={“option 1″,”option 2″,”option 3″,”option 4”}; char *secondArr[]={“test 1″,”test 2”};

Arduino IDE可以用来开发普通的旧C程序吗?

我有一个简单的Arduino草图,跨越几个文件。 h文件中有一个函数签名,C文件中有一个定义。 如果我尝试编译(“validation”)草图,我会在C文件中定义的函数中得到“未定义的引用”错误。 将文件名从* .c更改为* .cpp可解决此问题,但我不想将该文件定义为C ++文件。 是否可以在Arduino中编译普通的旧C文件? 提前致谢。

如何停止循环arduino

我有这个循环,我将如何结束循环? void loop() { // read the pushbutton input pin: a ++; Serial.println(a); analogWrite(speakerOut, NULL); if(a > 50 && a < 300){ analogWrite(speakerOut, 200); } if(a = 300 && a <= 2499){ analogWrite(speakerOut, NULL); }

如何用C ++编写arduino

最近我一直在玩我的arduino,我想知道是否有某种方法可以用c ++编写arduino。 我一直在做的是使用vim中的c ++ /处理语言编程并使用makefile编译并上传到arduino。 但我的目标是能够使用类和所有优秀的C ++特性(或至少总和)来编程。 最终我甚至喜欢用原始c编程,我只是在找到如何做的麻烦。 如果有人能指出我正确的方向或帮助我,那将是很棒的。 谢谢! 〜迈克尔

永久改变参数值

我有一个函数检查,它接受一个布尔值作为参数,使用布尔值,然后更改它。 我总是将这个函数传递给一个全局变量,如: check(4, some_global_boolean, ‘a’); 并且我希望在调用“check”之后保持对变量的更改。 现在,改变不会超出这个函数调用。 我该怎么做呢? boolean check(int key, boolean prev_key_high, char c){ if (key == LOW) { if ( prev_key_high){ prev_key_high = false; Serial.println(c); return true; } } else { prev_key_high = true; return false; } }