Here is my code. I have been chopping at it quite a bit trying to eliminate possible issues. Also I have noticed that random () is bring back numbers outside the defined parameters like 0??
I shall draw a schematic when I get to work tomorrow.
Thank you for your help
Rob
/*
* NOTES :-
* Analogue pwm outputs- jaw=10, neck=5, tail=6, torso=9
* Digital outputs- eyes = 4,
* Digital inputs- eyes=3, jaw=2, Current ISRs
*/
#include <stdio.h>
int state[5] = {0,0,0,0,0};//State of motors. 0=OFF,1=ON. Initialised to OFF!
int outputs[5] = {1,2,3,4,5};//1=eyes,2=jaw,3=neck,4=tail,5=torso
const byte eyeSensor = 3;
const byte jawSensor = 2;
void setup()
{
Serial.begin(115200);//For debugging purposes. Remove when complete!
pinMode(3,OUTPUT);pinMode(5,OUTPUT);pinMode(6,OUTPUT);pinMode(9,OUTPUT);pinMode(10,OUTPUT);
//pinMode(2,INPUT_PULLUP);//Pulls jawsSensor pin up to 5 V tp prevent erroneous signals
pinMode(12,OUTPUT);//trigger sound card/roar
digitalWrite(12,HIGH);
//pinMode(11,INPUT_PULLUP);//Pulls eyeSensor pin up to 5 V to prevent erroneous signals
pinMode(4,OUTPUT);
digitalWrite(4,LOW);
pinMode(eyeSensor,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(eyeSensor),eyeStop,FALLING);
pinMode(jawSensor,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(jawSensor),jawStop,FALLING);
}
void loop()
{/*
int func = random(1,6);
if(func == 1)eyeFunc();
else if(func == 2)jawFunc();
else if(func == 3)neckFunc(state[2]);
else if(func == 4)tailFunc(state[3]);
else if(func == 5)torsoFunc(state[4]);*/
//subroutines used for debugging purposes
//eyeFunc();
//digitalWrite(4,HIGH);
jawFunc();
//analogWrite(10,153);
//neckFunc(state[2]);
//tailFunc(state[3]);
//torsoFunc(state[4]);
//delay(500);
}
int eyeFunc()
{
digitalWrite(4,HIGH);
Serial.println("start");
}
void eyeStop()
{
digitalWrite(4,LOW);
Serial.println("stop");
}
int jawFunc()
{
int i;
for(i=0;i<=153;i=i+2)
{
analogWrite(10,i);
}
}
void jawStop()
{
analogWrite(10,0);
}
int neckFunc(int& state3)
{
int i;
int rate;
//Serial.println("neck = "state3");
if(state3==0)//Checks motor status and starts/stops accordingly
{
rate =1;
for(i=0;i<=153;i++)
{
analogWrite(5,i);
delay(30);
}
state3 = 1;
}
else if(state3==1)
{
rate = -1;
for(i=153;i>=0;i--)
{
analogWrite(5,i);
delay(30);
}
state3 = 0;
}
}
int tailFunc(int& state4)
{
int i;
int rate;
if(state4==0)//Checks motor status and starts/stops accordingly
{
rate =1;
for(i=0;i<=120;i++)
{
analogWrite(6,i);
delay(30);
}
state4 = 1;
}
else if(state4==1)
{
rate = -1;
for(i=120;i>=0;i--)
{
analogWrite(6,i);
delay(30);
}
state4 = 0;
}
}
int torsoFunc(int& state5)
{
int i;
int rate;
if(state5==0)//Checks motor status and starts/stops accordingly
{
rate =1;
for(i=0;i<=153;i++)
{
analogWrite(9,i);
delay(30);
}
state5 = 1;
}
else if(state5==1)
{
rate = -1;
for(i=153;i>=0;i--)
{
analogWrite(9,i);
delay(30);
}
state5 = 0;
}
}