Помогите в написании библиотеки

Vil
Offline
Зарегистрирован: 26.07.2017

Написал самую простенькую библиотеку(первую в моей жизни).Написал просто так, для ознакомления с программированием Ардуино, и встретился с проблемой.

Суть проблемы: в скетче через эту библиотеку вывожу значения в порт.Но значения, приходящие в порт равны нулю.Однако, если заменить строчку кода " (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));
}

Помогите, пожалуйста, как мне исправить эту проблему.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Vil пишет:

Помогите, пожалуйста, как мне исправить эту проблему.

Не читать из порта в конструкторе класса, а перенести это в метод, который кликать из loop.

sadman41
Offline
Зарегистрирован: 19.10.2016

Вопрос #1: вы по недосмотру или намеренно в конструкторе класса считываете int через analogRead() int, который пытаетесь привести к float и засунуть в long?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/**/
//--------------------------------------------
// класс аналоговый вольтметр
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 байт.
*/