Thanks for quick answers guys,
Stepper:
Motor shield:
For voltage source, I've tried with 9V batery and Arduino 9v adapter.
Wiring diagram: Actually for stepper I didn't to extra wiring without connecting cables on shield A and B as figure:
Currently I'm using different kind of stepper movement to give project but this is the old code that I faced with 45 degree angle continues
//Boran KARADUMAN Color Sorter Project
//**************************************** LIBRARIES ***************************************
#include <Average.h> // See http://playground.arduino.cc/Main/Average
#include <Servo.h>
#include <Stepper.h>
//************************************ GLOBAL VARIABLES ************************************
//Sensor variables
int S0=1,S1=7,S2=6,S3=5, LED=4;
int OUT=2;
//Servo and stepper Variables
Servo servo360;
int cpos=0;
int abc;
const int pwmA = 3;
const int pwmB = 11;
const int brakeA = 9;
const int brakeB = 8;
const int dirA = 12;
const int dirB = 13;
const int STEPS = 25; // 360 / stepAngle
// Initialize the Stepper class
Stepper myStepper(STEPS, dirA, dirB);
void setup() {
Serial.begin(9600);
TCS3200_Setup();
servo360.attach(10);
delay(100);
myStepper.setSpeed(250);
// Turn on pulse width modulation
pinMode(pwmA, OUTPUT);
digitalWrite(pwmA, HIGH);
pinMode(pwmB, OUTPUT);
digitalWrite(pwmB, HIGH);
// Turn off the brakes
pinMode(brakeA, OUTPUT);
digitalWrite(brakeA, LOW);
pinMode(brakeB, OUTPUT);
digitalWrite(brakeB, LOW);
}
void loop() {
myStepper.step(STEPS);
delay(250);
Serial.println(ReadColor());
servoDrive(abc);
delay(250);
}
void TCS3200_Setup() {
pinMode(S0,OUTPUT);
pinMode(S1,OUTPUT);
pinMode(S2,OUTPUT);
pinMode(S3,OUTPUT);
pinMode(LED,OUTPUT);
pinMode(OUT,INPUT);
}
void TCS3200_On() {
digitalWrite(LED,HIGH); // Switch LED on
digitalWrite(S0,HIGH); //Output frequency scaling (100%)
digitalWrite(S1,HIGH);
delay(5);
}
void TCS3200_Off() {
digitalWrite(LED,LOW); // Switch LED off
digitalWrite(S0,LOW); //Power off sensor
digitalWrite(S1,LOW);
}
void NoFilter() { //Select no filter
digitalWrite(S2,HIGH);
digitalWrite(S3,LOW);
delay(5);
}
void RedFilter() { //Select red filter
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
delay(5);
}
void GreenFilter() { //Select green filter
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
delay(5);
}
void BlueFilter() { //Select blue filter
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
delay(5);
}
char* ReadColor() { //0=yellow, 1=red, 2=green, 3=blue, 4=object out of range
float FrequencyClear,FrequencyRed,FrequencyGreen,FrequencyBlue;
int PercentageRed,PercentageGreen,PercentageBlue;
TCS3200_On();
NoFilter();
FrequencyClear=500.0/pulseIn(OUT,LOW,10000); // Frequency in kHz
RedFilter();
FrequencyRed=500.0/pulseIn(OUT,LOW,10000); // Frequency in kHz
GreenFilter();
FrequencyGreen=500.0/pulseIn(OUT,LOW,10000); // Frequency in kHz
BlueFilter();
FrequencyBlue=500.0/pulseIn(OUT,LOW,10000); // Frequency in kHz
TCS3200_Off();
//Output frequency blue, green, red percentage represents the ratio of the
//respective color to the Clear channel absolute value:
PercentageRed=int((FrequencyRed/FrequencyClear)*100.0);
PercentageGreen=int((FrequencyGreen/FrequencyClear)*100.0);
PercentageBlue=int((FrequencyBlue/FrequencyClear)*100.0);
//Learned blue, green, red percentage values of different colors
int SavedColorRed[] = {42,50,19,13};
int SavedColorGreen[] = {30,22,45,26};
int SavedColorBlue[] = {20,30,36,58};
char* GetColor[] = {"yellow","red","green","blue",""};
int ColorArray[3];
int i_color;
int ClosestColor;
int MaxDiff;
int MinDiff=300;
if(FrequencyClear<1.5){ClosestColor=4;
}// Object out of range
else {
for (i_color=0; i_color<4; i_color++) { //Find closest color
ColorArray[0]=abs(SavedColorRed[i_color]-PercentageRed);
ColorArray[1]=abs(SavedColorGreen[i_color]-PercentageGreen);
ColorArray[2]=abs(SavedColorBlue[i_color]-PercentageBlue);
MaxDiff=maximum(ColorArray,3);
if (MaxDiff<MinDiff) {
MinDiff=MaxDiff;
ClosestColor=i_color;
abc=i_color;
}
}
}
return GetColor[ClosestColor];
}
void servoDrive(int curr){
switch(curr){
case 0:
servo360.write(15);
break;
case 1:
servo360.write(60);
break;
case 2:
servo360.write(105);
break;
case 3:
servo360.write(145);
break;
default: ;}
}
I wanted to make sure to give 25.0 value as a step. But even int I was confronting same problem.