shield stepper A1

salve sono Valente credo gia' di essermi presentato nel posto giusto

vorrei capire come posso usare una skeda stepper Adafruit V1 , visto che su arduino 2009

restano liberi solo i pin A0-A5

e la scheda stepper esegue sempre lo sketch della libreria ADmotor

non riesco a comandare la scheda , naturalmento sono alle prime armi

cerco qualche suggerimento

saluti a tutti Valente

valente:
vorrei capire come posso usare una skeda stepper Adafruit V1 , visto che su arduino 2009

Se metti un link alla scheda di cui parli ... magari chi non la conosce riesce anche a capire cosa è ed a leggerne le specifiche.

Guglielmo

Scusa ho dimenticato

bene vorrei far funzionare questa scheda con un pulsante di marcia e di arresto

ma non so' dove cominciare , non risponde a nessun sketch tipico con button , che inserisco

nello sketc AB motor stepper exemple .

esegue sempre il loop della libreria caricata ( ABmotor stepper exemple)

grazie saluti valente

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 ...

Guglielmo

// Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!

#include <AFMotor.h>

// Connect a stepper motor with 48 steps per revolution (7.5 degree)
// to motor port #2 (M3 and M4)

AF_Stepper motor(48, 2);

int button = A0;
int  pausa = 1000;

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Stepper test!");
  pinMode(button, INPUT);
  motor.setSpeed(100);  // 10 rpm
}

void loop() {
  if (digitalRead(A0) == HIGH)
  {
    Serial.println("Single coil steps");
    motor.step(1000, FORWARD, SINGLE);

    delay(pausa);
    Serial.println("Double coil steps");
    motor.step(100, FORWARD, DOUBLE);
    motor.step(100, BACKWARD, DOUBLE);
    delay(pausa);
    Serial.println("Interleave coil steps");
    motor.step(100, FORWARD, INTERLEAVE);
    motor.step(100, BACKWARD, INTERLEAVE);
    delay(pausa);
    Serial.println("Micrsostep steps");
    motor.step(500, FORWARD, MICROSTEP);
    delay(pausa);
  }
}

scusate se sbaglio ma e' la prima volta che scrivo sul Forum

come si vede ho inserito un IF per comandare l,avvio del loop del motore stepper

il motore va' , ma anche se non attivo il pin A0

troppo semplicino vero ?

grazie saluti valente

Allora,

  1. 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

  2. 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 :wink:

  1. 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 ?

  2. Perché definire una variabile "button" ... se poi nel codice una volta la usi ed un'altra invece usi direttamente A0 ? ? ? Un po' di congruenza ...

Guglielmo

si scusa comincio adesso a postare sul forum

button e' collegato ad A0 , ed A0 e' posto DOWN con resistenza di pull down

va HIGH premendo il pulsante , ma la shield stepper funziona sempre appena alimento Arduino
indipendentemente

dal pulsante premuto

vorrei invece farla funzionare solo se il pulsante e' premuto quindi HIGH

spero di essere stato comprensibile pian piano mi adeguo

saluti valente

salve a tutti ripropongo un semplice sketch

// 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 ?

grazie e saluti
Valente principiante

metti nella variabile barrier il pin del pulsante.

if (barrier == HIGH);

Qui stai confrontando il numero del pin e non lo stato del pin.
devi legger lo stato con digitalRead(barrier)

ciao Uwe
nella media per certe cose; principiante per altre.

ciao grazia per la dritta

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

valente:
ciao grazia per la dritta

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]

bene ti ringrazio
ciao Valente

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

  if (digitalRead(barrier) == HIGH);

vedo un " ; " di troppo

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

grazie per l'aiuto
valente

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

Ciao Uwe

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 ";"

Spero di averti chiarito l'uso ...

Guglielmo

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

valente