Помогите в написании библиотеки
- Войдите на сайт для отправки комментариев
Ср, 18/10/2017 - 18:04
Написал самую простенькую библиотеку(первую в моей жизни).Написал просто так, для ознакомления с программированием Ардуино, и встретился с проблемой.
Суть проблемы: в скетче через эту библиотеку вывожу значения в порт.Но значения, приходящие в порт равны нулю.Однако, если заменить строчку кода " (analogRead(pin)*5.0)/1023.0; "(в файле analog.cpp) на любое число(или переменную "pin"), то оно приходит в порт в "целости и сохранности".
Файл analog.cpp:
#include "analog.h"
Analog::Analog(int pin){
pinMode(pin, INPUT);
analogVolt =(analogRead(pin)*5.0)/1023.0;
}
файл analog.h:
#ifndef Analog_h
#define Analog_h
#include "Arduino.h"
class Analog
{
public:
Analog(int pin);
long analogVolt;
private:
};
#endif
скетч:
#include <analog.h>
int pin = 3;
Analog an(pin);
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(an.analogVolt);
delay(500);
Serial.println(analogRead(pin));
}
Помогите, пожалуйста, как мне исправить эту проблему.
Помогите, пожалуйста, как мне исправить эту проблему.
Не читать из порта в конструкторе класса, а перенести это в метод, который кликать из loop.
Вопрос #1: вы по недосмотру или намеренно в конструкторе класса считываете int через analogRead() int, который пытаетесь привести к float и засунуть в long?
/**/ //-------------------------------------------- // класс аналоговый вольтметр class Cl_Analog { protected: const byte pin; public: Cl_Analog(byte _pin): pin(_pin) {} float read() { return analogRead(pin) * 5 / 1023.0; } }; //------компоновка------------------------------ Cl_Analog Analog(/*пин*/A2); //------main()---------------------------------- void setup() { Serial.begin(9600); } void loop() { Serial.println( Analog.read()); delay(500); } /*Скетч использует 2568 байт (7%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 187 байт (9%) динамической памяти, оставляя 1861 байт для локальных переменных. Максимум: 2048 байт. */