Beginners: please read this post and this post before posting to the forum.
0 Members and 1 Guest are viewing this topic.
The servos do move correctly. Do they need more current when they all have the same value or something? SHould I get a 6V gell-cell, 3A for all 4 of my servos? I currently have a 6 NI-CaD with 620 mAh!
int scan() {int i;float val_s, val_r, val_l;for(i = 0; i < 50; i++) { sa.write(95); //CENTER SoftwareServo::refresh(); delay(15);}for(i = 0; i < 50; i++) { sa.write(145); //RIGHT SoftwareServo::refresh(); delay(15);}for(i = 0; i < 50; i++) { sa.write(45); //LEFT SoftwareServo::refresh(); delay(15);}}
#include <SoftwareServo.h>SoftwareServo sp1, sp2, sa, sb;int pin_sp1, pin_sp2, pin_sa, pin_sb;byte pin_ir1, pin_ir2, pin_ir3;float read_cm(byte pin) { int tmp; tmp = analogRead(pin); if (tmp < 3) return -1; // invalid value return (6787.0 /((float)tmp - 3.0)) - 4.0;}void fwd(void) { if(!(sp1.attached())) sp1.attach(pin_sp1); if(!(sp2.attached())) sp2.attach(pin_sp2); sp1.write(180); sp2.write(0); for(int i = 0; i < 100; i++) { SoftwareServo::refresh(); delay(15); }}void back(void) { if(!(sp1.attached())) sp1.attach(pin_sp1); if(!(sp2.attached())) sp2.attach(pin_sp2); sp1.write(0); sp2.write(180); for(int i = 0; i < 100; i++) { SoftwareServo::refresh(); delay(15); }} void left(void) { sp2.detach(); if(!(sp1.attached())) sp1.attach(pin_sp1); sp1.write(180); for(int i = 0; i < 100; i++) { SoftwareServo::refresh(); delay(15); }}void right(void) { sp1.detach(); if(!(sp2.attached())) sp2.attach(pin_sp2); sp2.write(0); for(int i = 0; i < 100; i++) { SoftwareServo::refresh(); delay(15); }}void center() { sa.write(95); SoftwareServo::refresh();}int scan() { int i; float val_s, val_r, val_l; val_s = val_r = val_l = 0; sa.write(95); for(i = 0; i < 20; i++) { SoftwareServo::refresh(); delay(50); val_s += read_cm(pin_ir1); } val_s /= 20; sa.write(145); for(i = 0; i < 20; i++) { SoftwareServo::refresh(); delay(50); val_l += read_cm(pin_ir1); } val_l /= 20; sa.write(45); for(i = 0; i < 20; i++) { SoftwareServo::refresh(); delay(50); val_r += read_cm(pin_ir1); } val_r /= 20; if(val_r > val_l) right(); else left();} void setup() { pin_sp1 = 3; pin_sp2 = 6; pin_sa = 4; pin_sb = 10; pin_ir1 = 0; pin_ir2 = 2; pin_ir3 = 4; sp1.attach(pin_sp1); sp2.attach(pin_sp2); sa.attach(pin_sa); sb.attach(pin_sb); digitalWrite(13, HIGH); Serial.begin(9600);}void loop() {scan();}
int scan() { int val_s, val_r, val_l; val_s = val_r = val_l = 0; sa.write(95); servo_delay(); val_s = read_sensor(); sa.write(145); servo_delay(); val_l = read_sensor(); sa.write(45); servo_delay(); val_r = read_sensor(); if(val_r > val_l) right(); else left();} void servo_delay() { for (int t=0; t<=10; t++){ SoftwareServo::refresh(); delay(20); }}int read_sensor() { float tmp = 0; for (int i=0; i<=20; i++){ tmp += analog.read(pin_ir1); } tmp /= 20; tmp = (6787.0 /((float)tmp - 3.0)) - 4.0; return tmp;}