тренировка, создание классов, вопросы

Нет ответов
list65
Offline
Зарегистрирован: 21.04.2016

Добрый денью

Как позволяет время пытаюсь разобраться в этой теме. Прошу помощи. Тренируюсь в создании своих плдпрограмм (или библиотек?). Вот пытаюсь сделать это из работающей своей простой програмки:

// вызываем библиотеку
#include "LedControl.h"  

/*
 Назначаем пины на  цифровые выходы ардуинки
 pin 5 is connected to the DataIn 
 pin 7 is connected to the CLK 
 pin 6 is connected to LOAD  (CS)
1-количество последовательных модулей
  */
LedControl lc=LedControl(5,7,6,1);

/* задержка между зажиганиями разрядов */
//unsigned long delaytime=950;
// Библиотека для термометра 
#include <DHT.h>
// DHT dht(номер цифрового выхода,тип датчика,таймаут 3для 8Мгц/6 для 16Мгц);
DHT dht(8, DHT22, 6);

// назначаем параметры для фоторезистора
int RezPin = 4; // сенсор и понижающий резистор 10 кОм подключены к a4

int RezReading; // описываем аналоговые значения с делителя сенсора

void setup() {
  /*    false- Отключаем энергосберегающий режим 
true-включаем    */
  lc.shutdown(0,false);
  /* яркость от 0 до 15 */
  lc.setIntensity(0,12);
  /* очистка дисплея */
  lc.clearDisplay(0);
  //инициируем послед, порт для терминальной программы (если нужно)
Serial.begin(9600);
//инициируем датчик
dht.begin();

}

void loop() {
RezReading = analogRead(RezPin); //считываем показания с фоторезистора

Serial.print("Analog reading = ");
Serial.println(RezReading);
if( RezReading < 401 )lc.setIntensity(0,1);
if( RezReading > 400 )lc.setIntensity(0,12);

// Задержка 2 секунды между измерениями
delay(2000);
//Считываем влажность
float h = dht.readHumidity();
// Считываем температуру
float t  = dht.readTemperature();
// Проверка удачно прошло ли считывание.
if (isnan(h) || isnan(t)) {
Serial.println("Не удается считать показания");

return;
}

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");

  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");

  ShowLedInd(1, t);
  ShowLedInd(0, h);

}

//Описываем функцию вывода на индикатор. NumBl -номер 4-х разрядного блока (0- правый; 1- левый); Dat -данные к выводу
  void ShowLedInd(int NumBl, float Dat) 
  {
    
   float x;
   x=Dat;
   int x1;
   if( x < 0 )lc.setChar(0,NumBl*4+3,'-',false);
   x1 = (int)(x*10);
   lc.setDigit(0,NumBl*4+0,x1%10,false);
   x1 = x1/10;
   lc.setDigit(0,NumBl*4+1,x1%10,true);
   x1 = x1/10;
   if( x1 >0 )lc.setDigit(0,NumBl*4+2,x1%10,false);

   }

Запутался. Создал три файла и ничего не работает, голова уже кругом ((

файл H:

// проверка, что библиотека еще не подключена
#ifndef ShowLedInd_h // если библиотека Button не подключена
#define ShowLedInd_h // тогда подключаем ее

/* Директива #include предписывает компилятору включить в код программы 
 текст из файла, имя которого следует после директивы. В данном случае 
 будет включен файл Arduino.h, (в старых версиях IDE:«WProgram.h») содержащий стандартные константы и переменные языка Ардуино. 
 В обычных программах он добавляется автоматически, а для библиотеки должен быть указан явно. */
 
#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif 

class ShowLedInd
{
        public:
                int NumBl; //номер 4-х разрядного блока (0- правый; 1- левый)
                float Dat;   //данные для вывода на индикатор
                void ShowLedInd(int NumBl, float Dat)

        private:
                x;
                x1;             
};

#endif 

файл CPP :

#include "ShowLedInd.h"

ShowLedInd::ShowLedInd(int NumBl, float Dat)  
{
  
}

void ShowLedInd::ShowLedInd()

{
    
   float x;
   x=Dat;
   int x1;
   if( x < 0 )lc.setChar(0,NumBl*4+3,'-',false);
   x1 = (int)(x*10);
   lc.setDigit(0,NumBl*4+0,x1%10,false);
   x1 = x1/10;
   lc.setDigit(0,NumBl*4+1,x1%10,true);
   x1 = x1/10;
   if( x1 >0 )lc.setDigit(0,NumBl*4+2,x1%10,false);

   }

Ну и основной файл:

// вызываем библиотеку
#include "LedControl.h"  

/*
 Назначаем пины на  цифровые выходы ардуинки
 pin 5 is connected to the DataIn 
 pin 7 is connected to the CLK 
 pin 6 is connected to LOAD  (CS)
1-количество последовательных модулей
  */
LedControl lc=LedControl(5,7,6,1);

/* задержка между зажиганиями разрядов */
//unsigned long delaytime=950;
// Библиотека для термометра 
#include <DHT.h>
// DHT dht(номер цифрового выхода,тип датчика,таймаут 3для 8Мгц/6 для 16Мгц);
DHT dht(8, DHT22, 6);

// назначаем параметры для фоторезистора
int RezPin = 4; // сенсор и понижающий резистор 10 кОм подключены к a4

int RezReading; // описываем аналоговые значения с делителя сенсора

void setup() {
  /*    false- Отключаем энергосберегающий режим 
true-включаем    */
  lc.shutdown(0,false);
  /* яркость от 0 до 15 */
  lc.setIntensity(0,12);
  /* очистка дисплея */
  lc.clearDisplay(0);
  //инициируем послед, порт для терминальной программы (если нужно)
Serial.begin(9600);
//инициируем датчик
dht.begin();

}

void loop() {
RezReading = analogRead(RezPin); //считываем показания с фоторезистора

Serial.print("Analog reading = ");
Serial.println(RezReading);
if( RezReading < 401 )lc.setIntensity(0,1);
if( RezReading > 400 )lc.setIntensity(0,12);

// Задержка 2 секунды между измерениями
delay(2000);
//Считываем влажность
float h = dht.readHumidity();
// Считываем температуру
float t  = dht.readTemperature();
// Проверка удачно прошло ли считывание.
if (isnan(h) || isnan(t)) {
Serial.println("Не удается считать показания");

return;
}

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");

  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");

  ShowLedInd(1, t);
  ShowLedInd(0, h);

}

Если есть возможность - подскажите. Простите за кучу комментариев - пишу для себя чтоб потом не забыть.