Hallo allemaal ben met projectje bezig en ben op zoek naar een goede oplossing. Ben geen programmeur maar kan de code meestal wel enig zins aanpassen naar mijn zin maar veel verder kom ik niet. Draai het object met twee Arduino's omdat het mij niet lukt om het met een Arduino te draaien. Denk ook niet dat dat lukt om het vloeiend te laten lopen. Eerste Arduino leest een VU-meter uit met drie leds die dat omzet in drie gradaties d.m.v uitlezing van de VU-leds en een servo aanstuurt voor mond bewegingen. Tweede Arduino draait voor wat random bewegingen een paar keer en dan ontkoppeld hij de servo's. Hoe kan ik de tweede Arduino met de bewegingen weer laten beginnen. Dacht zelf om de eerste VU-led van de andere Arduino te meten en dan te starten als de input heeft. Hoe pak ik dit aan of zijn er nog eventueel andere makkelijke oplossingen?
Code eerste Arduino
/***********************************************************
08-14-2016 Mike North This is a little proof of concept
to make a servo move in sync with audio.
*******************/
#include "SoftRcPulseOut.h"
#define TEST_PIN 11 //pin 11 set to ground will kick off the servo sweep test
int audio_value = 0;
long lastMsg = 0;
long sleepWindow = 300000; //if 5 minutes go by with no signal, then put the servos to bed
SoftRcPulseOut servo;
volatile boolean servosEnabled = false;
volatile boolean ledsOn = true;
volatile unsigned long currentTime = 0;
volatile unsigned long lastLEDtime = 0;
unsigned long resetWait = 120000; //servos sleep if not changed within this time frame (120 secs)
void setup()
{
set_minmax();
pinMode(TEST_PIN,INPUT); //pin 11 will be
digitalWrite(TEST_PIN,HIGH); //assign pull-up resistor
}
void loop()
{
servo_test();
audio_updates(); //read sample from audio input and apply average to buffer
if(servosEnabled)
{
action(); //servos are handled in the action loop
SoftRcPulseOut::refresh();
if((millis() - lastMsg) > sleepWindow)
detach_servos();
}
}
void attach_servos()
{ // attach the pin to the servo object
servo.attach(2);
servosEnabled = true;
}
void detach_servos()
{ // detach the servo objects
servo.detach();
servosEnabled = false;
}
void servo_test()
{
if(digitalRead(TEST_PIN) == HIGH) return;
attach_servos();
SoftRcPulseOut::refresh();
for(int i = 0; i < 360;i++)
{
if(i < 180)
audio_value = i;
else
audio_value = 359 - i;
action();
for(int i = 0; i < 10; i++)
{
delay(1);
SoftRcPulseOut::refresh();
}
}
detach_servos();
}
void audio_updates()
{
audio_value = 0;
if(analogRead(A0) < 341) audio_value += 70;
if(analogRead(A1) < 341) audio_value += 70;
if(analogRead(A2) < 341) audio_value += 40;
if(audio_value > 0)
{
lastMsg = millis(); //save the time stamp from when we last had some action
if(!servosEnabled)attach_servos();
}
}
void action() {
if (!servosEnabled) attach_servos();
servo.write(audio_value);
SoftRcPulseOut::refresh();
}
void set_minmax()
{
servo.setMinimumPulse(map(110,0,180,512,2400));
servo.setMaximumPulse(map(70,0,180,512,2400));
}
Code tweede Arduino
#include <VarSpeedServo.h>
VarSpeedServo myservoNeckhor;
VarSpeedServo myservoNeckver;
VarSpeedServo myservoNeckdia;
VarSpeedServo myservoEyesLeft;
VarSpeedServo myservoEyesRigh;
void setup() {
myservoNeckhor.attach(8);
myservoNeckver.attach(9);
myservoNeckdia.attach(10);
myservoEyesLeft.attach(7);
myservoEyesRigh.attach(6);
}
void loop() {
int LEFneckhor = random(100,115); //uitslagrandom links recht beweging
int RIGneckhor = random(95,100);
int upneckver = random(80,100) ; //uitslagrandom op neer beweging
int downneckver = random(110,130);
int LEFneckdia = random(90,120); //uitslagrandom kruislings beweging
int RIGneckdia = random(70,90);
int SPEED1 = random(1,3); //verschillende snelheden
int SPEED2 = random(3,5);
int SPEED = 3;
int SPEED3 = 350;
for (int i = 0; i < 4 ; i++) { //na een paar loops servo's uit
myservoEyesLeft.write(129,SPEED3);//open kleiner //ogendicht
myservoEyesRigh.write(65,SPEED3);//open groter
myservoEyesLeft.wait();
myservoEyesRigh.wait();
myservoEyesLeft.write(88,SPEED3);//open kleiner //ogen weer open
myservoEyesRigh.write(105,SPEED3);//open groter
myservoEyesLeft.wait();
myservoEyesRigh.wait();
myservoNeckhor.write(LEFneckhor, SPEED1);
myservoNeckdia.write(LEFneckdia, SPEED2);
myservoNeckver.write(upneckver, SPEED);
myservoNeckhor.wait();
myservoNeckdia.wait();
myservoNeckver.wait();
myservoEyesLeft.write(129,SPEED3);//open kleiner //ogendicht
myservoEyesRigh.write(65,SPEED3);//open groter
myservoEyesLeft.wait();
myservoEyesRigh.wait();
myservoEyesLeft.write(88,SPEED3);//open kleiner //ogen weer open
myservoEyesRigh.write(105,SPEED3);//open groter
myservoEyesLeft.wait();
myservoEyesRigh.wait();
myservoNeckhor.write(RIGneckdia, SPEED1);
myservoNeckhor.wait();
myservoEyesLeft.write(129,SPEED3);//open kleiner //ogendicht
myservoEyesRigh.write(65,SPEED3);//open groter
myservoEyesLeft.wait();
myservoEyesRigh.wait();
myservoEyesLeft.write(88,SPEED3);//open kleiner //ogen weer open
myservoEyesRigh.write(105,SPEED3);//open groter
myservoEyesLeft.wait();
myservoEyesRigh.wait();
myservoNeckhor.write(RIGneckhor, SPEED1);
myservoNeckdia.write(LEFneckdia, SPEED2);
myservoNeckver.write(downneckver, SPEED);
myservoNeckhor.wait();
myservoNeckdia.wait();
myservoNeckver.wait();
myservoNeckhor.write(RIGneckdia, SPEED1);
myservoNeckhor.wait();
}
myservoNeckhor.write(90,SPEED2);
myservoNeckver.write(90,SPEED2);
myservoNeckdia.write(90,SPEED2);
myservoEyesLeft.write(65);
myservoEyesRigh.write(105);
delay (2000);
myservoNeckhor.detach();
myservoNeckver.detach();
myservoNeckdia.detach();
myservoEyesLeft.detach();
myservoEyesRigh.detach();
}