Controllo contemporaneo di servomotore e motore DC

Ciao a tutti, sono nuovo del forum e scrivo in quanto mi sto avvicinando piano piano al mondo di arduino da completo ignorante, e con non poche difficoltà sto cercando di pilotare contemporaneamente un servo e un motore.
Vi allego il codice

#include <Servo.h>
Servo myServo;
const int enablePin = 9;
const int motor1Pin = 4;
const int motor2Pin = 3;
const int potMot = A1;
const int potServo = A0;
int potValMot = 0;
int potValServo = 0;
int angle = 0;
int avvMot;
void setup() {

  • // put your setup code here, to run once:*
    Serial.begin (9600);
    myServo.attach(5);
    pinMode(motor1Pin, OUTPUT);
    pinMode(motor2Pin, OUTPUT);
    pinMode(enablePin, OUTPUT);
    pinMode(potMot, INPUT);
    pinMode(potServo,INPUT);
    digitalWrite (enablePin, LOW);
    }
    void loop() {
  • // put your main code here, to run repeatedly:*
    potValMot = analogRead(potMot)/4;
  • Serial.print ("\t motore: ");*
  • Serial.println (potValMot);*
  • analogWrite(enablePin, potValMot);*
    potValServo = analogRead(potServo);
    Serial.print ("potenziometro servo: ");
    Serial.print (potValServo);
    angle = map(potValServo, 0, 1023, 0, 179);
    Serial.print (" \t angolo: ");
    Serial.println(angle);
    myServo.write(angle);
    delay(5);

if (Serial.available() > 0) {

  • avvMot = Serial.read();*

if (avvMot == ‘H’) {

  • Serial.print ("lettera e: ");*

  • Serial.println (avvMot);*

  • digitalWrite(motor1Pin, LOW); *

  • digitalWrite(motor2Pin, HIGH);*

  • delay (5);*

  • }*

  • else if (avvMot == ‘J’) {*

  • Serial.print("lettera: ");*

  • Serial.println(avvMot);*

  • digitalWrite(motor1Pin, HIGH); *

  • digitalWrite(motor2Pin, LOW); *

  • delay (5);*

  • }*

  • else if (avvMot == ‘L’) {*

  • Serial.print("lettera: ");*

  • Serial.println(avvMot);*

  • digitalWrite(enablePin, LOW);*

  • digitalWrite(motor1Pin, LOW); *

  • digitalWrite(motor2Pin,LOW);*

  • delay (5);*
    }
    }
    }

Quello che cercavo di fare era poter controllare la velocità del motore con un potenziometro e contemporaneamente, con un altro potenziometro, variare l’angolo di rotazione del servo.
Il problema che ho riscontrato è che il servo funziona a dovere, ma il motore funziona solo in on/off, ovvero quando il segnale del potenziometro arriva al valore massimo (255) il motore si accende, appena scendo a 254 il motore si spegne.
Sapete dirmi gentilmente perchè?
Grazie infinite in anticipo.
Marco

The Servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins.

ciao

Aggiungo anche che non è consigliabile utilizzare il pin enabled del ponte ad H per controllare la velocità del motore. O utilizzi 2 pin con funzionalità PWM oppure lo comandi il lap mode

ciao pippo72

Grazie a tutti per le informazioni, sono state molto utili, ho veramente tanto da imparare... in cosa consisterebbe il "lap mode"?

marco1717: Ciao a tutti, sono nuovo del forum

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

ciao

marco1717: in cosa consisterebbe il "lap mode"?

piccola guida (punto 2.2) se ne è parlato anche qui. per cambiare la prequenza del pwm vedi qui.

ciao pippo72