88// #define NOHW
99
1010#define NONE 0
11- #define SERVOSHIELD 1
12- #define I2CCLIENT 2 // this gas never been fully implemented and my need some work
11+ #define SERVOSHIELD 1 // Peters adafruit based servo shield
12+ #define I2CCLIENT 2 // this has never been fully implemented and may need some work
13+ #define I2CMINI 3 // the mini i2c servo adapter
1314
14- #define PEN SERVOSHIELD // can be NONE, SERVOSHIELD, I2CCLIENT, ...
15+ #define PEN I2CMINI // can be NONE, SERVOSHIELD, I2CCLIENT, ...
1516
1617#if PEN == SERVOSHIELD
1718#include < Adafruit_PWMServoDriver.h>
1819Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
1920#define SERVO_NUM 0 // leftmost connector
2021#define SERVO_UP 350
2122#define SERVO_DOWN 410
23+ #elif PEN == I2CMINI
24+ #include < Wire.h>
25+ #define SERVO_ADDR 0x11 // default address
26+ #define SERVO_NUM 0 // servo 1
27+ #define SERVO_UP 95
28+ #define SERVO_DOWN 110
2229#endif
2330
2431// enable xon/xoff signalling
@@ -230,8 +237,7 @@ void pen(bool down) {
230237 if (down) pwm.setPWM (SERVO_NUM, 0 , SERVO_DOWN);
231238 else pwm.setPWM (SERVO_NUM, 0 , SERVO_UP);
232239 delay (100 ); // give pen some time to move
233- #endif
234- #if PEN == I2CCLIENT
240+ #elif PEN == I2CCLIENT
235241 if (down) {
236242 pen_set_m1 (Ftduino::LEFT);
237243 // wait for switch on I1 to close
@@ -241,6 +247,13 @@ void pen(bool down) {
241247 delay (500 );
242248 }
243249 pen_set_m1 (Ftduino::BRAKE);
250+ #elif PEN == I2CMINI
251+ Wire.beginTransmission (SERVO_ADDR);
252+ Wire.write (SERVO_NUM);
253+ if (down) Wire.write (SERVO_DOWN);
254+ else Wire.write (SERVO_UP);
255+ Wire.endTransmission ();
256+ delay (100 ); // give pen some time to move
244257#endif
245258}
246259
@@ -256,17 +269,17 @@ bool pen_init(void) {
256269 Wire.write (0x10 ); // config I1
257270 Wire.write (0x02 ); // switch
258271 Wire.endTransmission ();
259- #endif
260-
261- #if PEN == SERVOSHIELD
272+ #elif PEN == SERVOSHIELD
262273 pwm.begin ();
263274 pwm.setPWMFreq (60 ); // Analog servos run at ~60 Hz updates
275+ #elif PEN == I2CMINI
276+ Wire.begin ();
264277
265278#if 0
266279 while(1) {
267- pwm.setPWM(SERVO_NUM, 0, SERVO_DOWN );
280+ pen(true );
268281 delay(2000);
269- pwm.setPWM(SERVO_NUM, 0, SERVO_UP );
282+ pen(false );
270283 delay(500);
271284 }
272285#endif
@@ -314,7 +327,16 @@ void setup() {
314327 failure (PSTR (" Pen init failed" ), 2 );
315328
316329 pen (false );
317-
330+
331+ #if 0 // PEN UP/DOWN test
332+ while(1) {
333+ pen(false);
334+ delay(2000);
335+ pen(true);
336+ delay(500);
337+ }
338+ #endif
339+
318340 // reset state
319341 buffer[0 ] = 0 ;
320342 bcnt = 0 ;
0 commit comments