got some results but still a lot of stutter on the servo. figuring out how the make a smoother function for the analog IR sensor.
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm0 = Adafruit_PWMServoDriver(0x40);
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;
int servomin = 110; //150
int servomax = 500; //600
int readingPin = 0;
int controlPin[] = {s0, s1, s2, s3};
int servo;
void setup() {
Serial.begin(9600);
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
pwm0.begin();
pwm0.setPWMFreq(60);
}
void loop() {
reading();
// patroon();
// midden();
}
// ------ mux functie
int readMux(int channel){
int muxChannel[16][4]={{0,0,0,0},{1,0,0,0},{0,1,0,0},{1,1,0,0},{0,0,1,0},{1,0,1,0},{0,1,1,0},
{1,1,1,0},{0,0,0,1},{1,0,0,1},{0,1,0,1},{1,1,0,1},{0,0,1,1},{1,0,1,1},{0,1,1,1},{1,1,1,1}};
for(int i = 0; i < 4; i ++){
digitalWrite(controlPin[i], muxChannel[channel][i]);
}
const int n = 5;
int total = 0;
for( int i=0; i<n; i++)
{
total += analogRead(readingPin);
// delay( 1); // no delay needed here, depending on the type of the noise.
}
int val = total / n;
// int val = analogRead(readingPin);
return val;
}
// ------ uitlezen mux
void reading(){
for (servo = 0; servo < 1; servo++) {
int newwaarde = readMux(servo);
// delay(5);
if((newwaarde > 250) && (newwaarde < 500)){
int newservo = map(newwaarde, 250, 500, 120, 450);
pwm0.setPWM(servo, 0, newservo);
Serial.print("Reading sensor ");
Serial.print(servo);
Serial.print(" ");
Serial.print(newwaarde);
Serial.print(" to ");
Serial.println(newservo);
delay(10);
}
}
}
// ----- programma interactie mensen
//void peopleaction(){
// if
// for (servo = 0; servo < 10; servo++) {
// pwm0.setPWM(0, 0, int degreelength);
// }
//}
// ----- programma interactie mensen