|
|
@ -7,17 +7,23 @@ Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); |
|
|
|
#define SERVOMAX 390 // this is the 'maximum' pulse length count (out of 4096)
|
|
|
|
#define TIMER 200 |
|
|
|
#define SERVODIVIDER 5 |
|
|
|
#define STRIP 10 |
|
|
|
|
|
|
|
const char HEADER = 'H'; |
|
|
|
const char HEADER = 'H'; |
|
|
|
const char A_TAG = 'M'; |
|
|
|
const char B_TAG = 'X'; |
|
|
|
const char C_TAG = 'U'; |
|
|
|
const char F_TAG = 'F'; |
|
|
|
|
|
|
|
const int TOTAL_BYTES = 10 ; // the total bytes in a message
|
|
|
|
|
|
|
|
int atomPins[] = {2,3,4,5,6,7,8,9}; |
|
|
|
int currentValue = 0; |
|
|
|
int values[] = {0,0,0,0,0,0,0,0}; |
|
|
|
|
|
|
|
int cycle = 0; |
|
|
|
boolean fadeDirection = 0; // 0 grow
|
|
|
|
byte fadeStatus = 0; |
|
|
|
|
|
|
|
void setup() { |
|
|
|
Serial.begin(9600); |
|
|
@ -27,8 +33,8 @@ void setup() { |
|
|
|
pwm.setPWM(i, 0, ((SERVOMAX-SERVOMIN)/2)+SERVOMIN); |
|
|
|
} |
|
|
|
|
|
|
|
pinMode(13, OUTPUT); |
|
|
|
digitalWrite(13, HIGH); |
|
|
|
pinMode(STRIP, OUTPUT); |
|
|
|
fadeIn(); |
|
|
|
pwm.begin(); |
|
|
|
pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates
|
|
|
|
|
|
|
@ -57,44 +63,56 @@ void loop() { |
|
|
|
values[i] = 0; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(Serial.available() >= TOTAL_BYTES) { |
|
|
|
if( Serial.read() == HEADER) { |
|
|
|
char tag = Serial.read(); |
|
|
|
|
|
|
|
if(tag == F_TAG) { |
|
|
|
fadeOut(); |
|
|
|
} |
|
|
|
|
|
|
|
if(tag == A_TAG || tag == B_TAG) { |
|
|
|
for(int i=0; i<8; i++) { |
|
|
|
values[i] = Serial.read(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for(int i=0; i<8; i++) { |
|
|
|
if(tag == A_TAG) { |
|
|
|
pwm.setPWM(i, 0, SERVOMAX+50); |
|
|
|
delay(100*SERVODIVIDER); |
|
|
|
pwm.setPWM(i, 0, SERVOMAX-50); |
|
|
|
delay(100*SERVODIVIDER); |
|
|
|
} |
|
|
|
pwm.setPWM(i, 0, SERVOMIN); |
|
|
|
delay(values[i]*SERVODIVIDER); |
|
|
|
pwm.setPWM(i, 0, ((SERVOMAX-SERVOMIN)/2)+SERVOMIN); |
|
|
|
} |
|
|
|
|
|
|
|
if(tag == C_TAG) { |
|
|
|
|
|
|
|
for(int i=0; i<8; i++) { |
|
|
|
pwm.setPWM(i, 0, SERVOMAX+50); |
|
|
|
delay(100*SERVODIVIDER); |
|
|
|
pwm.setPWM(i, 0, ((SERVOMAX-SERVOMIN)/2)+SERVOMIN); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
for(int i=0; i<8; i++) { |
|
|
|
if(tag == A_TAG) { |
|
|
|
pwm.setPWM(i, 0, SERVOMAX+50); |
|
|
|
delay(100*SERVODIVIDER); |
|
|
|
pwm.setPWM(i, 0, SERVOMAX-50); |
|
|
|
delay(100*SERVODIVIDER); |
|
|
|
Serial.print(values[i]); |
|
|
|
Serial.print(" "); |
|
|
|
if(values[i]>0) { |
|
|
|
values[i]--; |
|
|
|
digitalWrite(atomPins[i], HIGH); |
|
|
|
if(values[i]==0) { |
|
|
|
cycle++; |
|
|
|
digitalWrite(atomPins[i], LOW); |
|
|
|
} |
|
|
|
} |
|
|
|
pwm.setPWM(i, 0, SERVOMIN); |
|
|
|
delay(values[i]*SERVODIVIDER); |
|
|
|
pwm.setPWM(i, 0, ((SERVOMAX-SERVOMIN)/2)+SERVOMIN); |
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
|
for(int i=0; i<8; i++) { |
|
|
|
pwm.setPWM(i, 0, SERVOMIN); |
|
|
|
delay(values[i]*SERVODIVIDER); |
|
|
|
pwm.setPWM(i, 0, ((SERVOMAX-SERVOMIN)/2)+SERVOMIN); |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
if(tag == A_TAG) { |
|
|
|
while(cycle < 8) { |
|
|
|
cycle = 0; |
|
|
@ -111,12 +129,43 @@ void loop() { |
|
|
|
} else { |
|
|
|
cycle++; |
|
|
|
} |
|
|
|
|
|
|
|
for(int f=0;f<4;f++){ |
|
|
|
fadeGradient(); |
|
|
|
delay(TIMER/(8*4)); |
|
|
|
} |
|
|
|
} |
|
|
|
Serial.println(""); |
|
|
|
delay(TIMER); |
|
|
|
} |
|
|
|
|
|
|
|
fadeIn(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void fadeIn() { |
|
|
|
for(int i=0; i<255; i++) { |
|
|
|
analogWrite(STRIP, i); |
|
|
|
delay(10); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void fadeOut() { |
|
|
|
for(int i=255; i>0; i--) { |
|
|
|
analogWrite(STRIP, i); |
|
|
|
delay(10); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void fadeGradient() { |
|
|
|
if(fadeDirection == 0) {fadeStatus++;} |
|
|
|
if(fadeDirection == 1) {fadeStatus--;} |
|
|
|
|
|
|
|
if(fadeStatus == 0) {fadeDirection = 0;} |
|
|
|
if(fadeStatus == 255) {fadeDirection = 1;} |
|
|
|
|
|
|
|
analogWrite(STRIP, fadeStatus); |
|
|
|
} |
|
|
|
|
|
|
|