ssPin, resetPin, updatePin, ps0, ps1, osk — не были объявлены в этой области
Приведенный ниже код вызывает ошибку:
ssPin не был объявлен в этой области
Эта ошибка повторяется для всех элементов DDS, т. е. ssPin
, resetPin
, updatePin
, ps0
, ps1
и osk
Может ли кто-нибудь обнаружить проблему?
#include <SPI.h>
#include <AD9954.h>
AD9954 DDS(ssPin, resetPin, updatePin, ps0, ps1, osk);
void setup() {
SPI.begin();
SPI.setClockDivider(4);
SPI.setDataMode(SPI_MODE0);
delay(500); // пусть всё настроится...
DDS.initialize(400000000); // инициализируем DDS с тактовой частотой 400 МГц
}
void loop() {
DDS.setFreq(25000000); // устанавливаем DDS на 25 МГц
delay(2000);
}
@Mike Richards, 👍-1
1 ответ
Строка:
AD9954 DDS(ssPin, resetPin, updatePin, ps0, ps1, osk);
не имеет никакого контента выше, который объявляет, что эти переменные существуют. Вы можете объявить их как
const uint8_t ssPin, resetPin, updatePin, ps0, ps1, osk;
Вероятно, вам также захочется присвоить им значения, соответствующие используемым контактам:
const uint8_t ssPin=4, resetPin=5, updatePin=6, ps0=7, ps1=8, osk=9;
(фактические значения должны соответствовать номерам контактов, используемым в вашем конкретном случае.)
Файл AD9954.h
объявляет эти имена переменных как закрытые внутри класса. Они недоступны для использования вне класса. Вызов DDS(...)
— это конструктор, в который вы передаете определения выводов, а значения присваиваются этим переменным внутри класса. Но вы можете передавать литералы или другие переменные в конструкторе. Вы даже можете объявить те же имена переменных в вашем основном исходном файле, но вы никогда не сможете напрямую получить доступ к закрытым переменным извне класса.
- Arduino Due vs Mega 2560
- Точность часов времени Arduino
- Регистры ввода-вывода SAM3X8E (Arduino Due)
- Построение графика на Python с использованием Tkinter Canvas
- Ручная установка Arduino Due
- analogRead всегда 1023 на Arduino Due
- Как выбрать пару SDA/SCL на Arduino Due?
- Как упаковать 16-битное целое число, чтобы отправить его с помощью serial.write?
Спасибо. Однако, когда я просматриваю AD9954.h, я вижу, что переменные были объявлены как закрытые в классе AD9954, но он, похоже, их не улавливает., @Mike Richards
Правильно, они являются частными для класса. Они недоступны для использования вне класса. Вызов
DDS(...)
— это конструктор, в который вы передаете определения контактов, а значения присваиваются этим переменным внутри класса. Но вы можете передавать литералы или другие переменные в конструкторе. Вы даже можете объявить те же имена переменных в вашем основном исходном файле, но вы никогда не сможете напрямую получить доступ к частным переменным извне класса., @jose can u cХорошо, спасибо за очень ясное объяснение, теперь я понимаю проблему. Я давно не занимался Arduino, поэтому мне нужно включить мозги. Спасибо., @Mike Richards
В качестве последнего комментария по этому поводу, рассматриваемая строка (AD9954 DDS(ssPin, resetPin, updatePin, ps0, ps1, osk);) используется для передачи фактических номеров выводов Arduino для этих назначений выводов объекту. В рабочей версии я использовал следующую строку: AD9954 DDS(2, 3, 4, 5, 6, 7);, @Mike Richards