тренировка, создание классов, вопросы
- Войдите на сайт для отправки комментариев
Вс, 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); }
Если есть возможность - подскажите. Простите за кучу комментариев - пишу для себя чтоб потом не забыть.