Devo fare girare due motori DC con quattro bottoni vedere sul LCD l'impulso della rotazione (tramite contatto magnetico)
e trasmettere sul schild le due entrate per i due motori avanti indietro e velocità
ecco raggiunto fin ora esperimentale(manca ultima parte e comanda solo un motore)
Pin liberi 6/13
tutto occupato da 4 bottoni e lcd
e fattibile usare ini dello stesso numero pin
o domando troppo per arduino... XD
Grazie
#include <LiquidCrystal.h>
int in=7; //+Verticale
int in2=8; //+Orizzontale
int in3=9; //-Verticale
int in4=10; //-Orizzontale
int pinDirA=10; //Motore DC Direzione
int pinDirB=8; //Motore Dc Direzione
int pinPwmA=3; //Pwm
int pinPwmB=9; //Pwm Nota!!!!da sistemare i Pin!!!
int a = 0;
int b = 0;
int c= 0;
int d = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
pinMode(in,INPUT);
lcd.begin(16, 2);
lcd.print("Il MioSat");
delay(2000); lcd.clear();
lcd.setCursor(11,1);
lcd.print("");
lcd.setCursor(0, 0);
lcd.print("Oriz.");
lcd.setCursor(0, 1);
lcd.print("Vert.");
pinMode( pinDirA,OUTPUT );
pinMode( pinPwmA,OUTPUT );
pinMode( pinDirB,OUTPUT );
pinMode( pinPwmB,OUTPUT );
}
void loop() {
c=digitalRead(in);
if ( c== 1){b=b+1; delay(500);}
c=digitalRead(in3);
if ( c== 1){b=b-1; delay(500);}
d=digitalRead(in2);
if ( d== 1){a=a+1;delay(500);}
d=digitalRead(in4);
if ( d== 1){a=a-1;delay(500);}
lcd.setCursor(6, 0);
lcd.print(a); lcd.print(" ");
lcd.setCursor(6, 1);
lcd.print(b); lcd.print(" ");
digitalWrite( pinDirA,HIGH );
digitalWrite( pinDirB,HIGH );
// velocità massima
analogWrite( pinPwmA,255 );
analogWrite( pinPwmB,255 );
delay(5000);
digitalWrite( pinDirA,LOW );
digitalWrite( pinDirB,LOW );
// velocità massima
analogWrite( pinPwmA,255 );
analogWrite( pinPwmB,255 );
Nota che inserendo l'opzione INPUT_PULLUP il collegamento non necessita di resistori di pull-up poiché si sfrutta un resistore da 20k interno ad Arduino collegato ai +5V.
Basta collegare un estremo del pulsante a massa (GND) e l'altro all'ingresso analogico, tenendo presente che quando verrà premuto l'istruzione digitalRead(A1) restituirà LOW.
ok tolgo int e metto (pin mode)
poi cambio in A1,A2 ecc in void loop come sotto!
il pulsante viene specificato ora in A1 e non più int
non cambia se e( c=digitalRead)?? c=digitalRead(A1);<------
Dunque!
void loop() {
c=digitalRead(A1);<------
if ( c== 1){b=b+1; delay(500);}
c=digitalRead(A2);
if ( c== 1){b=b-1; delay(500);}
d=digitalRead(A3);
if ( d== 1){a=a+1;delay(500);}
d=digitalRead(A4);
if ( d== 1){a=a-1;delay(500);}
Giusto??!! scus della mia ingoranza ma applico solo la logica non ho studiato.....
Grazie
byte pinDir1 = 10; // direzione motore 1
byte pinDir2 = 8; // direzione motore 2
byte pinPWM1 = 3; // PWM motore 1
byte pinPWM2 = 9; // PWM motore 2
La verifica mi da errore, pinMode(PinDir1, OUTPUT );
does not name a type
in fondo mi serve solo la lettura del contatore,che ad ogni giro lo dava in gradi
per sapere la posizione,per quello che riguarda i motori penso di lasciare perdere!
lo farò meccanicamente con relè vedrò se fattibile usare un relè a 5 volt che mi comanda il motore
grazie comunque
Prima la variabile viene dichiarata come pinDir1 e poi viene indicata come PinDir1. Il C/C++ è case-sensitivi e quelli sono 2 nomi diversi. Cambia uno dei due.
Infatti non ho visto!
la maiuscola
il motore viene alimentato sulla scheda Arduino?
so che come amperaggio e molto limitato,voglio provare con una scheda relè
per aumentare gli Amp. fatto stare che non posso regolare la tensione/Velocità....però!!!
Grazie per lo sketch