Как я могу присвоить переменную выходу функции в Arduino?

Я пытаюсь назначить выходные данные моей функции (которая регулирует выходной сигнал ЦАП) переменной, чтобы я мог распечатать и отобразить ее на своем последовательном мониторе. Вот код

#include <Wire.h>
#include <Adafruit_MCP4725.h>

Adafruit_MCP4725 dac;

int volza;

void setup() {
  Serial.begin(38400);
  Serial.println("Hello!");
  dac.begin(0x60);
}

void loop() {
    volza = dac.setVoltage(1095, 1); // ЭТО ПРОБЛЕМА
    Serial.println(volza);
}

Я получаю сообщение об ошибке из-за закомментированной строки. Я думаю, это потому, что я пытаюсь вернуть значение внутри цикла void. Как это исправить?

, 👍0

Обсуждение

Я знаю, что это потому, что я пытаюсь вернуть значение, находясь внутри цикла void... откуда вы это знаете?, @jsotola

Изучая проблему, я столкнулся с несколькими потоками, в которых упоминается, что «void» означает, что у вас не может быть возвращаемого значения. Пожалуйста, поправьте меня, если я ошибаюсь, @Ali the Dazzling

это правильно, однако это будет значение, возвращаемое loop() ... loop() никогда не завершается, поэтому он не возвращается ни к одному вызывающему объекту, @jsotola

Понимаю. Спасибо!, @Ali the Dazzling


1 ответ


1

Метод setVoltage имеет следующий прототип:

void setVoltage( uint16_t output, bool writeEEPROM );

Это означает, что он не возвращает значение.

Если вы ожидаете вернуть 1095, почему бы не написать:

volza = 1095;
setVoltage(volza, 1);
Serial.println(volza);

Некоторая справочная информация:

Предположим, вы хотите иметь в библиотеке метод getVoltage, тогда это возможно (вы должны сделать копию файла в своем собственном проекте и добавить метод. Однако я не уверен, как легко получить значение из EEPROM. Если это не так просто, нужно выполнить некоторую работу по программированию. Другое решение — сохранить значение в памяти, но это означает, что некоторые дополнительные байты из скудного свободного SRAM. , теоретически содержимое уже может быть изменено (если другой MCU также будет иметь доступ к EEPROM).

,

Отлично, большое спасибо за разъяснение. «1095», который у меня есть, - это просто фиктивный пример, я планирую, чтобы аналоговый вход фактически регулировал это значение, поэтому мне было интересно прочитать его, назначив его переменной. Вы бы сказали, что я мог бы использовать AnalogRead вместо того, чтобы пытаться присвоить его переменной?, @Ali the Dazzling

Вероятно, однако, что на самом деле происходит, зависит от реализации setVoltage., @Michel Keijzers