Pages: [1]   Go Down
Author Topic: 5 servo motors with 5 photoresistors  (Read 693 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello all,

hopefully i can get some help here.  I am trying to have 5 servos react to 5 photoresistor.  each resistor controls a single motor.  I have it all wired and powering the servos with 10 AA batteries and the arduino is plugged into the wall.  When i run the code below, i dont get any feedback.  However, when i run each servo and photoresistor seperately, they work.  Do i need additional hardware or is there something wrong in my coding?  Any advise will be helpful



#include <Servo.h>

Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;

int photopinA = 1;
int photopinB = 2;
int photopinC = 3;
int photopinD = 4;
int photopinE = 5;
int valA = 0;
int valB = 0;
int valC = 0;
int valD = 0;
int valE = 0;
int pos = 0;

void setup ()
{
  Serial.begin(9600);
myservo1.attach(6);
myservo2.attach(7);
myservo3.attach(smiley-cool;
myservo4.attach(5);
myservo5.attach(4);
  pinMode(photopinA,INPUT);
  pinMode(photopinB,INPUT);
  pinMode(photopinC,INPUT);
  pinMode(photopinD,INPUT);
  pinMode(photopinE,INPUT);
}

void loop()
{
  valA = analogRead(photopinA);
  valB = analogRead(photopinB);
  valC = analogRead(photopinC);
  valD = analogRead(photopinD);
  valE = analogRead(photopinE);
 
  if(valA <= 500)
 {
 
  for(pos = 0; pos >= -180; pos -=90)  // goes from 0 degrees to 180 degrees
                                   // in steps of 1 degree
    myservo3.write(pos);      // tell servo to go to position in variable 'pos'
    Serial.println(valA);

} else {
 
  for(pos = 0; pos<= 180; pos +=90)     // goes from 180 degrees to 0 degrees
  {                               
    myservo3.write(pos);              // tell servo to go to position in variable 'pos'
                        // waits 15ms for the servo to reach the position
  }
}
  Serial.println(valA);
 
  if(valB <= 500)
 {
 
  for(pos = 0; pos >= -180; pos -=90)  // goes from 0 degrees to 180 degrees
                                   // in steps of 1 degree
    myservo4.write(pos);      // tell servo to go to position in variable 'pos'
    Serial.println(valB);

} else {
 
  for(pos = 0; pos <= 180; pos +=90)     // goes from 180 degrees to 0 degrees
  {                               
    myservo4.write(pos);              // tell servo to go to position in variable 'pos'
                        // waits 15ms for the servo to reach the position
  }
}
  Serial.println(valB);
 
 
  if(valC <= 500)
 {
 
  for(pos = 0; pos <= 180; pos +=90)  // goes from 0 degrees to 180 degrees
                                   // in steps of 1 degree
    myservo2.write(pos);      // tell servo to go to position in variable 'pos'
    Serial.println(valC);

} else {
 
  for(pos = 0; pos >= -180; pos -=90)     // goes from 180 degrees to 0 degrees
  {                               
    myservo2.write(pos);              // tell servo to go to position in variable 'pos'
                        // waits 15ms for the servo to reach the position
  }
}
  Serial.println(valC);
 
 
  if(valD <= 500)
 {
 
  for(pos = 0; pos >= -180; pos -=90)  // goes from 0 degrees to 180 degrees
                                   // in steps of 1 degree
    myservo5.write(pos);      // tell servo to go to position in variable 'pos'
    Serial.println(valD);

} else {
 
  for(pos = 0; pos <= 180; pos +=90)     // goes from 180 degrees to 0 degrees
  {                               
    myservo5.write(pos);              // tell servo to go to position in variable 'pos'
                        // waits 15ms for the servo to reach the position
  }
}
  Serial.println(valD);
 
 
 
  if(valE <= 500)
 {
 
  for(pos = 0; pos >= 180; pos -=90)  // goes from 0 degrees to 180 degrees
                                   // in steps of 1 degree
    myservo1.write(pos);      // tell servo to go to position in variable 'pos'
    Serial.println(valE);

} else {
 
  for(pos = 0; pos = 180; pos +=90)     // goes from 180 degrees to 0 degrees
  {                               
    myservo1.write(pos);              // tell servo to go to position in variable 'pos'
                        // waits 15ms for the servo to reach the position
  }
}
  Serial.println(valE);
 
 
}
   
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 156
It was all digital
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Hedden9414

Code:
int photopinA = 1;
int photopinB = 2;
int photopinC = 3;
int photopinD = 4;
int photopinE = 5;

You nomenclature for the analog pins are wrong:
Quote
Pin mapping
The analog pins can be used identically to the digital pins, using the aliases A0 (for analog input 0), A1, etc.

-Fletcher
Logged

0
Offline Offline
Shannon Member
****
Karma: 199
Posts: 11639
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Negative angles for servo?? that can't work, the value is converted to pulse widths, expect 0 to 180 only to work.

You seem to want to smoothly move each servo in a loop (delay statements missing?) - but to run 5 in parallel you can't code like this, you need to maintain state for each channel and drive them in event-driven manner - you dont have the luxury of hogging the CPU for one servo at a time.

Also you should note the code button (#) for quoting code.
Logged

[ I won't respond to messages, use the forum please ]

Pages: [1]   Go Up
Jump to: