тренировка, создание классов, вопросы
- Войдите на сайт для отправки комментариев
Вс, 12/03/2017 - 14:03
Добрый денью
Как позволяет время пытаюсь разобраться в этой теме. Прошу помощи. Тренируюсь в создании своих плдпрограмм (или библиотек?). Вот пытаюсь сделать это из работающей своей простой програмки:
// вызываем библиотеку
#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);
}
Если есть возможность - подскажите. Простите за кучу комментариев - пишу для себя чтоб потом не забыть.