#include <Servo.h> //libreria servo gia' installata di default nell'ide arduino
Servo myservoa; // creazione variabili per servo
Servo myservob;
Servo myservoc;
Servo myservod;
Servo myservoe;
int servoa = 100; // variabili contenenti la posizione iniziale dei servo
int servob = 100; //ogni qualvolta la scheda arduino verrà resettata
int servoc = 100; // i servo torneranno nella medesima posizione.
int servod = 100;
int servoe = 100;
void setup() {
myservoa.attach(9); // il numero traparentesi indica il pin data Output di arduino dove
myservob.attach(8); // connettere lingresso data del servo.
myservoc.attach(6);
myservod.attach(7);
pinMode(12,INPUT);//servod //i seguenti numeri di input(traparentesi) indicano gli ingressi di arduino
pinMode(13,INPUT);//servod // provenienti dai pinout della actionoiseboard,
pinMode(11,INPUT);//servoc // come si puo' notare ad ogni coppia di servo appartiene una coppia di
pinMode(10,INPUT);//servoc //due diversi numeri, ad ogni numero di input equivale la rotazione
pinMode(2 ,INPUT);//servoa // del servo in senso arario e antiorario.
pinMode(4,INPUT);//servoa //ad ogni segnale di HIGH proveniente dalla Actionoiseboard
pinMode(3,INPUT);//servob //equivale la rotazione non cotinua di qualche millimetro del servo
pinMode(5,INPUT);//servob //corrispondente, per ritornare alla posizione
//sarà necessaria la frequenza di reset (SQ-R) proveniente dal pinout
//della actionoiseboard che resetterà contemporaneamente tutte le board arduino
} // in quando connessi allo stesso pin di reset.
void loop() {
if (digitalRead(2) == HIGH) { //servoa movimento orario
servoa++;
if (servoa == 180) {
servoa--;
}
}
if (digitalRead(3) == HIGH){ //servob movimento orario
servob++;
if (servob == 180){
servob--;
}
}
if (digitalRead(10)== HIGH){ //servoc movimento orario
servoc++;
if (servoc == 180){
servoc--;
}
}
if (digitalRead(13)== HIGH){ //servod movimento orario
servod++;
if (servod == 180){
servod--;
}
}
if (digitalRead(4) == HIGH){ //servoa movimento antiorario
servoa--;
if (servoa == 0){servoa++; }
}
if (digitalRead(5) == HIGH){ //servob movimento antiorario
servob--;
if (servob == 0){
servob++;
}
}
if (digitalRead(11) == HIGH){ //servoc movimento antiorario
servoc--;
if (servoc == 0){
servoc++;
}
}
if (digitalRead(12) == HIGH){ //servod movimento antiorario
servod--;
if (servod == 0){
servod++;
}
}
myservoa.write(servoa);
delay(3);// piu' il numero del delay sale piu' la velocita' del servo diminuisce.
myservob.write(servob);
delay(3);
myservoc.write(servoc);
delay(3);
myservod.write(servod);
delay(3);
}
// il valore traparentesi(servoa) varia al variare del segnale in entratata proveniente dalla actionoiseboard
// e quindi dai comandi audio disponibili nella home page all'indirizzo actionoise.com
//ogni segnale decodificato dalla actionoiseboard darà un segnale di HIGH all'arduino
// che farà variare i valori (servoa,servob,servoc ecc..) e quindi dare il movimento
//orario o antiorario al servo corrispondente
Di seguito video dimostrativo che descrive
il codice sopra
L'app dei comandi genera il corretto segnale audio
sollecitando L'IC 10OUT il quale manda il segnale ad Arduino
che lo elabora ed azione il servoa
L'app guitar command e' disponibile nello store google a questo link
basterà utilizzare i 10 comandi audio in combinazione (sequenze audio-SQ)
di seguito il codice arduino per utilizzare la combinazione
ad esempio SQ1+SQ3(HIGH) SQ1+SQ2(HIGH)ecc....
//il seguente codice permette di avere un segnale HIGH in uscita della board arduino
//tramite la combinazione di due segnali HIGH in entrata ordinati
//provenienti dai pinout della actionoiseboard.
//ordinati perche' la sequenza innesca L'HIGH soltanto sollecitanto
//l'input nella sequenza ordinata 1-2 e non 2-1.
int a=0; //la seguente variabile segnala la corretta sequenza
void setup()
{
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
void loop()
{
if(digitalRead(4)==HIGH){ // se il Primo pin4 ha ricevuto L'HIGH dalla
a=1; //actionoiseboard la variabile "a"
} //sarà 1
if(digitalRead(5)==HIGH && a==1){
digitalWrite(10,HIGH); // se il secondo pin5 riceve L'HIGH
a=0; // e la variabile "a" ha valore 1
} //la sequenza e' corretta
if(digitalRead(5)== HIGH && a!=1){ //quindi il pin 10 va in HIGH
while(1);} // in caso contrario while(1)
//blocca il loop quindi la board
if(digitalRead(6)==HIGH && a==1){ //necessita il reset
digitalWrite(11,HIGH); //stessa cosa per il pin6
a=0; // che porta invece in HIGH
} // il pin 11.
if(digitalRead(6)== HIGH && a!=1){
while(1);}
}
// aggiungendo pin in input ed OUTPUT potranno essere aggiunti altri servo
// azionabili da remoto
nel seguente video ho utilizzato due led rispettivamente connessi
al pin 10 e 11 di arduino il quale a sua volta riceve i segnali di HIGH
dalla actionoiseboard, i pin di input della board di arduino del codice
sopra sono 4-5-6(pinout 1-2-3 della actionoiseboard)
la sequenza input4-5 (out1-2 actionoiseboard)
porta in HIGH il led rosso(pin 10 HIGH)
dopo il reset azionato con la sequenza audio dell'ultimo
bottone rosso che si puo vedere in video
la sequenza viene cambiata con in4-6 (1-3 actionoiseboard)
e aziona il led bianco
i bottoni rossi che si vedono nel monitor del notebook
portano in esecuzione le 10 sequenze audio che sollecitano
i 10 pin out della actionoiseboard
l'undicesimo tasto equivale al reset
nel sequente link potete trovare
la pagina comandi