Project

General

Profile

Statistics
| Branch: | Revision:

root / forklift / code / forklift.c @ 048ed7e1

History | View | Annotate | Download (1.37 KB)

1
/*
2
 * ARM -> us
3
 * -height setpoint
4
 *
5
 * us -> ARM
6
 * -tracking ID (same for all forklifts)
7
 * -serial number (unique to each forklift)
8
 * -current height
9
 * -current height setpoint
10
 * -payload weight
11
 *
12
 */
13
 
14
#include "twi.h"
15
#include "analog.h"
16

    
17
#define TRACKING_ID 0x41
18
#define SERIAL_NUMBER 0x12
19

    
20
// indicies for forklift internal data
21
#define FORKLIFT_TRACKING_ID     0
22
#define FORKLIFT_SERIAL_NUMBER   1
23
#define FORKLIFT_HEIGHT          2
24
#define FORKLIFT_HEIGHT_SETPOINT 3 // only one that's r/w
25
#define FORKLIFT_LINEPOS         4
26

    
27
#define FORKLIFT_DATA_LEN        5
28

    
29
uint8_t internal_index = 0;
30
uint8_t internal_data[] = {
31
  TRACKING_ID,
32
  SERIAL_NUMBER,
33
  0,
34
  0,
35
  0
36
};
37

    
38
void slave_rx(uint8_t* data, int len)
39
{
40
  if (len > 0 && data[0] < FORKLIFT_DATA_LEN)
41
  {
42
    internal_index = data[0];
43
    if (len > 1 && internal_index == FORKLIFT_HEIGHT_SETPOINT)
44
      internal_data[internal_index] = data[1];
45
  }
46
}
47

    
48
void slave_tx(void)
49
{
50
  twi_transmit(&internal_data[internal_index], 1);
51
  internal_index++;
52
  if (internal_index >= FORKLIFT_DATA_LEN)
53
    internal_index = 0;
54
}
55

    
56
int main()
57
{
58
  twi_init();
59
  twi_setAddress(TRACKING_ID);
60
  twi_attachSlaveRxEvent(slave_rx);
61
  twi_attachSlaveTxEvent(slave_tx);
62
  analog_init();
63
  while (1)
64
  {
65
    // do motor stuff
66
    internal_data[FORKLIFT_LINEPOS] = line_read_pos();
67
    internal_data[FORKLIFT_HEIGHT] = analog_read(ADC_HEIGHT);
68
  }
69
  return 0;
70
}