All pins reserved by servo. I cant use a DC motor at the same time.
35 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Madhu Govindarajan
2018-11-13
Can you try configurepin command to set it as Digital Output or Digital Input depending on your application?
Or does that also error out?
4 个评论
Brian O'Connell
2021-4-16
Why is this an accepted answer when it doesn't answer the question?
I have students with this same question. It's not a consistent issue, only showing up for some students. I have not noticed a trend in operating system or version yet. Has there been any work to solve or address this issue?
Eric Davishahl
2021-10-28
Bumping Brian's question. I also have a few students (not all) experienceing this issue and the configurePin approach does not resolve it.
更多回答(1 个)
Madhu Govindarajan
2018-11-13
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 个评论
Levi Montgomery
2020-11-8
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
社区
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Arduino Hardware 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!