All pins reserved by servo. I cant use a DC motor at the same time.

40 ビュー (過去 30 日間)
Massimiliano Zingarelli
Massimiliano Zingarelli 2018 年 11 月 13 日
コメント済み: Eric Davishahl 2021 年 10 月 28 日
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

採用された回答

Madhu Govindarajan
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
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
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
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
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 ExchangeArduino Hardware についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by