博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Arduino+OSC建立一个iPad铁路王国巡视机
阅读量:4692 次
发布时间:2019-06-09

本文共 4492 字,大约阅读时间需要 14 分钟。

翻译自:

简单介绍

 

这个教程告诉你怎样建立一个iPad控制的铁路王国。

假设你还不知道用Arduino进行工作,请阅读我的帖子。

http://v.youku.com/v_show/id_XODEwMTk4ODA4.html

1. 硬件设置

  • 展示出怎样连接到一起
  • 网络设置
  • 把伺服机附在铁路组件上(轨道,火车站)

2. 软件设置

  • 准确的Arduino代码
  • 试样的TouchOSC配置

1. 硬件设置

我们来看一下设置原理图是怎样连接的。

  • 一个伺服机连接到数字引脚19,20,21
  • 给Arduino Ethernet 指定一个IP 192.168.0.178
  • iOS将通过DHCP分配一个IP 192.168.0.12

硬件组件

组件 

你须要例如以下组件以构建你的设置:

1. Arduino 板(Mega2560,UNO...等)

2. 传感器插板(选用)

3. 无线模块或无线路由器(假设用的是有线Arduino网络,是选用的)

4. 低功耗伺服单元,推荐一个mini或微型伺服器

5. 电源,比如 无线,局域网,伺服器同一时候推荐选用7.4v

6. 启用无线 AP/路由。DHCP(用于iPad)

伺服器扩展线连接到数字引脚19,20,21.

网线连在无线模块到LAN模块之间。为什么?由于模块仅支持无线串口通信,所以它无法支持侦听网络socket。

因此,我把它作为一个无线AP配置,连接我LAN接口及我的路由器,你能够如你所愿使用随意路由,而不一定想我那样堆叠那些模块。请阅读我的 帖子,看下用普通路由怎样工作。

铁路网络组件设置

你须要计算出伺服器在组件上的位置。像我,我就补到以下了,你能够使出不论什么招数,让他们能一起工作即可。

 

2. 软件设置

Arduino 代码

改动IP地址

给Arduino和你的iOS/Android设备改动IP地址,以配合你的设置。

比如:iOS上的192.168.0.12,然后搜索"mylp"行

 

1
byte myIp[]  = { 192, 168, 0, 178 }; 
// 
Specify your arduino  IP here and the “destlp” line.
1
byte myIp[]  = { 192, 168, 0, 12 }; 
// 
your IPad Address here<
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// 
Receive from iOSC http:
//recotana
.com
/iphone/iosc/en/index
.html and apply to arduino pins via OSC .
// 
Credits to Jerome Dupraz & Retocama
// 
Colorsound 011
// 
you can download arduino z-osc library from here https:
//github
.com
/djiamnot/Z_OSC
// 
you can download arduino code and vvvv patch from here: http:
//vvvv
.org
/contribution/arduinoosc

/*

This is a sample code 
for 
controlling servo via TouchOSC on

*/

#include
#include
#include
#include

byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIp[]  = { 192, 168, 0, 178 }; 
// 
Specify your arduino IP
int  serverPort  = 8000; 
// 
and listening port as well

byte destIp[] =  { 192, 168, 0, 12 }; 
// 
Talk back with your iPad, not critical
int  destPort = 9000;

float val;
// 
delcare a variable 
for 
reading values

// 
create servo object to control a servo, remember to attach them 
in 
setup()
Servo myservo1;
Servo myservo2;
Servo myservo3;

Z_OSCClient client;
Z_OSCServer server;
Z_OSCMessage *rcvMes;
Z_OSCMessage message;

void setup(){
 
myservo1.attach(19); 
// 
attaches the servo on pin 19 to the servo object
 
myservo2.attach(20); 
// 
attaches the servo on pin 20 to the servo object
 
myservo3.attach(21); 
// 
attaches the servo on pin 21 to the servo object
 
Serial.begin(19200);
 
Ethernet.begin(myMac ,myIp);
 
server.sockOpen(serverPort);
}

