fratt:
Ciao. Alla prima riga del setup in entrambi gli sketch usi il pin 13 credo per 2 cose diverse.
Per prima cosa secondo me dovresti verificare tutti i pin e controllare che non siano in conflitto nei 2 sketch.
Poi sarebbe molto utile anche definire ogni pin con una #define che "spieghi" cosa fa il pin. Capire lo sketch con i numeri di pin sparsi in giro è dura.
Ciao fratt, grazie. Vedi un po se cosi son più chiaro, ho modificato credo per quanto possibile il codice.
In pratica con una app bluetooth riesco distintamente ad usare i due programmi, quello dei motori lo uso con dei semplici pulsanti sulla app, quello dei servi lo uso con due slider sulla app, muovendo questi slider riesco a ruotare i servi. Bene dovrei unire queste funzioni in un unico programma.
//* i pin input1,input2, enable, pilotano un ponte H per il motore di sinistra
//i pin input3, input4, enable pilotano l'altro ponte H per il motore di destra
//in particolare il pin enable serve ad impostare la velocità desiderata su entrambi i ponti H
//di cui ho collegato in parallelo il pin della regolazione di velocità.Quindi regolando la velocità
// su enable con analogwrite,lo faccio indistitamente su entrambi i ponti H
int statoFari=0; //da uno stato ai fari, se statoFari =0 allora i fari spenti, se statoFari = 1 allora i fari sono accesi
char data = 0;
#define input1 2 //ponte H sinistra
#define input2 4 //ponte H sinistra
#define enable 3 //ponti H destra e sinistra
#define input3 17 //ponte H destra
#define input4 18 //ponte H destra
#define fari 6 // fari
#define LedArduinoON 13 // Led che si accende non appena Arduino sarà alimentato
void setup() {
pinMode (LedArduinoON, OUTPUT);
digitalWrite(LedArduinoON, HIGH); //led indicazione accensione arduino
Serial.begin(9600);
pinMode (enable, OUTPUT); //da la velocità ad entrambi i motori con un analogwrite che pilota il ponte H
pinMode (input1, OUTPUT);// ponte H sinistra
pinMode (input2, OUTPUT);// ponte H sinistra
pinMode (input3, OUTPUT);//ponte H destra
pinMode (input4, OUTPUT);// ponte H destra
pinMode( fari, OUTPUT);
}
void loop(){
if(Serial.available() > 0){
data = Serial.read(); //Legge il dato in arrivo e lo mette in data
Serial.print(data); //Stampa il valore del dato nel Serial monitor (per vederlo ricordate di impostare il baund a 38400)
if(data == 's'){ // SE RICEVI s GIRA A SINISTRA
analogWrite(enable, 150); // velocità impostata a 150
digitalWrite(input1, LOW);
digitalWrite(input2, HIGH);
digitalWrite(input3, HIGH);
digitalWrite(input4, LOW);
}
if(data == 'd'){ // SE RICEVI d GIRA A DESTRA
analogWrite(enable, 150); // velocità impostata a 150
digitalWrite(input1, HIGH);
digitalWrite(input2, LOW);
digitalWrite(input3, LOW);
digitalWrite(input4, HIGH);
}
if(data == 'a'){ // SE RICEVI a VAI AVANTI
analogWrite(enable, 150); // velocità impostata a 150
digitalWrite(input1, HIGH);
digitalWrite(input2, LOW);
digitalWrite(input3, HIGH);
digitalWrite(input4, LOW);
}
if(data == 'r'){ // SE RICEVI r VAI RETRO
analogWrite(enable, 150); // velocità impostata a 150
digitalWrite(input1, LOW);
digitalWrite(input2, HIGH);
digitalWrite(input3, LOW);
digitalWrite(input4, HIGH);
}
if(data == 'p'){ // SE RICEVI p ALLORA STOP
digitalWrite(enable,LOW); // poni il pin enable a livello basso per spegnere i ponti H
}
if((data == 'L')and(statoFari==0)){ // SE RICEVI "L" E I LED SONO SPENTI ALLORA ACCENDI FARI
digitalWrite(fari,HIGH); //ACCENDI I FARI
statoFari=1; //I FARI SONO NELLO STATO 1 OVVERO ACCESI
}
else if((data == 'L') and (statoFari==1)){ // SE RICEVI "L" E I FARI SONO ACCESI ALLORA SPEGNILI
digitalWrite(fari,LOW); //SPEGNI I FARI
statoFari=0; // I FARI SONO NELLO STATO 0 OVVERO SPENTI
}
}
}
#define bluetooth Serial
#include <Servo.h>
Servo myServo1, myServo2;
//myservo1 = servo rotazione camera asse z
//myServo2 = servo rotazione camera asse y
char cmd[100];
int cmdIndex;
boolean cmdStartsWith(char *st) {
for(int i=0; ; i++) {
if(st[i]==0) return true;
if(cmd[i]==0) return false;
if(cmd[i]!=st[i]) return false;;
}
return false;
}
void exeCmd() {
if( cmdStartsWith("servo1 ") ) { // example: if cmd is "servo1 1500"
int val = atoi(cmd+7); // val will be 1500
// cmd+7, because value comes after "servo1 " which is 7 characters
myServo1.writeMicroseconds(val);
}
if( cmdStartsWith("servo2 ") ) {
int val = atoi(cmd+7);
myServo2.writeMicroseconds(val);
}
}
void setup() {
delay(500); // wait for bluetooth module to start
bluetooth.begin(115200); // Bluetooth default baud is 115200
Serial.begin(9600);
myServo1.attach(19, 1000, 2000); //19 = pin del servo1, servo asse z
myServo2.attach(16, 1000, 2000); //16 = pin del servo2, servo asse y
cmdIndex = 0;
}
void loop() {
if(bluetooth.available()) {
char c = (char)bluetooth.read();
Serial.print(c);
if(c=='\n') {
cmd[cmdIndex] = 0;
exeCmd(); // execute the command
cmdIndex = 0; // reset the cmdIndex
} else {
cmd[cmdIndex] = c;
if(cmdIndex<99) cmdIndex++;
}
}
}