Ciao a tutti,
Sono nuovo di questo forum e sono un principiante.
Ho imparato da me a controllare la velocità di un motore DC con un potenziometro e a usare un joystick per far funzionare dei LED e un buzzer.
Ora vorrei capire come utilizzare il joystick potenziometrico con lo scopo di regolare la velocità e il verso di rotazione del motore: chiedendo ad amici elettronici mi hanno spiegato che si può usare il joystick come se fosse un potenziometro e in modo che il motore giri in un verso spostando il joystick a destra, e nell'altro verso spostandolo a sinistra.
Qualcuno sarebbe capace di creare un codice simile, magari spiegando ciò che si sta scrivendo?
Pubblico ciò che fino a ora sono riuscito a elaborare per conto mio.
Grazie in anticipo per l'attenzione.
codice motori-joystick:
int JOYSTICK_X = A0;
int JOYSTICK_Y = A1;
int JOYSTICK_BUTTON = 5;
int MOTOR_UP = 9;
int MOTOR_RIGHT = 10;
int MOTOR_LEFT = 8;
nt LED = 13;
int potenziometro_up = A2;
int potenziometro_right = A3;
int potenziometro_left = A4;
void setup(){
pinMode(JOYSTICK_BUTTON, INPUT_PULLUP);
pinMode(MOTOR_UP, OUTPUT);
pinMode(MOTOR_RIGHT, OUTPUT);
pinMode(MOTOR_LEFT, OUTPUT);
pinMode(LED, OUTPUT);
}
void loop(){
//inserisco i parametri per attivare i motori
int x = analogRead(JOYSTICK_X);
int y = analogRead(JOYSTICK_Y);
int button =! digitalRead(JOYSTICK_BUTTON);
digitalWrite(MOTOR_RIGHT, x < 400);
digitalWrite(MOTOR_LEFT, x > 600);
digitalWrite(MOTOR_UP, y > 600);
delay(100);
}
codice motore-potenziometro:
int motore = 9;
int pulsante = 5;
int potenziometro = A2;
unsigned long ultimoTempoDebounce = 0;
int ultimaLettura = LOW;
int attesaDebounce = 400;
int motorStato = LOW;
void setup(){
pinMode(motore, OUTPUT);
pinMode(pulsante, INPUT);
}
void loop(){
int lettura = digitalRead(pulsante);
if(lettura != ultimaLettura and lettura == HIGH){
if(!motorStato){
ultimoTempoDebounce = millis();
}
motorStato =!motorStato;
}
ultimaLettura = lettura;
if(motorStato){
if((millis()-ultimoTempoDebounce) > attesaDebounce){
int motorSpeed = map(analogRead(potenziometro), 0, 1023, 70, 255);
analogWrite(motore, motorSpeed);
}else{
analogWrite(motore, 255);
}
}else{
analogWrite(motore, 0);
}
delay(50);
}