void loop(){
 
if
(server.available()){
  
message.setAddress(destIp,destPort);
  
rcvMes=server.getMessage();

     
// 
myservo1
     
if
( !strcmp( rcvMes->getZ_OSCAddress() ,  
"/1/toggle1" 
) )
     
{
      
val = rcvMes->getFloat(0);
      
myservo1.write(val);
      
if 
( val > 0 ) {
          
message.setZ_OSCMessage(
"/1/toggle1_msg" 
,
"s" 
"Stopping at Tsuen Wan" 
);
          
client.send(&message);
      
else 
{
          
message.setZ_OSCMessage(
"/1/toggle1_msg" 
,
"s" 
"Tsuen Wan Station" 
);
          
client.send(&message);
      
}

     
}

      
// 
myservo2
     
if
( !strcmp( rcvMes->getZ_OSCAddress() ,  
"/1/toggle2" 
) )
     
{
      
val = rcvMes->getFloat(0);
      
myservo2.write(val);

      
if 
( val > 0 ) {
          
message.setZ_OSCMessage(
"/1/toggle2_msg" 
,
"s" 
"Stopping at Lai King" 
);
          
client.send(&message);
      
else 
{
          
message.setZ_OSCMessage(
"/1/toggle2_msg" 
,
"s" 
"Lai King Station" 
);
          
client.send(&message);
      
}

     
}

     
// 
myservo3
     
if
( !strcmp( rcvMes->getZ_OSCAddress() ,  
"/1/fader1" 
) )
     
{
      
val = rcvMes->getFloat(0);
      
if 
( val == 20 ) {
              
myservo3.write(0);
              
message.setZ_OSCMessage(
"/1/fader1_msg" 
,
"s" 
"Bypass" 
);
              
client.send(&message);
      
else
      
if 
( val == 150 ) {
              
myservo3.write(150);
              
message.setZ_OSCMessage(
"/1/fader1_msg" 
,
"s" 
"Normal" 
);
              
client.send(&message);
      
}

     
}
 
}
}

 

TouchOSC

下载并改动这个例程: 

OSC

此演示样例面板,包含一个推杆,两个转换button,用于出发伺服器运动,文本框区域接收Arduino文字信息。

触发button1

它由两个重要參数组成,用于Arduino与servo之间的通信。

1. OSC 名称/1/toggle1/1/toggle1

与Arduino代码中的getZ_OSCAddress 行一致

2. 取值范围:0到62

触发转换器开关时。这个值指定两个准确伺服器的角度,请适当调整。

触发button2

它由两个重要參数组成。用于Arduino与servo之间的通信。

1. OSC 名称/1/toggle2/1/toggle2

与Arduino代码中的getZ_OSCAddress 行一致

2. 取值范围:0到62

触发转换器开关时,这个值指定两个准确伺服器的角度。请适当调整。

转换button1

它由两个重要參数组成。用于Arduino与servo之间的通信。

1. OSC 名称/1/fader1/1/fader

与Arduino代码中的getZ_OSCAddress 行一致

2. 取值范围:20到150

触发转换器开关时,这个值指定两个准确伺服器的角度,请适当调整。

触发信息文本框

当发回Arduino信息时,这个标签区域接收文本信息,我们先把文本区域置空。当触发伺服器时,Arduino发回一个"Moved"在文本框区域。 OSC Name: /1/toggle1_msg, /1/toggle2_msg, /1/fader1_msg  OSC名字与Arduino代码中的“setZ_OSCMessage”一致

转载于:https://www.cnblogs.com/jzssuanfa/p/6872658.html

你可能感兴趣的文章
RAMPS1.4 3d打印控制板接线与测试1
查看>>
python with语句中的变量有作用域吗?
查看>>
24@Servlet_day03
查看>>
初级ant的学习
查看>>
redis数据结构--String
查看>>
POJ 3279 Fliptile (二进制枚举)
查看>>
memcached 细究(三)
查看>>
使用svn——项目的目录布局
查看>>
RSA System.Security.Cryptography.CryptographicException
查看>>
webservice整合spring cxf
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
String类的深入学习与理解
查看>>
不把DB放进容器的理由
查看>>
OnePage收集
查看>>
Java parseInt()方法
查看>>
yahoo的30条优化规则
查看>>
[CCF2015.09]题解
查看>>
[NYIST15]括号匹配(二)(区间dp)
查看>>