~uriboni/arduino/nowhere-clock

« back to all changes in this revision

Viewing changes to MotorShift.cpp

  • Committer: Ugo Riboni
  • Date: 2012-06-26 02:40:02 UTC
  • Revision ID: ugo.riboni@canonical.com-20120626024002-3ipieais3rsjar31
Add motor board management (8 transistors and 4 motor drivers)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "MotorShift.h"
 
2
 
 
3
void MotorShift::setup (int clockPin, int latchPin, int dataPin)
 
4
{
 
5
   this->dataPin = dataPin;
 
6
   this->clockPin = clockPin;
 
7
   this->latchPin = latchPin;
 
8
 
 
9
   pinMode(latchPin, OUTPUT);
 
10
   pinMode(clockPin, OUTPUT);
 
11
   pinMode(dataPin, OUTPUT);
 
12
}
 
13
 
 
14
void MotorShift::setCoil(int number, bool powered, uint16_t *data)
 
15
{
 
16
   bitWrite(*data, number, powered == POWERED);
 
17
}
 
18
 
 
19
void MotorShift::setMotor(int number, bool powered, bool direction, uint16_t *data)
 
20
{
 
21
  /* Motor drivers start at bit 8 (2nd register in the chain),
 
22
   * Each driver has two bits, LOw = direction, HIGH = enable */
 
23
 
 
24
   bitWrite(*data, 8 + (2 * number), true); //direction == FORWARD);
 
25
   bitWrite(*data, 8 + (2 * number) + 1, true); //powered == POWERED);
 
26
}
 
27
 
 
28
void MotorShift::clear()
 
29
{
 
30
   digitalWrite(dataPin, LOW);
 
31
   for (int i = 0; i < 16; i++) {
 
32
      digitalWrite(clockPin, LOW);
 
33
      digitalWrite(clockPin, HIGH);
 
34
   }
 
35
}
 
36
 
 
37
void MotorShift::shift(uint16_t data)
 
38
{
 
39
   digitalWrite(latchPin, LOW);
 
40
 
 
41
   for (int i = 15; i >= 0; i--) {
 
42
      digitalWrite(clockPin, LOW);
 
43
      digitalWrite(dataPin, bitRead(data, i) ? HIGH : LOW);
 
44
      digitalWrite(clockPin, HIGH);
 
45
   }
 
46
 
 
47
   digitalWrite(latchPin, HIGH);
 
48
}
 
 
b'\\ No newline at end of file'