Hoe twee Arduinos te koppelen en aan te sturen voor een project ?

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();
 }

ja hoor dat kan best met 1 arduino UNO.
in je eerste programma zie ik een delay staan die elke keer 3600 keer aangeroepen wordt en dat is niet slim.
kijk eens hoe je dat eigenlijk wilt hebben. nu loopt het dus 360 keer en daarin nog een 10 keer en dat kost inderdaad veel tijd.
de servos lopen toch wel langzaam door je snelheidsinstelling.

shooter:
ja hoor dat kan best met 1 arduino UNO.
in je eerste programma zie ik een delay staan die elke keer 3600 keer aangeroepen wordt en dat is niet slim.
kijk eens hoe je dat eigenlijk wilt hebben. nu loopt het dus 360 keer en daarin nog een 10 keer en dat kost inderdaad veel tijd.
de servos lopen toch wel langzaam door je snelheidsinstelling.

Dank je. Zal er eens mee experimenteren.