Beh ... inizia con il mettere qui il programma che hai scritto tu (... mi raccomando, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) e poi vediamo ...
cortesemente usa l'apposita funzione del IDE per formattare il tuo codice (CTRL-T oppure dal menu Tools -> Autoformat) così le indentature e tutto il resto prende un'aspetto ... più umano
righe vuote NON servono a nulla se non a separare alcune parti logiche, ma sparse ne codice ... danno solo fastidio alla lettura
... guarda il tuo codice e vedi come l'ho formattato io per te nel tuo post
Tu dici che quando premi il bottone il motore parte, ma gira anche non non premi il motore (... se ho capito bene) ... quindi sembrerebbe leggere male il pin ... come hai collegato il bottone ? Ovvero ... quando il bottone NON è premuto, in che condizioni si trova il pin ? C'è una resistenza di pull-down ?
Perché definire una variabile "button" ... se poi nel codice una volta la usi ed un'altra invece usi direttamente A0 ? ? ? Un po' di congruenza ...
// Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!
#include <AFMotor.h>
AF_DCMotor motor(4);
int barrier = A0;
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");
pinMode(A0, INPUT);
motor.setSpeed(180);
}
void loop() {
Serial.print("tick");
motor.run(FORWARD);
delay(1000);
if (barrier == HIGH);
{ motor.run(RELEASE);
delay(5000);
}
Serial.print("tock");
motor.run(BACKWARD);
delay(1000);
Serial.print("stop ");
motor.run(RELEASE);
delay(1000);
}
non riesco ad attivare la pausa RELEASE (delay 5000)
solo quando il sensore (barrier ) e' HIGH .
praticamente la pausa RELEASE (delay5000) la fa' sempre
indipendentemente che (barrier= A0)sia HIGH oppure LOW
qualcuno gentilmente mi sa dire perche' l'IF e' ignorato nel Loop ?
digitalRead(barrier);
pero non ho capito per assegnare il pin a barrier
ho scritto :
int barrier=A0 (sono rimasti solo i pin anoal-digital A0-A4 da poter usare )
invece dovevo scrivere : int barrier_pin A0 ?
(barrier e' un lettore a forcella infrarosso che serve come fine corsa)
mille grazie per la tua pazienza
e scusa se il testo , a volte inciampa per la chiarezza
valente
fammi un grandisssimo favore:
Togli quele righe vuote tra il testo.
int barrier=A0 (sono rimasti solo i pin anoal-digital A0-A4 da poter usare )
invece dovevo scrivere : int barrier_pin A0 ?
no, devi scrivere
if (digitalRead(barrier) == HIGH)
al posto di
if (barrier == HIGH);
ciao Uwe
[EDiIT] Tolto ";" dal if; errore segnalato in seguito da Brunello. Grazie[/EDIT]
salve saluti
ho caricato lo sketc con le modifiche suggerite
pero' purtroppo ha sempre il solito problema , non risponde al segnale A0 HIGH , esegue sempre tutto il programma loop , perfettamente . sia che A0 sia LOW or HIGH.
Non ci capisco piu' nulla , il cablaggio e' Ok pull down Ok
posto lo sketch tante volte avessi sbagliato ancora
// Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!
#include <AFMotor.h>
AF_DCMotor motor(4);
int barrier = A0;
int barri = A1;
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");
pinMode(A0, INPUT);
pinMode(A1, INPUT);
motor.setSpeed(180);
}
void loop() {
Serial.print("tick");
motor.run(FORWARD);
delay(1000);
if (digitalRead(barrier) == HIGH);
{ motor.run(RELEASE);
delay(5000);
}
Serial.print("tock");
motor.run(BACKWARD);
delay(1000);
Serial.print("stop ");
motor.run(RELEASE);
delay(1000);
}
forse sara' che la scheda AFmotor ignora i comandi di questo genere ?
saluti a presto
valente
buongiorno adesso funziona e posso andare avanti a compilare lo sketc con altri input
se ti chiedo come mai va tolto il ; alla fine della riga if nel loop ?
leggendo in giro , sempre per imparare , tutti scrivono che ogni riga di comando deve terminare con ;
quindi non e' vero
Il IF fa condizionato la istruzione o il blocco "{..}" che é scritto dopo.
Se metti un ";" il IF finisce lí e l' istruzione o blocco seguente non é condizionata dal IF.
Ci sono alcuni casi dove non va il ";"
nel #define
nelle condizioni e loop, IF, While, Do While, FOR, ecc
valente:
leggendo in giro , sempre per imparare , tutti scrivono che ogni riga di comando deve terminare con ;
quindi non e' vero
... ogni "statement completo" deve terminare con il ";" ... ne tuo caso lo statement NON era completo dato che mancava COSA fare.
Mi spiego ...
... se scrivi: if (condizione) statement;
** else statement;**
... vedi che ci sono i ";"
ma se scrivi: if (condizione) { .............. }
** else { ...............}**
... vedi che i ";" non ci sono perché hai un blocco ben definito dalle {}.
Ovviamente, ogni statement all'interno delle {} dovrà concludersi con un ";"
grazie a tutti che mi avete insegnato qualcosa di nuovo , e' difficile da autodidatti ,
leggo di tutto , manuali dispense libretti , ma si impara di piu' sul campo
tanti cari saluti