我有一个Arduino Uno(很棒的小装置!).它有两个中断; 我们称他们为0和1.我使用attachInterrupt():http://www.arduino.cc/en/Reference/AttachInterrupt将一个处理程序连接到中断0,另一个处理程序用于中断1 .
中断0被触发,它调用它的处理程序,它执行一些数字运算.如果在触发中断1时中断0的处理程序仍在执行,会发生什么?
中断1中断中断0,还是中断1等待,直到中断0的处理程序执行完毕?
请注意,这个问题与Arduino有关.
embedded microcontroller arduino interrupt interrupt-handling
我最近对硬件编程很感兴趣,但我还没有开始.
我做了一些搜索工作,并且有一个模糊的想法:
Arduino是芯片和面包板的组合.
AVR是单芯片,需要购买面包板才能上手.
该陈述是真是假?
我想要某种方法来创建一个相当长的随机数序列,我可以向前和向后翻转.就像具有"下一个"和"上一个"按钮的机器一样,它会为您提供随机数字.
像10位分辨率(即0到1023范围内的正整数)就足够了,并且序列> 100k.这是一个简单的游戏类型的应用程序,我不需要加密强度随机性或任何东西,但我希望它感觉相当随机.我有可用的内存有限,所以我不能只生成一大块随机数据并通过它.我需要在"交互时间"中获取数字 - 我可以轻松地花几个小时思考下一个数字,但不是比这更舒服.最终它将在某种微控制器上运行,可能只是一个Arduino.
我可以用简单的线性同余生成器(LCG)来做到这一点.前进很简单,向后退我必须缓存最近的数字并间隔存储一些点,这样我就可以从那里重新创建序列.
但也许有一些伪随机发生器可以让你前进和前进?应该可以连接两个线性反馈移位寄存器(LFSR)以在不同方向上滚动,不是吗?
或者也许我可以使用某种哈希函数来填充索引号?我要先尝试一下.
还有其他想法吗?
我正在使用带有Firmata库的Arduino与C#应用程序进行通信,我想要消除COM端口配置组件,因为它可以在不同的机器之间进行更改...
是否有可能:
我已经将草图上传到Arduino Uno,其循环是这样的:
void loop(){
Serial.println("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
所以,现在,我不能再上传任何东西了,因为IDE说"端口已经在使用".
有没有办法在没有其他程序员的情况下"重置"Arduino?
编辑:
没有其他人使用串口,一切都很顺利,直到我上传上一个草图.
编辑:
我发现了一些有趣的东西:
我可以通过蓝牙将我的Android应用程序连接到我的Arduino.但是,它们之间不能传输数据.以下是我的设置和代码:
HTC Android v2.2,蓝牙伴侣黄金调制解调器,Arduino Mega(ATmega1280)
Android Java代码:
package com.example.BluetoothExample;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;
public class BluetoothExampleActivity extends Activity {
TextView myLabel;
EditText myTextbox;
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
Thread workerThread;
byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;
@Override
public void onCreate(Bundle savedInstanceState) { …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Arduino Uno,9DOF和XBee,我正在尝试创建一个结构,可以通过串行,逐字节发送,然后重新构造成结构.
到目前为止,我有以下代码:
struct AMG_ANGLES {
float yaw;
float pitch;
float roll;
};
int main() {
AMG_ANGLES struct_data;
struct_data.yaw = 87.96;
struct_data.pitch = -114.58;
struct_data.roll = 100.50;
char* data = new char[sizeof(struct_data)];
for(unsigned int i = 0; i<sizeof(struct_data); i++){
// cout << (char*)(&struct_data+i) << endl;
data[i] = (char*)(&struct_data+i); //Store the bytes of the struct to an array.
}
AMG_ANGLES* tmp = (AMG_ANGLES*)data; //Re-make the struct
cout << tmp.yaw; //Display the yaw to see if it's correct. …Run Code Online (Sandbox Code Playgroud) 所以我在eclipse中构建了一些Arduino代码,如你的第二个Arduino项目中所描述的那样,但每次我使用Arduino库时,例如SerialEclipse都会强调我的函数名称,声称它们无法解析.但是,代码实际上是编译的,所以我有点不知道为什么Eclipse认为函数丢失了.如果有人知道如何解决这个问题,将不胜感激.先谢谢.
编辑:我应该更具体,Eclipse强调Arduino库中的METHODS.因此,如果我使用Serial.println("hello");它,它强调println()并声称它无法解决.然后它编译得很好,并且该方法在上传到arduino板时起作用.
编辑2:我发现了我的错误,结果我试图在C文件中使用一些C++函数,而eclipse不喜欢它; 我改名为.cpp,所有的红色都消失了;)谢谢你的帮助!
我有几个与arduino有关的任务,但其中一个需要很长时间,所以我想用线程同时运行它们.我有一个Arduino Mega
[更新]最后四年后,我可以在我的arduino mega中安装FreeRTOS.这是一个链接