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);

}

, 👍-1


1 ответ


0

Строка:

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(...) — это конструктор, в который вы передаете определения выводов, а значения присваиваются этим переменным внутри класса. Но вы можете передавать литералы или другие переменные в конструкторе. Вы даже можете объявить те же имена переменных в вашем основном исходном файле, но вы никогда не сможете напрямую получить доступ к закрытым переменным извне класса.

,

Спасибо. Однако, когда я просматриваю 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