All pins reserved by servo. I cant use a DC motor at the same time.
Afficher commentaires plus anciens
Hi everyone, I have just started to use MATLAB with arduino for a university project.
I'm trying to use both a servo and a DC motor with an arduino, but when I initialise the servo motor, all the pins (or at least the PWM ones) become reserved to the servo.
a = arduino('COM4', 'Uno', 'Libraries', 'Servo')
s = servo(a, 'D11', 'MinPulseDuration', 0.00055, 'MaxPulseDuration', 0.0024)
writePWMDutyCycle(a, "D9", 1)
The error I get is:
"Digital pin D9 is reserved by Servo in 'Reserved' mode. To change the pin configuration, clear all variables holding onto this resource."
I have tried other pins, but they are all reserved. If i don't initialise the servo, it works.
How can I reserve just one pin for the servo and not all of them?
Thanks
Réponse acceptée
Plus de réponses (2)
Madhu Govindarajan
le 13 Nov 2018
I only have an MKR1000 at my disposal right now and here is what I tried with no error messages. See if a similar approach works for you on Uno.
a = arduino
configurePin(a,'D9','Servo')
configurePin(a,'D10','DigitalOutput')
s = servo(a, 'D9', 'MinPulseDuration', 0.00055, 'MaxPulseDuration', 0.0024)
writePWMDutyCycle(a, 'D10', 1)
This did not give me any errors, but I do not have actual devices connected. So I cannot confirm that the hardware is doing what it is supposed to. But there are no reasons why it should not.
HTH
1 commentaire
Levi Montgomery
le 8 Nov 2020
Doesn't work either. I still get the error any time I want to write to a digital pin (not the one I am using for my servo) . Marked your suggestion with %%%%%%%%%%
clear
a = arduino();
% below is adapted from MiniProjectCollectData by Neil Moore
writeDigitalPin(a, 'D9', 1); % on
pause(0.1);
red = readVoltage(a, 'A0');
pause(0.1);
writeDigitalPin(a, 'D9', 0); % off
%
s1 = servo(a, 'D6', 'MinPulseDuration', 700*10^-6, 'MaxPulseDuration', 2300*10^-6);
while 0==0
if red < 0.0195506
material = "mousepad";
writePosition(s1, 1)
else
if red < 0.058651
material = "calculator";
writePosition(s1,.75)
else
material = "folder";
writePosition(s1, .5)
end
end
fprintf("Your material is %s!\n ", material)%%%%%%%%%%%%%%%%%
configurePin(a,'D9','DigitalOutput') %%%%%%%%%%%%%%%%%
writeDigitalPin(a, 'D9', 1); % on
pause(0.1);
red = readVoltage(a, 'A0');
pause(0.1);
writeDigitalPin(a, 'D9', 0); % off
end
Daniel
le 5 Juin 2024
0 votes
This issue is caused by the way the Arduino Servo library handles pins. Their documentation states that "use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins."
So, the fix for this issue is to not use the pins that the Servo Library disables while using the Servo Library, which worked in this similar situation:
https://www.mathworks.com/matlabcentral/answers/1698815-all-pins-reserved-by-arduino-servo
Communautés
Plus de réponses dans Power Electronics Control
Catégories
En savoir plus sur Troubleshooting in MATLAB Support Package for Arduino Hardware dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!