Эмиттация пишется с двумя "т" ))
Нее это уже Гайвер сделал.
Есть ещё задумка музыкальный инструментик уровня губной гармошки, только с клавиатуркой
гармошечной или лучше баянной. С простеньким, но качественным приятным звуком.
Механически максимально простой, под возможность самостоятельного изготовления.
Ну и конечно на "дуньке"
Есть ещё задумка музыкальный инструментик уровня губной гармошки, только с клавиатуркой
гармошечной или лучше баянной. С простеньким, но качественным приятным звуком.
Механически максимально простой, под возможность самостоятельного изготовления.
Ну и конечно на "дуньке"
Пусть будет с двумя т.
Гайвер сделал слишком сложно. Хотелось бы по проще.
я смотрю, вы скучаете.
Давайте что-нибудь замутим интересное.
у нас с вами интересы разные
Цитата:
Просто 707-ой не может поверить что даже достаточно простые часы могут потребовать достаточно большого кода. Он ведь его и в глаза не видел.
Так вы же не показываете. Присылайте - посмотрю.
Цитата:
Сейчас в часики добавлена фича "вантач таймер", автоинверсия кнопок и вариант с одним светиком на сегмент.
У вас на каждое число светиков в сегменте свой вариант? - Посмотрите в местном "наброске", как сделать общий код, не зависящий от числа диодов в сегменте.
У вас на каждое число светиков в сегменте свой вариант? - Посмотрите в местном "наброске", как сделать общий код, не зависящий от числа диодов в сегменте.
код конечно общий, но есть ньюансы.
Отображение плюса минуса буквы "Т" и значка градусов немножко по разному.
Я решаю это условной компиляцией. Просто прописываешь в начале кода нужную цифру и компилируешь.
Разных опций накопилось довольно много и если их все включить то не хватает памяти.
Приходится выбирать. В прочем все самые ништяковые ништяки умещаются.
Гайвер сделал слишком сложно. Хотелось бы по проще.
А здесь его библиотека вообще зачем ?
На сколько я знаю его фишка в экономии ОЗУ под массив светиков. Тут же светики можно параллелить. Оставить минимальные там 30 ячеек и делов.
В принципе тут перепаивать не много, чтобы опробовать мою прошивку.
1. Тут очередность разрядов наоборот
2. Очередность сегментов с левым поворотом, а у меня с правым.
3. Двоеточие тут вклинено а у меня после всех цифр
4. Гирлянда у меня не на 5-ом а на 6-ом пине.
Кнопки странным образом совпали. Часики и барометр вроде тоже.
и уже заработает
А уж дополнительно припаять звук и датчик света это вообще 15 минут
PS У меня ещё есть вариант компиляции под схему от Mishany, так там как раз такой вариант табло.
Правда я не уверен, что тот вариант "заведётся" слишком много изменений было внесено с тех пор как мы его тестировали. Если интересно, можно оживить и без перепайки табла.
В принципе тут перепаивать не много, чтобы опробовать мою прошивку.
1. Тут очередность разрядов наоборот
2. Очередность сегментов с левым поворотом, а у меня с правым.
3. Двоеточие тут вклинено а у меня после всех цифр
4. Гирлянда у меня не на 5-ом а на 6-ом пине.
Кнопки странным образом совпали. Часики и барометр вроде тоже.
и уже заработает
А уж дополнительно припаять звук и датчик света это вообще 15 минут
PS У меня ещё есть вариант компиляции под схему от Mishany, так там как раз такой вариант табло.
Правда я не уверен, что тот вариант "заведётся" слишком много изменений было внесено с тех пор как мы его тестировали. Если интересно, можно оживить и без перепайки табла.
Да дело не в перепайке. Свободных ардуинок нет, две сгорели, одна в часах работает ломать не буду, одна где то потерялась, дома посмотрел не нашел, вот с больничного на работу выйду там ещё посмотрю.
с кодом, по вашим собственным признаниям, у вас вообще никак - ккакой же тогда монтаж....???
Хотя... куча сожженных ардуинок вполне подтверждают ваши слова.)
Ну да, программист из меня ещё тот. А гора ардуинок, из 2х штук, сама погорела, я не при делах:). Цветомузыка была, работала 3 месяца, потом включаю, а она не горит.
нее код чуток получше
Монтаж можете полюбоваться, где-то на ютубе есть ссылки.
Но всё ништяк работает, не дохнет и не рассыпается.
А дуньки действительно дохнут изредка при прошивке и даже разок попалась мертворожденная.
У меня пара "нано" тоже в мусоре лежит.
Собрал часики по 2 диода на сегмент, температура с DHT11. Работает, но иногда проскакивают странности. (Завтра выложу видео в надежде на толчок в нужном направлении.)
Сейчас еще хочу добавить дублирование кнопок с ИК-пульта, т.к. часы будут висеть на стене (логично), чтобы можно было менять цвета/время/выводить температуру прямо с рабочего места.
Спасибо за Ваши труды. Очень долго ковырялся в анналах интернета, пока не наткнулся на этот форум.
Сам ардуинкой начал увлекаться с лета, пытаюсь кодить, но пока с трудом. Зато есть база радиоэлектроники, не зря учился.
Есть предложение портировать мою прошивку под туташнюю "гирлянду". Проблема в том, что у меня нет в наличии туташней гирлянды. Я бы скомпилировал а вы бы проверили на своих часиках пока они окончательно не залезли на стену.
b707 Уже читаю ща попробую. меня интерисует место где я вызываю из библиотеки день недели и число месяца. что я сделал не так. Библиотека конечно другаяя, но она больше расписана может её тоже выложить или как вызвать из родной библиотеки. Хотя вызывал ничего не получилось. С новой библиотекой #include <RTC.h> в монеторе порта пишет правильно всё а у меня 6-62 вместо 5-03.
#include <RTC.h>
RTC time;
#include <DS3231.h>
#include <OneWire.h>
#include <TroykaLight.h>
/*
Подключение к Arduino nano:
Часы DS3231: SCL -> A5
SDA -> A4
Датчик освещения -> A3
Кнопки: Смена часов -> D2
Смена минут -> D3
Смена цвета -> D4
Лента WS2811(WS2812)-> D13
*/
//---------------------------------------------------------------------------------------------------
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>
#define RTC_DS3231 1
#define LEDS_IN_SEGMENT 3 // Задаём сколько у нас светодиодов в сегменте
#define DOTS_NUM 2 // Задаём сколько у нас разделительных точек
#define COLOR_CHANGE 2 // Смена цвета ( 0 - никогда, 1 - раз в минуту, 2 - каждые десять минут, 3 - каждый час, 4 - каждые десять часов)
#define NUM_COLORS 16 // Количество цветов
#define COLOR_ORDER BGR // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 13 // Пин ленты
#define BRI_PIN A3 // PIN фоторезистора
#define auto_bright 1 // автоматическая подстройка яркости от уровня внешнего освещения (1 - включить, 0 - выключить)
#define max_bright 250 // максимальная яркость (0 - 255)
#define min_bright 2 // минимальная яркость (0 - 255)
#define bright_constant 1000 // константа усиления от внешнего света (0 - 1023), чем МЕНЬШЕ константа, тем "резче" будет прибавляться яркость
#define coef 0.9 // коэффициент фильтра (0.0 - 1.0), чем больше - тем медленнее меняется яркость
int new_bright, new_bright_f;
unsigned long bright_timer, off_timer;
int temperature = 0;
int Tout1;
int den;
int ned;
OneWire ds(5); // Объект OneWire
long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
// long lastUpdateden = 0; //Последнее время считывание даты
const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок
// const int TEMP_UPDATE_DEN = 1000; // Последнее считывание даты
//---------------------------------------------------------------------------------------------------
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + DOTS_NUM) // Вычислемые константы, НЕ РЕДАКТИРОВАТЬ!
//---------------------------------------------------------------------------------------------------
CRGB leds[NUM_LEDS]; //Задаём значение светодиодов
uint8_t digits[] = {
0b00111111, // Digit 0
0b00100001, // Digit 1
0b01110110, // Digit 2
0b01110011, // Digit 3
0b01101001, // Digit 4
0b01011011, // Digit 5
0b01011111, // Digit 6
0b00110001, // Digit 7
0b01111111, // Digit 8
0b01111011, // Digit 9
0b01111000, // Digit * градус 10
0b00011110, // Digit C 11
0b01000000, // Digit - 12
};
//---------------------------------------------------------------------------------------------------
bool Dot = true;
bool TempShow = true ;
bool DenChisloShow = true ;
bool TempOutShow = true ;
int last_digit = 0;
//---------------------------------------------------------------------------------------------------
long ledColor = CRGB::Aqua; // Используемый цвет
long ColorTable[NUM_COLORS] = {
CRGB::Amethyst,
CRGB::Aqua,
CRGB::Blue,
CRGB::Chartreuse,
CRGB::DarkGreen,
CRGB::DarkMagenta,
CRGB::DarkOrange,
CRGB::DeepPink,
CRGB::Fuchsia,
CRGB::Gold,
CRGB::GreenYellow,
CRGB::LightCoral,
CRGB::Tomato,
CRGB::Red,
CRGB::Orchid,
CRGB::DarkOrchid
};
//---------------------------------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
// инициализация модуля RTC
time.begin(RTC_DS3231); // на базе чипа DS3231 модуль подключается к аппаратным выводам I2C
Wire.begin();
LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
//---------------------------------------------------------------------------------------------------
//LEDS.setBrightness(75); // Задаём яркость
pinMode(4, INPUT_PULLUP); // Кнопка смены цветов
pinMode(3, INPUT_PULLUP); // Кнопка смены минут
pinMode(2, INPUT_PULLUP); // Кнопка смены часов
}
//---------------------------------------------------------------------------------------------------
void BrightDots (boolean Dot_On) {
for (uint8_t i = 0; i < DOTS_NUM; i++) {
leds[(LEDS_IN_SEGMENT * 14)+ i] = (Dot_On) ? ledColor : 0;
}
}
//---------------------------------------------------------------------------------------------------
void BrightDigit (uint8_t digit, uint8_t cursor)
{
for (uint8_t mask = 0b01000000; mask > 0; mask = mask >> 1)
{
for (uint8_t i = 0; i < LEDS_IN_SEGMENT; i++)
{
leds[cursor] = (digit & mask) ? ledColor : 0;
cursor ++;
}
}
}
//---------------------------------------------------------------------------------------------------
//Массив управления яркостью
void BrightnessCheck() {
if (auto_bright) { // если включена адаптивная яркость
if (millis() - bright_timer > 100) { // каждые 100 мс
bright_timer = millis(); // сброить таймер
new_bright = map(analogRead(BRI_PIN), 0, bright_constant, min_bright, max_bright); // считать показания с фоторезистора, перевести диапазон
new_bright = constrain(new_bright, min_bright, max_bright);
new_bright_f = new_bright_f * coef + new_bright * (1 - coef);
LEDS.setBrightness(new_bright_f); // установить новую яркость
}
}
};
//---------------------------------------------------------------------------------------------------
// Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 155 вместо 0155
int GetTime()
{
tmElements_t Now;
RTC.read(Now);
int hour = Now.Hour;
int minute = Now.Minute;
int second = Now.Second;
if (second % 2 == 0)
{
Dot = false;
}
else {
Dot = true;
};
return (hour * 100 + minute);
};
//---------------------------------------------------------------------------------------------------
// Преобразуем время в массив для отображание
void TimeToArray() {
int Now = GetTime(); // Получаем время
BrightDots(Dot);
for (int i = 1; i <= 4; i++) {
int digit = Now % 10; // Получаем последнюю цифру в времени
int cursor = NUM_LEDS - i * LEDS_IN_SEGMENT * 7;
if (i > 2) {
cursor -= 2;
}
if ( (i != 4) || (digit != 0)) BrightDigit(digits[digit], cursor);
else BrightDigit(0, cursor);
if ( i == COLOR_CHANGE) {
if (digit != last_digit)
{
// cylon (); // цикличное изменение цветов
ledColor = ColorTable[random(NUM_COLORS)]; // цикличное изменение цветов
}
last_digit = digit;
}
Now /= 10;
};
};
//---------------------------------------------------------------------------------------------------
// Функция вывода даты
void DenChisloToArray()
{
int d = time.gettime("d");
delay(100);
int n = time.gettime("w");
delay(100);
tmElements_t tm;
RTC.read(tm);
if (tm.Second != 20)
{
DenChisloShow = false;
return;
}
DenChisloShow = true;
int den = d;
BrightDots(0); //разделительные мигающие точки выключены
int digit = den % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); // 3й блок десятки дней
den /= 10;
digit = den % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); // 4й блок единицы дней
BrightDigit(digits[12], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - DOTS_NUM)); // 2й блок вывода знака "-"
int ned = n;
digit = ned % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - DOTS_NUM)); // 1й блок день недели
}
// Функция вывода температуры
void detectTemperature()
{
byte data[2]; // Место для значения температуры
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство
ds.write(0x44); //Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
{
lastUpdateTime = millis();
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство
ds.write(0xBE); // Просим передать нам значение регистров со значением температуры
data[0] = ds.read(); // Читаем младший байт значения температуры
data[1] = ds.read(); // А теперь старший
// Формируем значение
temperature = (data[1] << 8) + data[0]; temperature = temperature >> 4; // Темпиратура правильная.
}
tmElements_t tm;
RTC.read(tm);
if (tm.Second != 25)
{
TempOutShow = false;
return;
};
TempOutShow = true;
BrightDots(0); //разделительные мигающие точки выключены
if (temperature >= 0) // температура положительная
{
BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); // знак градус (*) 3й блок
BrightDigit(digits[11], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); // знак Цельсия (*) 4й блок
int digit = temperature % 10; //пример: 24 % 10 остаток 4 - это единицы темпиратуры
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - DOTS_NUM)); // 2 блок единицы градуса
temperature /= 10; // тоже самое, но получаем десятки темпиратуры
digit = temperature % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - DOTS_NUM)); // 1й блок вывода первого символаo
}
else if (temperature < 0) // температура отрицательная
{Tout1 = abs(temperature); // //преобразование отрицательного числа в положительное
BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); // знак градус (*) 4й блок
int digit = Tout1 % 10; //пример: 24 % 10 остаток 4 - это единицы темпиратуры
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); // 3й блок единицы градуса
Tout1 /= 10; // тоже самое, но получаем десятки темпиратуры
digit = Tout1 % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - DOTS_NUM)); // 2й блок вывода первого символа
BrightDigit(digits[12], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - DOTS_NUM)); // 1й блок вывода знака "-"
}
}
void TempToArray()
{
tmElements_t tm;
RTC.read(tm);
if (tm.Second != 30)
{
TempShow = false;
return;
}
TempShow = true;
int t = RTC.temperature();
int celsius = (t / 4.0);
BrightDots(0); //разделительные мигающие точки выключены
BrightDigit(digits[11], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); // начало знака Цельсия (С) 4й блок
BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); // начало знака Градус (*) 3й блок
int digit = celsius % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - DOTS_NUM)); // 2й блок вывода второго символа
celsius /= 10;
digit = celsius % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - DOTS_NUM)); // 1й блок вывода первого символа
};
//---------------------------------------------------------------------------------------------------
//смена цвета кнопкой DST пин D4
void DSTcheck() {
int buttonDST = digitalRead(4);
if (buttonDST == LOW) {
ledColor = ColorTable[random(NUM_COLORS)];
};
delay(200);
};
//---------------------------------------------------------------------------------------------------
// Массив управляет кнопками с часами и минутами
void TimeAdjust() {
int buttonH = digitalRead(2);
int buttonM = digitalRead(3);
if (buttonH == LOW || buttonM == LOW) {
delay(200);
tmElements_t Now;
RTC.read(Now);
int hour = Now.Hour;
int minutes = Now.Minute;
int second = Now.Second;
if (buttonH == LOW) {
if (Now.Hour == 23) {
Now.Hour = 0;
}
else {
Now.Hour += 1;
};
}
else
{
if (Now.Minute == 59) {
Now.Minute = 0;
}
else {
Now.Minute += 1;
};
};
RTC.write(Now);
}
}
//---------------------------------------------------------------------------------------------------
//Меняем эффекты
void fadeall() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i].nscale8(250);
}
}
//---------------------------------------------------------------------------------------------------
// массив отвечает за цикличное изменение цветов
void cylon () {
static uint8_t hue = 0;
Serial.print("x");
// Сдвигаем один светодиод в любом направлении
for (int i = 0; i < NUM_LEDS; i++) {
// Устанавливаем 1 светодиод на цвет красный
leds[i] = CHSV(hue++, 255, 255);
// Показываем светодиоды
FastLED.show();
fadeall();
// Ждём немного и повторяем цикл
delay(10);
}
Serial.print("x");
//---------------------------------------------------------------------------------------------------
// Сдвигаем один светодиод в любом направлении
for (int i = (NUM_LEDS) - 1; i >= 0; i--) {
// Устанавливаем 1 светодиод на цвет красный
leds[i] = CHSV(hue++, 255, 255);
// Показываем светодиоды
FastLED.show();
fadeall();
// Ждём немного и повторяем цикл
delay(10);
}
}
//---------------------------------------------------------------------------------------------------
void loop() {
BrightnessCheck(); // Проверяем датчик
DSTcheck(); // Проверяем режимы
TimeAdjust(); // Проверяем время если сменилось на 1 цифру
TimeToArray(); // Проверяем часы если сменилось на 1 цифру
DenChisloToArray() ; // Проверяем дату
detectTemperature(); // Проверяем температуру от датчика DS18b20
TempToArray(); // температура
FastLED.show(); // Задаём массив светодиодов
if (TempShow == true) delay (5000); // время отображения температуры (3000 = 3 сек)
if ( TempOutShow == true) delay (5000); // время отображения температуры (3000 = 3 сек)
if ( DenChisloShow == true) delay (5000); // время отображения температуры (3000 = 3 сек)
}
покажите в коде. где у вас "в монеторе пишет правильно"
[/quote]
Вот скетч который правильно пишет дату и день недели. Когда я прописываю в программе Serial.println(time.gettime("d-m-Y, H:i:s, D")) у меня в монеторе ни чего не пишет, может я сделал ошибку не поставил кавычки "w" или вызов в порт надо ставить в loop
#include <RTC.h>
RTC time;
void setup() {
delay(300);
Serial.begin(9600);
// инициализация модуля RTC
time.begin(RTC_DS3231); // на базе чипа DS3231 модуль подключается к аппаратным выводам I2C
// time.begin(RTC_DS1307); // на базе чипа DS1307 модуль подключается к аппаратным выводам I2C
// time.begin(RTC_DS1302,10,13,12); // на базе чипа DS1302, вывод RST, вывод CLK, вывод DAT доступны любые выводы
// запись даты и времени
// time.settime(0,17,15,1,10,15,4); // 0 сек, 17 мин, 15 час, 1, октября, 2015 года, четверг
// time.settime(35,10,20); // 35 сек, 10 мин, 20 час, дату оставить без изменений
// time.settime(-1,-1,-1,31,12,15); // 31, декабря, 2015 года, время и день недели оставить без изменений
}
void loop(){
if(millis()%1000==0){ // если прошла 1 секунда
Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
}
}
// ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ:
//
// в библиотеке реализованы 4 функции: begin, settime, gettime и period.
// функция begin вызывается первой и предназначена для инициализации модуля, выбора шины, и выводов arduino
// количество и порядок вызовов функций settime, gettime и period, значения не имеет.
//
// инициализация модуля
// time.begin(название, RST или SS, CLK, DAT) если модуль работает на шине I2C или SPI, то достаточно указать только название модуля, например: time.begin(RTC_DS3231);
// если модуль работает на шине SPI, а аппаратный вывод SS занят, то номер назначенного вывода SS для модуля указывается вторым параметром, например: time.begin(RTC_DS1305,22);
// если модуль работает на трехпроводной шине, то указываются номера всех выводов, например: time.begin(RTC_DS1302, 1, 2, 3); // RST, CLK, DAT
// запись даты и времени
// time.settime(сек,мин,час,д,м,г,дн) должен присутствовать хотябы 1 параметр
// часы указываются в 24-часовом формате, год указывается от 0 до 99, день недели указывается числом: 1-ПН, 2-ВТ, ... 6-СБ, 0-ВС.
// если предыдущий(ие) параметр(ы) надо оставить без изменений, то указывается отрицательное значение
// чтение даты и времени
// time.gettime("строка с параметрами") функция получает и выводит строку заменяя описанные ниже символы на текущее время
// указанные символы эдентичны символам для функции date() в PHP
// s секунды от 00 до 59 (два знака)
// i минуты от 00 до 59 (два знака)
// h часы в 12-часовом формате от 01 до 12 (два знака)
// H часы в 24-часовом формате от 00 до 23 (два знака)
// d день месяца от 01 до 31 (два знака)
// w день недели от 0 до 6 (один знак: 0-воскресенье, 6-суббота)
// D день недели наименование от Mon до Sun (три знака: Mon Tue Wed Thu Fri Sat Sun)
// m месяц от 01 до 12 (два знака)
// M месяц наименование от Jan до Dec (три знака: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
// Y год от 2000 до 2099 (четыре знака)
// y год от 00 до 99 (два знака)
// a полдень am или pm (два знака, в нижнем регистре)
// A полдень AM или PM (два знака, в верхнем регистре)
// строка не должна превышать 50 символов
// пример: gettime("d-m-Y, H:i:s, D"); ответит строкой "01-10-2015, 14:00:05, Thu"
// пример: gettime("s"); ответит строкой "05"
// чтение даты и времени в виде цифр
// time.gettime() без параметра
// результат читается из переменных:
// time.seconds секунды 0-59
// time.minutes минуты 0-59
// time.hours часы 1-12
// time.Hours часы 0-23
// time.midday полдень 0-1 (0-am, 1-pm)
// time.day день месяца 1-31
// time.weekday день недели 0-6 (1-понедельник, 6-суббота, 0-воскресенье)
// time.month месяц 1-12
// time.year год 0-99
// не обязательная функция
// time.period(минуты) указывает минимальный период чтения времени из модуля в минутах. (от 1 до 255 минут)
// пример:
// если после вызова функции time.period(5); в течении 5 минут несколько раз была вызвана функция gettime,
// то запрос времени к модулю пройдёт только в первый раз, а ответом на все остальные вызовы функции gettime
// будет результат последнего полученного от модуля времени + время прошедшее с этого запроса
// уменьшение числа запросов уменьшает время обработки запросов, разгружает шину, и уменьшает потребляемый модулем ток
// при отсутствии вызова функции time.period(минуты), ответ на запрос даты и времени будет всегда читаться из модуля
Вот скетч который правильно пишет дату и день недели.
а вы в этом коде комментарии читать пробовали? - они ж там как раз для обучения новичков вставлены! И там в комментариях написано, что выдает каждый метод библиотеки. Строка 40 -
time.gettime("строка с параметрами") - функция получает и выводит строку ...
"выводит СТРОКУ" - понятно? - а вы эту строку в число запихиваете...
Дальше продолжать? или может сами догадаетесь? - читайте внимательнее описание формата в этом файле, там есть и как число и день недели получить в числовом формате, а не в строчном.
Сейчас попробую с первоначальной библиотекой, но там во первых часы другие #include <DS3232RTC.h> а у меня DS3231 и там помоему нет дня недели. Часы сейчас вставлены в компьютер, сейчас можно и пробовать. Ещё пока не забыл в вашем скетче после прошивка ярко вспыхивают светодиоды наверно на полную яркость 255 потом гаснут наверно это не слишком хорошо светодиодам.
Ага сейчас принял сообщение, что не правильно строку вывел, я и цифру выводил, но наверно каряво ща, ещё напишу.
Там в часиках(которые 3231) ещё градусник есть, правда врёт маленько, прибавляет примерно на 1 градус.
И ещё поговаривают, что на них можно детектор нечистой силы реализовать
если сравнивать сигнал на выходе SQ с собственным дуинькиным кварцем или со вторыми такими же часиками.
Вот такой вариант выдал 5-30 вместо 5-03 Уже лучше )).
// Функция вывода даты
void DenChisloToArray()
{
time.gettime();
int d = time.day;
delay(100);
time.gettime();
int n = time.weekday;
delay(100);
tmElements_t tm;
RTC.read(tm);
if (tm.Second != 20)
{
DenChisloShow = false;
return;
}
DenChisloShow = true;
den = d;
BrightDots(0); //разделительные мигающие точки выключены
int digit = den % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); // 3й блок десятки дней
den /= 10;
digit = den % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); // 4й блок единицы дней
BrightDigit(digits[12], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - DOTS_NUM)); // 2й блок вывода знака "-"
ned = n;
digit = ned % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - DOTS_NUM)); // 1й блок день недели
}
Там в часиках(которые 3231) ещё градусник есть, правда врёт маленько, прибавляет примерно на 1 градус.
И ещё поговаривают, что на них можно детектор нечистой силы реализовать
если сравнивать сигнал на выходе SQ с собственным дуинькиным кварцем или со вторыми такими же часиками.
Термометр в часах что надо даже не хочу трогать. Мне точность не нужна. в разных местах комнаты разная темпиратура.
Ну что пока цифры поменял местами дальше посмотрим завтра что отобразится. Респект и уважуха b707 Спасибо тебе Привет из Липецка.
не надо цифры менять, разберитесь с математическими операциями - там в математике ошибка
я про эти цифры и так хотел спросить, но стеснялся. Вы где-то на форуме разъясняли о % 10, это перестановка на одну цифру, ну как бы единицы, если ещё % 10, это будут десятки, а вот /= 10 это не понятно хотя при изучении программирования AVR это знак похоже инверсии, но как он сдесь работает не могу представить.
А про % это 7 % 5 = 2 то есть возвращает остаток. А /- деление это делит 7 / 5 = 1 возвращает 1 а остаток убирает потому-что int.
А вот х / = 10 то же наверно делит х на 10 и присваивает х десятки. И поэтому моя ошибка была я потерял ориентацию))) не понял с чем работаю. Поэтому где тут тебе B707 лайк поставить)). Какой форум тяжёлый приходит письмо по ссылке переходишь попадаешь неизвестно куда пока найдёшь пока напишешь сто лет пройдёт. А вообще меня зовут Геннадий Алексеевич можно просто Гена без всяких там генацвали и т.д.
time.gettime("строка с параметрами") - функция получает и выводит строку ...
"выводит СТРОКУ" - понятно? - а вы эту строку в число запихиваете...
У меня не скромный вопрос. Если напрягает, перенаправте где новичкам ответят безо всяких. Если имею дело со строкой. но вызываю один параметр например "w" чем цифра отличается от строки цыфр.
Вы что-нибудь о таблице ASCII слышали? Каждый символ - буквы. цифры. знаки препинания - кодируется в компьютере каким-то кодом. Например латинской букве 'a' соответвует код 65, пробелу - 32, а цифре 0 - 48.
таким образом, если у вас из порта приходит байт 49, то если прочитать его как число - то и будет 49, а если прочитать как символ - будет '1'
Если у вас команда возвращает дату в виде строки. например "15" - то когда вы ее читаете в числовую переменную, как у вас в коде - возникает две ошибки.
во-первых - в строке "15" два символа, а читаете вы их в одну переменную, поэтому туда читается только первый символ '1'
во-вторых - поскольку '1' это символ, то при чтении в числовую переменную читаетсе не единица. а ее код ASCII - то есть в результате вы вместо "15" получаете 49
У меня не скромный вопрос. Если напрягает, перенаправте где новичкам ответят безо всяких. Если имею дело со строкой. но вызываю один параметр например "w" чем цифра отличается от строки цыфр.
Вообще-то вопрос, ответ на который содержится в ЛЮБОМ учебнике по программированию, на любом программистском форуме считается дурным тоном.
Не буду больше ученические вопросы задавать и тратить ваше время. Задам как пользователь скетча который лежал в открытом доступе. И к тому же вы писали что за меня никто писать не будет. Короче вопрос такой на часах прописаны задержки вот такие:
if ( DenChisloShow == true) delay (5000); // время отображения числа и дня (5000 = 5 сек)
if ( TempOutShow == true) delay (4000); // время отображения температуры на улице(5000 = 5 сек)
if (TempShow == true) delay (5000); // время отображения температуры (5000 = 5 сек)
когда было по 5 секунд задержки пропадала опрос температуры в помещении (причём с начала было нормально), мне пришлось уменьшить время отображения уличной температуры вроде стало нормально но чувствуется гуляет время, между уличной и домашней температурой то появятся часы то нет. вот скетч опроса уличной температуры:
// Функция вывода температуры
void detectTemperature()
{
byte data[2]; // Место для значения температуры
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство
ds.write(0x44); //Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
if (millis() - vrem_schit > period_schit)
{
lastUpdateTime = millis();
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство
ds.write(0xBE); // Просим передать нам значение регистров со значением температуры
data[0] = ds.read(); // Читаем младший байт значения температуры
data[1] = ds.read(); // А теперь старший
// Формируем значение
temperature = (data[1] << 8) + data[0]; temperature = temperature >> 4; // Темпиратура правильная.
}
tmElements_t tm;
RTC.read(tm);
if (tm.Second != 25)
{
TempOutShow = false;
return;
};
TempOutShow = true;
BrightDots(0); //разделительные мигающие точки выключены
if (temperature >= 0) // температура положительная
{
BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); // знак градус (*) 3й блок
BrightDigit(digits[11], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); // знак Цельсия (*) 4й блок
int digit = temperature % 10; //пример: 24 % 10 остаток 4 - это единицы темпиратуры
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - DOTS_NUM)); // 2 блок единицы градуса
temperature /= 10; // тоже самое, но получаем десятки темпиратуры
digit = temperature % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - DOTS_NUM)); // 1й блок вывода первого символаo
}
else if (temperature < 0) // температура отрицательная
{Tout1 = abs(temperature); // //преобразование отрицательного числа в положительное
BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); // знак градус (*) 4й блок
int digit = Tout1 % 10; //пример: 24 % 10 остаток 4 - это единицы темпиратуры
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); // 3й блок единицы градуса
Tout1 /= 10; // тоже самое, но получаем десятки темпиратуры
digit = Tout1 % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - DOTS_NUM)); // 2й блок вывода первого символа
BrightDigit(digits[12], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - DOTS_NUM)); // 1й блок вывода знака "-"
}
}
или запрос с датчика затягивается и таймер почему-то затягивает отображение с датчика уличной температуры и темпиратура в помещении проскакивает когда не делаю промежутки между отображениями. Можно конечно не отвечать на вопрос, но ведь мы хотим безупречные часы)).
https://www.youtube.com/watch?v=GKJtHPJ6qag
Нее это уже Гайвер сделал.
Есть ещё задумка музыкальный инструментик уровня губной гармошки, только с клавиатуркой
гармошечной или лучше баянной. С простеньким, но качественным приятным звуком.
Механически максимально простой, под возможность самостоятельного изготовления.
Ну и конечно на "дуньке"
https://www.youtube.com/watch?v=GKJtHPJ6qag
Нее это уже Гайвер сделал.
Есть ещё задумка музыкальный инструментик уровня губной гармошки, только с клавиатуркой
гармошечной или лучше баянной. С простеньким, но качественным приятным звуком.
Механически максимально простой, под возможность самостоятельного изготовления.
Ну и конечно на "дуньке"
Пусть будет с двумя т.
Гайвер сделал слишком сложно. Хотелось бы по проще.
я смотрю, вы скучаете.
Давайте что-нибудь замутим интересное.
у нас с вами интересы разные
Так вы же не показываете. Присылайте - посмотрю.
У вас на каждое число светиков в сегменте свой вариант? - Посмотрите в местном "наброске", как сделать общий код, не зависящий от числа диодов в сегменте.
Отображение плюса минуса буквы "Т" и значка градусов немножко по разному.
Я решаю это условной компиляцией. Просто прописываешь в начале кода нужную цифру и компилируешь.
Разных опций накопилось довольно много и если их все включить то не хватает памяти.
Приходится выбирать. В прочем все самые ништяковые ништяки умещаются.
На сколько я знаю его фишка в экономии ОЗУ под массив светиков. Тут же светики можно параллелить. Оставить минимальные там 30 ячеек и делов.
AyuOX
В принципе тут перепаивать не много, чтобы опробовать мою прошивку.
1. Тут очередность разрядов наоборот
2. Очередность сегментов с левым поворотом, а у меня с правым.
3. Двоеточие тут вклинено а у меня после всех цифр
4. Гирлянда у меня не на 5-ом а на 6-ом пине.
Кнопки странным образом совпали. Часики и барометр вроде тоже.
и уже заработает
А уж дополнительно припаять звук и датчик света это вообще 15 минут
PS У меня ещё есть вариант компиляции под схему от Mishany, так там как раз такой вариант табло.
Правда я не уверен, что тот вариант "заведётся" слишком много изменений было внесено с тех пор как мы его тестировали. Если интересно, можно оживить и без перепайки табла.
[quote=b612]ой
AyuOX
В принципе тут перепаивать не много, чтобы опробовать мою прошивку.
1. Тут очередность разрядов наоборот
2. Очередность сегментов с левым поворотом, а у меня с правым.
3. Двоеточие тут вклинено а у меня после всех цифр
4. Гирлянда у меня не на 5-ом а на 6-ом пине.
Кнопки странным образом совпали. Часики и барометр вроде тоже.
и уже заработает
А уж дополнительно припаять звук и датчик света это вообще 15 минут
PS У меня ещё есть вариант компиляции под схему от Mishany, так там как раз такой вариант табло.
Правда я не уверен, что тот вариант "заведётся" слишком много изменений было внесено с тех пор как мы его тестировали. Если интересно, можно оживить и без перепайки табла.
да уж. у меня тоже был такой кризис месяц назад. Теперь ещё десяточек приехал и то уже кончается.
у вас монтаж в том же стиле, что и код? :)
у вас монтаж в том же стиле, что и код? :)
У меня монтаж вообще полный пипец, код просто нервно курит в сторонке :)
У меня монтаж вообще полный пипец, код просто нервно курит в сторонке :)
с кодом, по вашим собственным признаниям, у вас вообще никак - ккакой же тогда монтаж....???
Хотя... куча сожженных ардуинок вполне подтверждают ваши слова.
с кодом, по вашим собственным признаниям, у вас вообще никак - ккакой же тогда монтаж....???
Хотя... куча сожженных ардуинок вполне подтверждают ваши слова.)
Цветомузыка была, работала 3 месяца, потом включаю, а она не горит.
Гайвер? :))
Монтаж можете полюбоваться, где-то на ютубе есть ссылки.
Но всё ништяк работает, не дохнет и не рассыпается.
А дуньки действительно дохнут изредка при прошивке и даже разок попалась мертворожденная.
У меня пара "нано" тоже в мусоре лежит.
А у Вас, если не секрет, какие интересы ?
Гайвер? :))
Да, его код. Я думаю он многих людей заинтересовал ардуинкой. Понятно объясняет. Вот хочу бумеранг как у него сделать, детская мечта.
А у Вас, если не секрет, какие интересы ?
Я на досуге цуцунгели изготавливаю:).
Интересное занятие, очень увлекает:).
Я на досуге цуцунгели изготавливаю:).
Интересное занятие, очень увлекает:).
А что это такое, первый раз слышу?
Добрый вечер.
Тема еще актуальна?
Собрал часики по 2 диода на сегмент, температура с DHT11. Работает, но иногда проскакивают странности. (Завтра выложу видео в надежде на толчок в нужном направлении.)
Сейчас еще хочу добавить дублирование кнопок с ИК-пульта, т.к. часы будут висеть на стене (логично), чтобы можно было менять цвета/время/выводить температуру прямо с рабочего места.
Спасибо за Ваши труды. Очень долго ковырялся в анналах интернета, пока не наткнулся на этот форум.
Сам ардуинкой начал увлекаться с лета, пытаюсь кодить, но пока с трудом. Зато есть база радиоэлектроники, не зря учился.
Собрал часики по 2 диода на сегмент
код вставь правильно.
и, если это твой первый проект, возьми для начала проект попроще
не знаю как код сворачивать, думал это автоматически будет. если знаете ссылку на видео
это просто ЛОЛ - уже на каждую кнопку видео снимать надо? - в "Песочнице" есть прикрепленная тема для новичков, там и про код, и про картинки. читайте
http://arduino.ru/imce?app=ckeditor%7Csendto%40ckeditor_fileUrl%7C&CKEditor=edit-comment&CKEditorFuncNum=2&langCode=ru#
http://arduino.ru/imce?app=ckeditor%7Csendto%40ckeditor_fileUrl%7C&CKEditor=edit-comment&CKEditorFuncNum=2&langCode=ru#
не-а. не угадали. Пробуйте еще.
а если серьезно - неужели так трудно прочитать две странички правил?
а если серьезно - неужели так трудно прочитать две странички правил?
Он из "визуалов", нихрена не догоняет без мультиков.
b707 Уже читаю ща попробую. меня интерисует место где я вызываю из библиотеки день недели и число месяца. что я сделал не так. Библиотека конечно другаяя, но она больше расписана может её тоже выложить или как вызвать из родной библиотеки. Хотя вызывал ничего не получилось. С новой библиотекой #include <RTC.h> в монеторе порта пишет правильно всё а у меня 6-62 вместо 5-03.
вот ссылка на архив библиотеки которой пользовался в скетче https://yadi.sk/d/5CtH9CkQ0lhQ_g
b707 Уже читаю ща попробую. меня интерисует место где я вызываю из библиотеки день недели и число месяца. что я сделал не так.
укажите номера строк, где вы это делаете
покажите в коде. где у вас "в монеторе пишет правильно"
покажите в коде. где у вас "в монеторе пишет правильно"
[/quote]
Вот скетч который правильно пишет дату и день недели. Когда я прописываю в программе Serial.println(time.gettime("d-m-Y, H:i:s, D")) у меня в монеторе ни чего не пишет, может я сделал ошибку не поставил кавычки "w" или вызов в порт надо ставить в loop
Вот скетч который правильно пишет дату и день недели.
а вы в этом коде комментарии читать пробовали? - они ж там как раз для обучения новичков вставлены! И там в комментариях написано, что выдает каждый метод библиотеки. Строка 40 -
"выводит СТРОКУ" - понятно? - а вы эту строку в число запихиваете...
Дальше продолжать? или может сами догадаетесь? - читайте внимательнее описание формата в этом файле, там есть и как число и день недели получить в числовом формате, а не в строчном.
Сейчас попробую с первоначальной библиотекой, но там во первых часы другие #include <DS3232RTC.h> а у меня DS3231 и там помоему нет дня недели. Часы сейчас вставлены в компьютер, сейчас можно и пробовать. Ещё пока не забыл в вашем скетче после прошивка ярко вспыхивают светодиоды наверно на полную яркость 255 потом гаснут наверно это не слишком хорошо светодиодам.
Ага сейчас принял сообщение, что не правильно строку вывел, я и цифру выводил, но наверно каряво ща, ещё напишу.
Сейчас попробую с первоначальной библиотекой
зачем? - все отлично можно сделать и в этой. читайте внимательнее описание
Так пойдёт или промежуточную переменную вводить.
Там в часиках(которые 3231) ещё градусник есть, правда врёт маленько, прибавляет примерно на 1 градус.
И ещё поговаривают, что на них можно детектор нечистой силы реализовать
если сравнивать сигнал на выходе SQ с собственным дуинькиным кварцем или со вторыми такими же часиками.
Вот такой вариант выдал 5-30 вместо 5-03 Уже лучше )).
Там в часиках(которые 3231) ещё градусник есть, правда врёт маленько, прибавляет примерно на 1 градус.
И ещё поговаривают, что на них можно детектор нечистой силы реализовать
если сравнивать сигнал на выходе SQ с собственным дуинькиным кварцем или со вторыми такими же часиками.
Термометр в часах что надо даже не хочу трогать. Мне точность не нужна. в разных местах комнаты разная темпиратура.
Ну что пока цифры поменял местами дальше посмотрим завтра что отобразится. Респект и уважуха b707 Спасибо тебе Привет из Липецка.
Вот такой вариант выдал 5-30 вместо 5-03 Уже лучше )).
советую сесть и подумать. что делают строки 20, 22 и 23
Ну что пока цифры поменял местами дальше посмотрим завтра что отобразится. Респект и уважуха b707 Спасибо тебе Привет из Липецка.
не надо цифры менять, разберитесь с математическими операциями - там в математике ошибка
Ну что пока цифры поменял местами дальше посмотрим завтра что отобразится. Респект и уважуха b707 Спасибо тебе Привет из Липецка.
не надо цифры менять, разберитесь с математическими операциями - там в математике ошибка
я про эти цифры и так хотел спросить, но стеснялся. Вы где-то на форуме разъясняли о % 10, это перестановка на одну цифру, ну как бы единицы, если ещё % 10, это будут десятки, а вот /= 10 это не понятно хотя при изучении программирования AVR это знак похоже инверсии, но как он сдесь работает не могу представить.
Gen.Aleks - "/" и "%" - обычные операции деления и взятия остатка, стандартные для языка Си... а так же Явы, Перла и многих других ЯВУ.
Прочитать о них можно в любом учебнике, в том числе и в гугле
Ну вот твой код темпиратуры работает правильно, а у меня косорукого теже букавки не работают переставляют 3 и 0 местами в чём подвох?
Алекс, вы вообще читаете, что я вам пишу? вы про операторы % и / прочитали? - какие мысли?
Что вы какие бредовые вопросы задаете, возьмите да сами сравните, чем отличается ваш код и тот, где температура
b707
Всё разобрался я цифры не те обрабатывал вот что получилось, всё работает как надо. Спасибо хороший человек
А про % это 7 % 5 = 2 то есть возвращает остаток. А /- деление это делит 7 / 5 = 1 возвращает 1 а остаток убирает потому-что int.
А вот х / = 10 то же наверно делит х на 10 и присваивает х десятки. И поэтому моя ошибка была я потерял ориентацию))) не понял с чем работаю. Поэтому где тут тебе B707 лайк поставить)). Какой форум тяжёлый приходит письмо по ссылке переходишь попадаешь неизвестно куда пока найдёшь пока напишешь сто лет пройдёт. А вообще меня зовут Геннадий Алексеевич можно просто Гена без всяких там генацвали и т.д.
"выводит СТРОКУ" - понятно? - а вы эту строку в число запихиваете...
У меня не скромный вопрос. Если напрягает, перенаправте где новичкам ответят безо всяких. Если имею дело со строкой. но вызываю один параметр например "w" чем цифра отличается от строки цыфр.
чем цифра отличается от строки цыфр.
Вы что-нибудь о таблице ASCII слышали? Каждый символ - буквы. цифры. знаки препинания - кодируется в компьютере каким-то кодом. Например латинской букве 'a' соответвует код 65, пробелу - 32, а цифре 0 - 48.
таким образом, если у вас из порта приходит байт 49, то если прочитать его как число - то и будет 49, а если прочитать как символ - будет '1'
Если у вас команда возвращает дату в виде строки. например "15" - то когда вы ее читаете в числовую переменную, как у вас в коде - возникает две ошибки.
во-первых - в строке "15" два символа, а читаете вы их в одну переменную, поэтому туда читается только первый символ '1'
во-вторых - поскольку '1' это символ, то при чтении в числовую переменную читаетсе не единица. а ее код ASCII - то есть в результате вы вместо "15" получаете 49
У меня не скромный вопрос. Если напрягает, перенаправте где новичкам ответят безо всяких. Если имею дело со строкой. но вызываю один параметр например "w" чем цифра отличается от строки цыфр.
Вообще-то вопрос, ответ на который содержится в ЛЮБОМ учебнике по программированию, на любом программистском форуме считается дурным тоном.
Прочитайте же, наконец, учебник!
Не буду больше ученические вопросы задавать и тратить ваше время. Задам как пользователь скетча который лежал в открытом доступе. И к тому же вы писали что за меня никто писать не будет. Короче вопрос такой на часах прописаны задержки вот такие:
когда было по 5 секунд задержки пропадала опрос температуры в помещении (причём с начала было нормально), мне пришлось уменьшить время отображения уличной температуры вроде стало нормально но чувствуется гуляет время, между уличной и домашней температурой то появятся часы то нет. вот скетч опроса уличной температуры:
или запрос с датчика затягивается и таймер почему-то затягивает отображение с датчика уличной температуры и темпиратура в помещении проскакивает когда не делаю промежутки между отображениями. Можно конечно не отвечать на вопрос, но ведь мы хотим безупречные часы)).