Salve a tutti ho un problema che per molti sarà banale devo variare la velocità di un motore uln2003 28byj-48 tramite porta seriale quello che sono riuscito a fare fino ad ora è farlo girare a velocità costante dal programma ma non sono in grado di variare la sua velocità da seriale questo è il programma
#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper = Stepper(stepsPerRevolution, 2, 4, 5, 3);
void setup() {
// Set the speed to 5 rpm:
myStepper.setSpeed(5);
// Begin Serial communication at a baud rate of 9600:
Serial.begin(9600);
}
void loop() {
// Step one revolution in one direction:
Serial.println("BPM");
myStepper.step(stepsPerRevolution);
}
grazie a chi mi da una mano, è da due giorni che cerco ma non sono riuscito : Smiley-confuse:
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta è stato spostato, da un moderatore di quella sezione, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato :
quindi in ingresso accetta una long che in arduino ha un range da -2,147,483,648 a 2,147,483,647...però visto la formula che c'è dopo il "negativo" non lo si usa.
detto questo...non so se a te servirà tutto questo "numerone" ( 2,147,483,647 )...consideriamo di si...casomai fai lo stesso ragionamento con il numero che t'interessa.
allora come sai il monitor seriale di arduino invia all'arduino un char alla volta q quindi il numero 2147483647 (ho tolto le virgole) è formato da 10 char.
tu devi crearti una char array di 11 elementi (l'ultimo è il terminatore 0x00); una variabile globale di tipo byte per conteggio char "ricevuti"; nel loop() fai (pseudo codice):
se nella seriale c'è qualche cosa
leggo cos'è arrivato
se diverso da '\n' e da '\r'
lo inserisco nella posizione "ricevuti" dell'array
incremento la variabile "ricevuti"
se uguale a '\n'
salvo nella posizione "ricevuti" dell'array il valore 0x00
richiamo il metodo setSpeed() inserendo come argomento la strtol(la mia char array,NULL,10)
azzero la "ricevuti"
azzero la mia char array
a tutto questo andrebbe casomai aggiunto un controllo su quanti char sono arrivati (magari invii un numero con più di 10 cifre) se il valore inviato è nel range minimo e massimo ammissibile da una long; se il valore è negativo etc etc
io suggerire di inviare dal seriale, come velocità, un valore in % magari compreso tra 0.01 e 100.00 e fare un map() di questo valore tra un valore minimo e massimo fatto da due #define...sempre con i dovuti controlli...ma questo magari lo vediamo dopo che hai capito come ricevere e gestire caratteri dalla seriale.
Ciao grazie per la risposta sto cercando di realizzare questo https://www.instructables.com/id/MesoTune-Magnetic-MIDI-Controller/ la struttura c'è adesso devo fare tutta la parte software il software fornito da chi la costruito non mi va quindi sto cercando di crearne un altro sto cercando di sistemare le impostazioni singolarmente prima il display che legge i giri poi che si interffacci alla tastiera poi la lettura dei hall sensor e così via, per quanto riguarda i giri visto che dopo devo convertirli in bpm massimo arriverò a 240bpm