Projeto

Geral

Perfil

Estatísticas
| Revisão:

root / processing / blacklight / Input.pde @ 18

Histórico | Ver | Anotar | Download (7,47 KB)

1
/*
2
BLACKLIGHT v1.0
3
Project made for Mestrado de Comunicação Multimédia, Ramo Multimédia Interactivo at Departamento de Comunicação e Arte at Universidade de Aveiro.
4

    
5
Author: Nuno Simaria - nsimaria@ua.pt - #23652
6
Other workgroup members: Ana Filipa Lacerda, Daniela Rei, Renato Costa, Julien Cuenin
7
*/
8

    
9
import processing.serial.*;
10

    
11

    
12
final int INPUT_END = 10;
13
final int INPUT_SAMPLES = 16;
14
final int INPUT_RATE = 19200;
15

    
16
Input [] _inputs_ = {};
17

    
18
class Input
19
  {  
20
  Serial port   = null;
21
  Buffer buffer = null;
22
  String name   = null;
23
  
24
  int jX = 0;
25
  int jY = 0;  
26
  int aX = 0;
27
  int aY = 0;
28
  int aZ = 0;
29
  int bC = 0;
30
  int bZ = 0;
31
  int b1 = 0;
32
  int b2 = 0;
33
  int p1 = 0;
34
  
35
  
36
  Input ()
37
    {
38
    _inputs_ = (Input []) append (_inputs_, this);
39
    }
40
    
41
  void setup (String portName)
42
    {
43
    if ((portName == null) ||(portName == ""))
44
      {
45
      println ("No valid port name for this Input. Getting out!");
46
      return;
47
      }
48

    
49
    println ("Setting up Input at " + portName);
50
    this.name = portName;
51
    this.port = new Serial (_root_, portName, INPUT_RATE);
52
    this.buffer = new Buffer ();
53
    this.port.bufferUntil (INPUT_END);
54
    
55
    }
56
    
57
  void draw ()
58
    {
59
/*    print ("jX:" + this.jX + ", ");
60
    print ("jY:" + this.jY + ", ");
61
    print ("aX:" + this.aX + ", ");
62
    print ("aY:" + this.aY + ", ");
63
    print ("aZ:" + this.aZ + ", ");
64
    print ("bC:" + this.bC + ", ");
65
    print ("bZ:" + this.bZ + ", ");
66
    println ("");*/
67
    }
68
    
69
  void setData (String raw)
70
    {
71
    if (raw != null)
72
      {
73
      final String [] data = split (trim (raw), ' ');
74
    
75
    
76
      if (data[0].equals ("NK1")) // is main input!
77
        {
78
        this.jX = int (data [1]);
79
        this.jY = int (data [2]);
80
        this.aX = int (data [3]);
81
        this.aY = int (data [4]);
82
        this.aZ = int (data [5]);
83
        this.bZ = int (data [6]);
84
        this.bC = int (data [7]);
85
        }
86
      }
87
    }
88
    
89
  int horizontal()
90
    {
91
    if (this.jX == 0)
92
      return 0;
93
      
94
    return (this.jX - 140);
95
    }
96

    
97
  int vertical()
98
    {
99
    if (this.jY == 0)
100
      return 0;  
101

    
102
    return (129 - this.jY);
103
    }
104

    
105
  boolean fire ()
106
    {
107

    
108
    return ((this.bZ == 1) || (keyPressed && ( keyCode == ENTER )));
109
    
110
 //   return true;
111
//   return (this.bZ == 1);
112
    }
113
    
114
  boolean bomb ()
115
    {
116
    return (this.bC == 1);
117
    }
118

    
119
      }
120
  
121

    
122
void serialEvent (Serial port)
123
  {
124
  for (int i = 0; i < _inputs_.length; i++)
125
    {
126
    if (_inputs_ [i].port == port)
127
      {
128
      _inputs_ [i].setData (port.readStringUntil (INPUT_END));
129
      }
130
    }  
131
  
132
  return;
133
  }
