Si può chiamare un void xxx all'interno di un altro void yyy?
Come si costruisce la sintassi?
ess?
Grazie
Si può chiamare un void xxx all'interno di un altro void yyy?
Come si costruisce la sintassi?
ess?
You can call it a void inside another void xxx yyy?
How do you build the syntax?
ess?
questo è il listato che non mi si avvia:
Scusate l'ignoranza ma è da poco che uso il linguaggio C , fin ora ho usato l'assembler della microchip quindi i pic.
#include <Servo.h>
Servo Testa;
int angle2;
int triggerPort = 7; //uscita segnale trigger
int echoPort = 8;//ingresso echo
int servopin = 2;
int servopin2 = 3;
int angle;
int pulsewidth;
int conta = 0;
void letturadistanza (int triggerPort){
digitalWrite( triggerPort, LOW ); //setta al livello logico 0 la porta trigger
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );//setta al livello logico 1 (5V) la porta trigger
delayMicroseconds( 10 ); //ritardo di 10 microsecondi
digitalWrite( triggerPort, LOW ); //setta al livello logico 0 la porta trigger
long duration = pulseIn( echoPort, HIGH ); //long variabili a 32bit, duration nome della variabile
// mette dentro duration il tempo che trascorre prima che echoPort diventa allo stato logico1
long r = 0.034 * duration / 2; //long variabili a 32bit, r nome della variabile
//mette dentro r
Serial.print( "durata: " ); //scrive sul monitor la scritta tra ""
Serial.print( duration ); //scrive sul monitor la la variabile tra()
Serial.print( " , " ); //scrive sul monitor la scritta tra ""
Serial.print( "distanza: " ); //scrive sul monitor la scritta tra ""
//dopo 38ms è fuori dalla portata del sensore, adesso fino a 50ms
if( duration > 50000 ) Serial.println( "fuori portata");
else { Serial.print( r ); Serial.println( "cm" );}
//aspetta 1.5 secondi
delay( 500 );
}
void servopulse(int servopin,int angle){
pulsewidth=(angle*11)+500;
digitalWrite (servopin,HIGH);
delayMicroseconds (pulsewidth);
digitalWrite (servopin,LOW);
delay (15);
}
void servopulse2(int servopin2,int angle){
pulsewidth=(angle*11)+500;
digitalWrite (servopin2,HIGH);
delayMicroseconds (pulsewidth);
digitalWrite (servopin2,LOW);
delay (15);
}
void setup()
{
Testa.attach(4);
pinMode (servopin,OUTPUT);
pinMode (servopin2,OUTPUT);
pinMode( triggerPort, OUTPUT );// triggerPort è una porta in uscita
pinMode( echoPort, INPUT ); // echoPort è una porta in ingresso
Serial.begin( 9600 ); //imposta la porta seriale del monitor a 9600
Serial.println( "Sensore ultrasuoni: "); //scrive sul monitor la scritta tra ""
}
void loop()
{
inizio:
conta=5;
cammina:
letturadistanza
if (duration < 500) {goto cammina;}
conta--;
for (angle=72; angle<=90; angle++){
servopulse (servopin, angle);
}
for (angle=105; angle>=90; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=90; angle<=108; angle++){
servopulse (servopin, angle);
}
for (angle=90; angle>=75; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=108; angle>=90; angle--){
servopulse (servopin, angle);
}
for (angle=75; angle<=90; angle++){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=90; angle>=72; angle--){
servopulse (servopin, angle);
}
for (angle=90; angle<=105; angle++){
servopulse2 (servopin2, angle);
}
delay(200);
if (conta==0) {goto testaa;}
else {goto cammina;}
// per far riallineare l'insetto---------------------------------------
testaa:
for (angle=72; angle<=90; angle++){
servopulse (servopin, angle);
}
for (angle=105; angle>=90; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
//-----------------------------------qui sotto gira la testa------------------------------
for (angle2=90; angle2>=0; angle2--){ //ciclo for che sposta l'angolo del servo
//Posizione = analogRead (Pot);
//Gradi=map(90);
Testa.write(angle2);
delay(30);}
delay(2000);
//------------------------------
//for (angle2=45; angle2>=0; angle2--){ //ciclo for che sposta l'angolo del servo
//Testa.write(angle2);
//delay(30);}
//delay(2000);
//------------------------------------------
for (angle2=0; angle2<=45; angle2++){ //ciclo for che sposta l'angolo del servo
//Posizione = analogRead (Pot);
//Gradi=map(90);
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=45; angle2<=90; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=90; angle2<=135; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=135; angle2<=180; angle2++){ //ciclo for che sposta l'angolo del servo
//Posizione = analogRead (Pot);
//Gradi=map(90);
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=180; angle2>=90; angle2--){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//------------------------------
//for (angle2=135; angle2>=90; angle2--){ //ciclo for che sposta l'angolo del servo
// Testa.write(angle2);
//delay(30);}
//delay(2000);
//------------------------------
}
questo è il listato che non mi si avvia:
Scusate l'ignoranza ma è da poco che uso il linguaggio C , fin ora ho usato l'assembler della microchip quindi i pic.
this is the list that I did not start:
Sorry for the ignorance but it is just that I use the C language, so far I have used the assembler of microchips so the pic.
click the MODIFY button in the upper right of the post window.
Highlight all you code.
click the "#" CODE TAGS button on the toolbar above just to the left of the QUOTE button.
click SAVE (at the bottom).
When you post code on the forum, please make a habit of using the code tags "#" button.
haga clic en el botón Modificar en la parte superior derecha de la ventana de mensaje.
Resalte todo lo que el código.
haga clic en el botón CODE TAGS "#" en la barra de herramientas de arriba justo a la izquierda del botón del CITA.
haga clic en SAVE (en la parte inferior).
Al publicar el código en el foro, por favor, hacer un hábito de uso de las etiquetas de código de botón "#".
#include <Servo.h>
Servo Testa;
int angle2;
int triggerPort = 7; //uscita segnale trigger
int echoPort = 8;//ingresso echo
int servopin = 2;
int servopin2 = 3;
int angle;
int pulsewidth;
int conta = 0;
void letturadistanza (int triggerPort){
digitalWrite( triggerPort, LOW ); //setta al livello logico 0 la porta trigger
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );//setta al livello logico 1 (5V) la porta trigger
delayMicroseconds( 10 ); //ritardo di 10 microsecondi
digitalWrite( triggerPort, LOW ); //setta al livello logico 0 la porta trigger
long duration = pulseIn( echoPort, HIGH ); //long variabili a 32bit, duration nome della variabile
// mette dentro duration il tempo che trascorre prima che echoPort diventa allo stato logico1
long r = 0.034 * duration / 2; //long variabili a 32bit, r nome della variabile
//mette dentro r
Serial.print( "durata: " ); //scrive sul monitor la scritta tra ""
Serial.print( duration ); //scrive sul monitor la la variabile tra()
Serial.print( " , " ); //scrive sul monitor la scritta tra ""
Serial.print( "distanza: " ); //scrive sul monitor la scritta tra ""
//dopo 38ms è fuori dalla portata del sensore, adesso fino a 50ms
if( duration > 50000 ) Serial.println( "fuori portata");
else { Serial.print( r ); Serial.println( "cm" );}
//aspetta 1.5 secondi
delay( 500 );
}
void servopulse(int servopin,int angle){
pulsewidth=(angle*11)+500;
digitalWrite (servopin,HIGH);
delayMicroseconds (pulsewidth);
digitalWrite (servopin,LOW);
delay (15);
}
void servopulse2(int servopin2,int angle){
pulsewidth=(angle*11)+500;
digitalWrite (servopin2,HIGH);
delayMicroseconds (pulsewidth);
digitalWrite (servopin2,LOW);
delay (15);
}
void setup()
{
Testa.attach(4);
pinMode (servopin,OUTPUT);
pinMode (servopin2,OUTPUT);
pinMode( triggerPort, OUTPUT );// triggerPort è una porta in uscita
pinMode( echoPort, INPUT ); // echoPort è una porta in ingresso
Serial.begin( 9600 ); //imposta la porta seriale del monitor a 9600
Serial.println( "Sensore ultrasuoni: "); //scrive sul monitor la scritta tra ""
}
void loop()
{
inizio:
conta=5;
cammina:
letturadistanza
if (duration < 500) {goto cammina;}
conta--;
for (angle=72; angle<=90; angle++){
servopulse (servopin, angle);
}
for (angle=105; angle>=90; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=90; angle<=108; angle++){
servopulse (servopin, angle);
}
for (angle=90; angle>=75; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=108; angle>=90; angle--){
servopulse (servopin, angle);
}
for (angle=75; angle<=90; angle++){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=90; angle>=72; angle--){
servopulse (servopin, angle);
}
for (angle=90; angle<=105; angle++){
servopulse2 (servopin2, angle);
}
delay(200);
if (conta==0) {goto testaa;}
else {goto cammina;}
// per far riallineare l'insetto---------------------------------------
testaa:
for (angle=72; angle<=90; angle++){
servopulse (servopin, angle);
}
for (angle=105; angle>=90; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
//-----------------------------------qui sotto gira la testa------------------------------
for (angle2=90; angle2>=0; angle2--){ //ciclo for che sposta l'angolo del servo
//Posizione = analogRead (Pot);
//Gradi=map(90);
Testa.write(angle2);
delay(30);}
delay(2000);
//------------------------------
//for (angle2=45; angle2>=0; angle2--){ //ciclo for che sposta l'angolo del servo
//Testa.write(angle2);
//delay(30);}
//delay(2000);
//------------------------------------------
for (angle2=0; angle2<=45; angle2++){ //ciclo for che sposta l'angolo del servo
//Posizione = analogRead (Pot);
//Gradi=map(90);
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=45; angle2<=90; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=90; angle2<=135; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=135; angle2<=180; angle2++){ //ciclo for che sposta l'angolo del servo
//Posizione = analogRead (Pot);
//Gradi=map(90);
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=180; angle2>=90; angle2--){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//------------------------------
//for (angle2=135; angle2>=90; angle2--){ //ciclo for che sposta l'angolo del servo
// Testa.write(angle2);
//delay(30);}
//delay(2000);
//------------------------------
}
Leggere il regolamento:
- ci si presenta prima di iniziare a pubblicare domande;
- nella sezione internazionale si scrive in inglese;
- il codice si racchiude all'interno degli appositi tag.
fuso, per chiarirti un po' le idee, comincia a leggere QUI ...
... poi ne riparliamo
Guglielmo
E cortesemente correggi il tuo post mettendo il codice, come ti è stato detto, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone # ... terzultimo della seconda fila !
... l'ha fatto per te un moderatore ... ma ricordatene !!!
@Leo72,
Mi piace il tuo orologio
fuso:
Ciao, sono fuso, veramente fuso, è da un paio d'ore che cerco di creare un programma semplice ma non riesco a capire come creare i void dove inserire una serie di istruzioni da richiamare quando necessari dall'interno del void LOOP. Il programma consiste nel far camminare un piccolo robot tramite 2 servo (e fin qui ci sono) poi tramite un terzo servo ruota la testa in 5 posizioni (fin qui ci sono), e poi tramite un misuratore ad ultrasuoni legge la distanza e se inferiore a 20 cm si ferma (e qui ci sono). La cosa che devo fare e non ci riesco è fare 10 letture in ogni posizione (delle 5 posizioni della rotazione della testa) così da fare una media, e poi sapere tra le 5 letture quella più distante in modo da indirizzare il robot in quella rirezione. La cosa più grave e che non capisco come costruire un void loop per richiamarlo e se si può chiamare all'interno di un void un altro void.
Grazie
Non ho capito bene, comunque per la sintassi di richiamare funzioni tue è abbastanza semplice.
void MiaFunz1()
{ gruppo di istruzioni
}
void MiaFunz2()
{ altre istruzioni
}
void MiaFunz3()
{ altre istruzioni
MiaFunz1(); // richiamo la 1
}
void loop()
{ ...
MiaFunz1();
...
MiaFunz2();
...
MiaFunz3();
}
Non ho indicato la setup() e le variabili che usi in comune tra tutte le funzioni vanno dichiarate all'inizio. Le variabili dichiarate dentro alle MiaFunzXX() sono variabili locali.
Il problema di base è che il programma è unico ed è difficile fare più cose contemporaneamente.
raschemmel:
@Leo72,
Mi piace il tuo orologio
Thanks/Danke/Merci/Grazie
Scusate... Adesso mi sono presentato e ho letto il regolamento.
il codice riscritto dovrebbe essere questo, ma da errore...
#include <Servo.h>
Servo Testa;
int angle2;
int triggerPort = 7; //uscita segnale trigger
int echoPort = 8;//ingresso echo
int servopin = 2;
int servopin2 = 3;
int angle;
int pulsewidth;
int conta = 0;
void letturadistanza (int triggerPort){
digitalWrite( triggerPort, LOW ); //setta al livello logico 0 la porta trigger
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );//setta al livello logico 1 (5V) la porta trigger
delayMicroseconds( 10 ); //ritardo di 10 microsecondi
digitalWrite( triggerPort, LOW ); //setta al livello logico 0 la porta trigger
long duration = pulseIn( echoPort, HIGH ); //long variabili a 32bit, duration nome della variabile
// mette dentro duration il tempo che trascorre prima che echoPort diventa allo stato logico1
long r = 0.034 * duration / 2; //long variabili a 32bit, r nome della variabile
//mette dentro r
Serial.print( "durata: " ); //scrive sul monitor la scritta tra ""
Serial.print( duration ); //scrive sul monitor la la variabile tra()
Serial.print( " , " ); //scrive sul monitor la scritta tra ""
Serial.print( "distanza: " ); //scrive sul monitor la scritta tra ""
//dopo 38ms è fuori dalla portata del sensore, adesso fino a 50ms
if( duration > 50000 ) Serial.println( "fuori portata");
else { Serial.print( r ); Serial.println( "cm" );}
//aspetta 1.5 secondi
delay( 500 );
}
void servopulse(int servopin,int angle){
pulsewidth=(angle*11)+500;
digitalWrite (servopin,HIGH);
delayMicroseconds (pulsewidth);
digitalWrite (servopin,LOW);
delay (15);
}
void servopulse2(int servopin2,int angle){
pulsewidth=(angle*11)+500;
digitalWrite (servopin2,HIGH);
delayMicroseconds (pulsewidth);
digitalWrite (servopin2,LOW);
delay (15);
}
void setup()
{
Testa.attach(4);
pinMode (servopin,OUTPUT);
pinMode (servopin2,OUTPUT);
pinMode( triggerPort, OUTPUT );// triggerPort è una porta in uscita
pinMode( echoPort, INPUT ); // echoPort è una porta in ingresso
Serial.begin( 9600 ); //imposta la porta seriale del monitor a 9600
Serial.println( "Sensore ultrasuoni: "); //scrive sul monitor la scritta tra ""
}
void loop()
{
inizio:
conta=5;
cammina:
void (letturadistanza)
if (duration < 500) {goto cammina;}
conta--;
for (angle=72; angle<=90; angle++){
servopulse (servopin, angle);
}
for (angle=105; angle>=90; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=90; angle<=108; angle++){
servopulse (servopin, angle);
}
for (angle=90; angle>=75; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=108; angle>=90; angle--){
servopulse (servopin, angle);
}
for (angle=75; angle<=90; angle++){
servopulse2 (servopin2, angle);
}
delay(200);
for (angle=90; angle>=72; angle--){
servopulse (servopin, angle);
}
for (angle=90; angle<=105; angle++){
servopulse2 (servopin2, angle);
}
delay(200);
if (conta==0) {goto testaa;}
else {goto cammina;}
// per far riallineare l'insetto---------------------------------------
testaa:
for (angle=72; angle<=90; angle++){
servopulse (servopin, angle);
}
for (angle=105; angle>=90; angle--){
servopulse2 (servopin2, angle);
}
delay(200);
//-----------------------------------qui sotto gira la testa------------------------------
for (angle2=90; angle2>=0; angle2--){ //ciclo for che sposta l'angolo del servo
//Posizione = analogRead (Pot);
//Gradi=map(90);
Testa.write(angle2);
delay(30);}
delay(2000);
//------------------------------
for (angle2=0; angle2<=45; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=45; angle2<=90; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=90; angle2<=135; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=135; angle2<=180; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
//-----------------------------
for (angle2=180; angle2>=90; angle2--){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);}
delay(2000);
}
Questo è l'errore che mi da:
insettolentgiusto3.ino: In function 'void loop()':
insettolentgiusto3:84: error: expected `;' before 'if'
Ti dice che manca un punto e virgola.
E poi.... non usare i goto in C....
Anche se il linguaggio li permette, poi crei il cosidetto "spaghetti code", cioè codice che non riesci a seguire e dove diventa problematico trovare errori di logica,.
-
Perchè mettere quei 24 quintali di righe vuote che non servono a un tubo se non a confondere? Mah. Non solo tu, ma anche altri utenti.
-
usa il CTRL+T che ti allinea il codice in maniera corretta dentro l'IDE di Arduino
-
Questo non ha senso:
void loop()
{
inizio:
conta=5;
cammina:
void (letturadistanza)
Cosa vuol dire void(letturadistanza) ?
Al limite per chiamare la funzione scrivi letturadistanza(xxx); a cui devi passare inoltre un valore
Non ti garantisco il funzionamento....
#include <Servo.h>
Servo Testa;
const int triggerPort = 7; //uscita segnale trigger
const int echoPort = 8;//ingresso echo
const int servopin = 2;
const int servopin2 = 3;
int conta = 0;
void setup()
{
Testa.attach(4);
pinMode (servopin,OUTPUT);
pinMode (servopin2,OUTPUT);
pinMode( triggerPort, OUTPUT );// triggerPort è una porta in uscita
pinMode( echoPort, INPUT ); // echoPort è una porta in ingresso
Serial.begin( 9600 ); //imposta la porta seriale del monitor a 9600
Serial.println( "Sensore ultrasuoni: "); //scrive sul monitor la scritta tra ""
conta = 5;
}
void loop()
{
do {
cammina();
}
while (letturadistanza() < 500);
conta--;
if (conta==0) {
testaa();
conta = 5;
}
else {
cammina();
}
}
void cammina() {
for (int angle=72; angle<=90; angle++) servopulse(servopin, angle);
for (int angle=105; angle>=90; angle--) servopulse(servopin2, angle);
delay(200);
for (int angle=90; angle<=108; angle++) servopulse(servopin, angle);
for (int angle=90; angle>=75; angle--) servopulse(servopin2, angle);
delay(200);
for (int angle=108; angle>=90; angle--) servopulse(servopin, angle);
for (int angle=75; angle<=90; angle++) servopulse(servopin2, angle);
delay(200);
for (int angle=90; angle>=72; angle--) servopulse(servopin, angle);
for (int angle=90; angle<=105; angle++) servopulse(servopin2, angle);
delay(200);
}
void testaa(){
// per far riallineare l'insetto---------------------------------------
for (int angle=72; angle<=90; angle++) servopulse(servopin, angle);
for (int angle=105; angle>=90; angle--) servopulse(servopin2, angle);
delay(200);
//-----------------------------------qui sotto gira la testa------------------------------
for (int angle2=90; angle2>=0; angle2--){ //ciclo for che sposta l'angolo del servo
//Posizione = analogRead (Pot);
//Gradi=map(90);
Testa.write(angle2);
delay(30);
}
delay(2000);
//------------------------------
for (int angle2=0; angle2<=45; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);
}
delay(2000);
//-----------------------------
for (int angle2=45; angle2<=90; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);
}
delay(2000);
//-----------------------------
for (int angle2=90; angle2<=135; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);
}
delay(2000);
//-----------------------------
for (int angle2=135; angle2<=180; angle2++){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);
}
delay(2000);
//-----------------------------
for (int angle2=180; angle2>=90; angle2--){ //ciclo for che sposta l'angolo del servo
Testa.write(angle2);
delay(30);
}
delay(2000);
}
unsigned long letturadistanza (){
digitalWrite( triggerPort, LOW ); //setta al livello logico 0 la porta trigger
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );//setta al livello logico 1 (5V) la porta trigger
delayMicroseconds( 10 ); //ritardo di 10 microsecondi
digitalWrite( triggerPort, LOW ); //setta al livello logico 0 la porta trigger
long duration = pulseIn( echoPort, HIGH ); //long variabili a 32bit, duration nome della variabile
// mette dentro duration il tempo che trascorre prima che echoPort diventa allo stato logico1
long r = 0.034 * duration / 2; //long variabili a 32bit, r nome della variabile
//mette dentro r
Serial.print( "durata: " ); //scrive sul monitor la scritta tra ""
Serial.print( duration ); //scrive sul monitor la la variabile tra()
Serial.print( " , " ); //scrive sul monitor la scritta tra ""
Serial.print( "distanza: " ); //scrive sul monitor la scritta tra ""
//dopo 38ms è fuori dalla portata del sensore, adesso fino a 50ms
if( duration > 50000 ) Serial.println( "fuori portata");
else {
Serial.print( r );
Serial.println( "cm" );
}
//aspetta 1.5 secondi
delay(500);
return duration;
}
void servopulse(int pin,int angle){
unsigned long pulsewidth = (angle*11) + 500;
digitalWrite (pin,HIGH);
delayMicroseconds (pulsewidth);
digitalWrite (pin,LOW);
delay (15);
}
Quando una funzione richiamata termina il programma prosegue dal comando successivo alla funzione.
Dimentica Goto, Pic e Visual Basic, smetti di saltare a destra e sinistra come una Rana e approfondisci i comandi e le strutture del C.
Oltre al Do..While, con il controllo alla fine, c'è il While che controlla all'inizio del ciclo.
Ti ho inserito una funzione che restituisce un parametro ed ho usato variabili locali al posto di quelle globali.
Non c'è bisogno di scrivere due volte la funzione servopulse, basta passare in ingresso variabili diverse.
Dovresti ridurre al minimo l'uso dei delay.
Grazie Paolo, di camminare cammina, di girare la testa pure, ma non si ferma se la distanza è inferiore a circa 20 cm. ora vedo...
Grazie.
Infatti nel codice che ho riscritto partendo dal tuo, non si ferma...
Richiama continuamente cammina();
Dovresti riscrivere quella parte.
Sto riorganizzando il listato in modo da dare più direzioni, cioè avanti, indietro, gira a destra e gira a sinistra. Quindi sto scrivendo per il momento 4 file diversi e dopo unirli in un unico file. Così da fare camminare questo "insetto" avanti, appena trova un ostacolo d'avanti ruota la testa in 5 posizioni 0-45-90-135-180 gradi (leggendo 10 volte per punto e facendo la media), comparare queste 5 distanze e direzionarlo verso la distanza maggiore. ci riuscirò?? Spero di si!