134

    
135
void keyPressed() 
136
  {
137
//    println (keyCode) ;
138
    String data =  "NK1 0 0 0 0 0 0 0";
139
    
140
    switch (keyCode)
141
      {
142
      case 37: data =  "NK1 -140 0 0 0 0 0 0"; break; //left
143
      case 38: data =  "NK1 0 240 0 0 0 0 0"; break; //left
144
      case 39: data =  "NK1 240 0 0 0 0 0 0"; break; //left
145
      case 40: data =  "NK1 0 -240 0 0 0 0 0"; break; //left
146
      case 32: data = "NK1 0 0 0 0 0 1 0"; break; //left
147
      }
148
    
149
  
150
    for (int i = 0; i < _inputs_.length; i++)
151
    {
152
      _inputs_ [i].setData (data);
153
    }  
154
  
155
  return;
156

    
157
  }
158

    
159
void keyReleased() 
160
  {
161
//    println (keyCode) ;
162
    String data =  "NK1 0 0 0 0 0 0 0";
163
  
164
    for (int i = 0; i < _inputs_.length; i++)
165
    {
166
      _inputs_ [i].setData (data);
167
    }  
168
  
169
  return;
170

    
171
  }
172

    
173

    
174

    
175
/*
176

    
177

    
178
final int LINE_FEED = 10;
179
final int MAX_SAMPLES = 16;
180

    
181
Serial arduinoPort;
182
SensorDataBuffer sensorData = new SensorDataBuffer (MAX_SAMPLES);
183

    
184
final int WIDTH = 500;
185
final int HEIGHT = 500;
186
final int BAUD_RATE = 19200;
187
final int X_AXIS_MIN = 300;
188
final int X_AXIS_MAX = 700;
189
final int Y_AXIS_MIN = 300;
190
final int Y_AXIS_MAX = 700;
191
final int Z_AXIS_MIN = 300;
192
final int Z_AXIS_MAX = 700;
193

    
194
final int MIN_SCALE = 5;
195
final int MAX_SCALE = 128;
196

    
197
final float MX = 2.0 / (X_AXIS_MAX - X_AXIS_MIN);
198
final float MY = 2.0 / (Y_AXIS_MAX - Y_AXIS_MIN);
199
final float MZ = 2.0 / (Z_AXIS_MAX - Z_AXIS_MIN);
200

    
201
final float BX = 1.0 - MX * X_AXIS_MAX;
202
final float BY = 1.0 - MX * Y_AXIS_MAX;
203
final float BZ = 1.0 - MX * Z_AXIS_MAX;
204

    
205
int xpos = WIDTH / 2;
206
int ypos = HEIGHT / 2;
207
int scale = 90;
208

    
209
float xrotate = 0.0;
210
float yrotate = 0.0;
211
float zrotate = 0.0;
212

    
213
void setup ()
214
  {
215
  size (WIDTH, HEIGHT, P3D);
216
  noStroke ();
217
  colorMode (RGB, 1);
218
  background (0);
219
  arduinoPort = new Serial (this, Serial.list () [0], BAUD_RATE);
220
  arduinoPort.bufferUntil (LINE_FEED);
221
  }
222
  
223
void draw ()
224
  {
225
  background (0);
226
  pushMatrix   ();
227
  translate (xpos, ypos, -30);
228
  rotateX (xrotate);
229
  rotateY (yrotate);
230
  rotateZ (zrotate);
231
  scale (scale);
232
  
233
  beginShape (QUADS);
234
  fill (0, 1, 1); vertex (-1,  1,  1);
235
  fill (1, 1, 1); vertex ( 1,  1,  1);
236
  fill (1, 0, 1); vertex ( 1, -1,  1);
237
  fill (0, 0, 1); vertex (-1, -1,  1);
238

    
239
  fill (1, 1, 1); vertex ( 1,  1,  1);
240
  fill (1, 1, 0); vertex ( 1,  1, -1);
241
  fill (1, 0, 0); vertex ( 1, -1, -1);
242
  fill (1, 0, 1); vertex ( 1, -1,  1);
243

    
244
  fill (1, 1, 0); vertex ( 1,  1, -1);
245
  fill (0, 1, 0); vertex (-1,  1, -1);
246
  fill (0, 0, 0); vertex (-1, -1, -1);
247
  fill (1, 0, 0); vertex ( 1, -1, -1);
248
  
249
  fill (0, 1, 0); vertex (-1,  1, -1);
250
  fill (0, 1, 1); vertex (-1,  1,  1);
251
  fill (0, 0, 1); vertex (-1, -1,  1);
252
  fill (0, 0, 0); vertex (-1, -1, -1);
253

    
254
  fill (0, 1, 0); vertex (-1,  1, -1);
255
  fill (1, 1, 0); vertex ( 1,  1, -1);
256
  fill (1, 1, 1); vertex ( 1,  1,  1);
257
  fill (0, 1, 1); vertex (-1,  1,  1);
258

    
259
  fill (0, 0, 0); vertex (-1, -1, -1);
260
  fill (1, 0, 0); vertex ( 1, -1, -1);
261
  fill (1, 0, 1); vertex ( 1, -1,  1);
262
  fill (0, 0, 1); vertex (-1, -1,  1);
263
  
264
  endShape ();
265
  popMatrix ();
266

    
267
  }
268

    
269
void serialEvent (Serial port)
270
  {
271
  final String arduinoData = port.readStringUntil (LINE_FEED);
272
  
273
  if (arduinoData != null)
274
    {
275
    final int [] data = int (split (trim (arduinoData), ' '));
276
    
277
    if (data.length == 7)
278
      {
279
      xpos = int (map (data [0], 0x1e, 0xe1, 0, WIDTH));
280
      ypos = int (map (data [1], 0x1d, 0xdf, HEIGHT, 0));
281
      
282
      if (data [5] == 1) scale ++;
283
      if (data [6] == 1) scale --;
284
      if (scale < MIN_SCALE) scale = MIN_SCALE;
285
      if (scale > MAX_SCALE) scale = MAX_SCALE;
286
      
287
      sensorData.addData (data [2], data [3], data [4]);
288
      
289
      final float gx = MX * sensorData.getX () + BX;
290
      final float gy = MY * sensorData.getY () + BY;
291
      final float gz = MZ * sensorData.getZ () + BZ;
292
      
293
      xrotate = atan2 (gx, sqrt (gy * gy + gz * gz));
294
      yrotate = atan2 (gy, sqrt (gx * gx + gz * gz));
295
      zrotate = atan2 (sqrt (gx * gx + gy * gy), gz);
296
      
297
      }
298
    }
299
  }
300

    
301
class SensorDataBuffer 
302
  {
303
  private int _maxSamples;
304
  private int _bufferIndex;
305
  private int [] _xBuffer;
306
  private int [] _yBuffer;
307
  private int [] _zBuffer;
308
  
309
  public SensorDataBuffer (final int maxSamples)
310
    {
311
    _maxSamples = maxSamples;
312
    _bufferIndex = 0;
313
    _xBuffer = new int [_maxSamples];
314
    _yBuffer = new int [_maxSamples];
315
    _zBuffer = new int [_maxSamples];
316
    }
317
    
318
  public void addData (final int x, final int y, final int z)
319
    {
320
    if (_bufferIndex >= _maxSamples)
321
      _bufferIndex = 0;
322
      
323
    _xBuffer [_bufferIndex] = x;
324
    _yBuffer [_bufferIndex] = y;
325
    _zBuffer [_bufferIndex] = z;
326
    _bufferIndex++;
327
    }
328
    
329
  public int getX ()
330
    {
331
    return getAverageValue (_xBuffer);
332
    }
333
  public int getY ()
334
    {
335
    return getAverageValue (_yBuffer);
336
    }
337
  public int getZ ()
338
    {
339
    return getAverageValue (_zBuffer);
340
    }
341
    
342
  private int getAverageValue (final int[] buffer)
343
    {
344
    int sum = 0;
345
    for (int i = 0; i < _maxSamples; i++)
346
      {
347
      sum += buffer [i];
348
      }
349
      
350
    return (int) (sum / _maxSamples);
351
    }
352
    
353
  
354
  }
355
  */