Разделы

В сети

Пользователей: 172
Из них просматривают:
Аналоги: 52. Даташиты: 56. Инструкции: 7. Новости: 15. Остальное: 2. Производители: 2. Профиль пользователя: 8. Расчёты: 3. Теги: 1. Форум: 26.
Участников: 2
Гостей: 170

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Arduino UNO
Раздел: Arduino

Arduino. Ознакомление

Написал MACTEP 20.08.2016 21:10:00 (Просмотров: 17579)
Эта статья открывает рубрику Arduino. Есть несколько видов, но основных, самых популярных 3. Это Arduino UNO, Arduino Mini и Arduino Nano. В этой статье будет обзор Arduino UNO.
В Arduino UNO контроллер собран на ATmega328. У платы четырнадцать входов/выходов, из них шесть могут использоваться как выходы ШИМ (распиновку рассмотрим ниже). Так же есть шесть аналоговых входов.
Плата имеет USB вход, разъем для питания. Кнопку сброса.



Китайская Arduino UNO
Рис. 1 Внешний вид китайской "Arduino UNO"

Родная, итальянская Arduino UNO стоит около 20$, а китайская подделка - 3$, разница только в упаковке :)
Я приобрел Arduino UNO в Китае, ее и буду рассматривать.

Для начала характеристики:

Микроконтроллер - ATmega328
Рабочее напряжение - 5 В
Входное напряжение - 7-12 В
Цифровые входы/выходы - 14 (6 из них + ШИМ)
Аналоговые входы - 6
Постоянный ток через вход/выход - 40 мА
Флеш-память - 32 Кб (из них 0.5 Кб загрузчик)
ОЗУ - 2 Кб
EEPROM - 1 Кб
Тактовая частота - 16 МГц

Arduino UNO может быть запитана от USB или от внешнего источника 7-12В. У меня от USB не запускается толком, подключил внешний источник 7В (Переделал зарядное устройство мобилы.)

Распиновка выводов:


POWER
5V - 5В
RES - Сброс
3.3V - 3.3В от внутреннего преобразователя
5V - 5В
GND - Общий
GND - Общий
VIN - Входное питание 7-12 В

ANALOG IN (Аналоговые входы)
A0
A1
A2
A3
A4
A5

DiGiTAL PWM(~) Цифровые входы/выходы (~ - ШИМ)
0 RX-> - Цифровой вход/выход 0 + последовательная шина приема данных
1 TX-> - Цифровой вход/выход 1 + последовательная шина передачи данных
2 - Цифровой вход/выход 2 + Внешнее прерывание
3~ - Цифровой вход/выход 3 + ШИМ + Внешнее прерывание
4 - Цифровой вход/выход 4
5~ - Цифровой вход/выход 5 + ШИМ
6~ - Цифровой вход/выход 6 + ШИМ
7 - Цифровой вход/выход 7
8 - Цифровой вход/выход 8
9~ - Цифровой вход/выход 9 + ШИМ
10~ - Цифровой вход/выход 10 + ШИМ
11~ - Цифровой вход/выход 11 + ШИМ
12 - Цифровой вход/выход 12
13 - Цифровой вход/выход 13
GND - Общий
AREF - Опорное напряжение
SDA - Связь I2C
SDL - Связь I2C


К пину 13 постоянно подключен светодиод L.
Остальные светодиоды на плате:
ON - питание
RX - получение данных
TX - Запись данных (китайцы наоборот вписали)

Для работы с Arduino необходимо скачать программное обеспечение на сайте Arduino (внизу ссылка).

Скачиваем програмное обеспечение Arduino
Рис. 2

Затем необходимо удостовериться, на какой микросхеме построен виртуальный COM порт. В китайских вариациях это обычно CH340, на нее надо установить драйвера. Скачать можно внизу статьи. При первом подключении система запросит установку драйвера, указываем путь к скачанной папке.

Настройки Arduino
Рис. 3

В самой программе указываем, какая у нас плата (Arduino UNO) и порт. У меня COM4. Посмотреть порт можно в диспетчере устройств.

COM порт
Рис. 4

Подключаем к Arduino два светодиода

Подключение к Arduino светодиодов
Рис. 5

Запишем первый скетч

void setup() {
  pinMode(12, OUTPUT);     //12 пин на вывод
  pinMode(13, OUTPUT);     //13 пин на вывод
}

void loop() {
  digitalWrite(13, HIGH);  // включаем светодиод на пине 13
  delay(200);              // пауза 200 мСек
  digitalWrite(13, LOW);   // отключаем светодиод на пине 13
  delay(200);              // пауза 200 мСек
  digitalWrite(13, HIGH);  // включаем светодиод на пине 13
  delay(200);              // пауза 200 мСек
  digitalWrite(13, LOW);   // отключаем светодиод на пине 13
  delay(200);              // пауза 200 мСек

  digitalWrite(12, HIGH);  // включаем светодиод на пине 12
  delay(200);              // пауза 200 мСек
  digitalWrite(12, LOW);   // отключаем светодиод на пине 12
  delay(200);              // пауза 200 мСек
  digitalWrite(12, HIGH);  // включаем светодиод на пине 12
  delay(200);              // пауза 200 мСек
  digitalWrite(12, LOW);   // отключаем светодиод на пине 12
  delay(200);              // пауза 200 мСек
}


Загрузка Arduino
Запускаем компиляцию и загрузку и...

Видео работы



Инфо

1. драйвер СР340 (СР341)
2. Программное обеспечение Arduino



7

Теги:

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

 Arduino. Ознакомление
Технический Директор
Технический Директор
Дата регистрации: 18.12.2008
Откуда: Тирасполь
Сообщений: 2240
не в сети
Цитата:
азъем для питаня. Кнапку сброса.
Эм...ну как бы вы поняли...
Отправитель Нити

Ответы Отправитель Отправлено
 Arduino. Ознакомление alexfloka 20.08.2016 22:26
 Arduino. Ознакомление MACTEP 20.08.2016 22:56
    Arduino. Ознакомление grom 21.08.2016 12:16
      Arduino. Ознакомление MACTEP 21.08.2016 12:37
        Arduino. Ознакомление MACTEP 21.08.2016 12:39
          Arduino. Ознакомление wolf170571 21.08.2016 14:44
            Arduino. Ознакомление T112-10 21.08.2016 19:44
              Arduino. Ознакомление MACTEP 21.08.2016 21:12
                Arduino. Ознакомление T112-10 21.08.2016 23:03
                  Arduino. Ознакомление MACTEP 22.08.2016 1:00
                    Arduino. Ознакомление grom 22.08.2016 8:56
                      Arduino. Ознакомление KT315 22.08.2016 14:07
                        Arduino. Ознакомление MACTEP 22.08.2016 19:38
                          Arduino. Ознакомление KT315 22.08.2016 20:23
                      Arduino. Ознакомление T112-10 23.08.2016 0:06
                        Arduino. Ознакомление wolf170571 23.08.2016 12:15
                          Arduino. Ознакомление MACTEP 23.08.2016 19:49
                            Arduino. Ознакомление wolf170571 23.08.2016 19:53
                              Arduino. Ознакомление MACTEP 23.08.2016 20:03
                                Arduino. Ознакомление KT315 23.08.2016 23:44
                                  Arduino. Ознакомление T112-10 24.08.2016 4:34

 Arduino. Ознакомление
Старший сотрудник
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 124
не в сети
Arduino это устаревшая платформа как и AVR. Даже близко не сравнится с STM32.
Отправитель Нити

Ответы Отправитель Отправлено
 Arduino. Ознакомление evildesign 12.12.2016 23:00
    Arduino. Ознакомление proger 13.12.2016 0:41

 Arduino. Ознакомление
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
Вот тоже обзавёлся этой китайской платой. Пока что получилось заставить мигать светодиоды. Забавная вещица.
Отправитель Нити

Ответы Отправитель Отправлено
 Arduino. Ознакомление KT315 09.02.2019 1:25
    Arduino. Ознакомление Kosmonavt 09.02.2019 6:22
      Arduino. Ознакомление anatoliy03 09.02.2019 9:22
        Arduino. Ознакомление evildesign 09.02.2019 10:57
          Arduino. Ознакомление anatoliy03 09.02.2019 15:44
            Arduino. Ознакомление evildesign 09.02.2019 16:52
              Arduino. Ознакомление anatoliy03 09.02.2019 20:24
      Arduino. Ознакомление KT315 10.02.2019 19:34
        Arduino. Ознакомление Kosmonavt 11.02.2019 8:55
          Arduino. Ознакомление KT315 12.02.2019 0:32
            Arduino. Ознакомление Kosmonavt 12.02.2019 0:50
              Arduino. Ознакомление KT315 12.02.2019 23:33
                Arduino. Ознакомление MACTEP 16.02.2019 10:24
                Arduino. Ознакомление Kosmonavt 16.02.2019 12:03
                  Arduino. Ознакомление KT315 19.02.2019 16:05
                    Arduino. Ознакомление Kosmonavt 19.02.2019 16:37
                      Arduino. Ознакомление MACTEP 20.02.2019 0:09
                        Arduino. Ознакомление Kosmonavt 20.02.2019 0:23
                          Arduino. Ознакомление KT315 20.02.2019 14:05
                            Arduino. Ознакомление evildesign 20.02.2019 17:11
                              Arduino. Ознакомление MACTEP 20.02.2019 21:02
                                Arduino. Ознакомление evildesign 20.02.2019 21:28
                                  Arduino. Ознакомление Kosmonavt 22.02.2019 4:26
                    Arduino. Ознакомление Kosmonavt 26.02.2019 1:16
                      Arduino. Ознакомление evildesign 26.02.2019 19:57
          Arduino. Ознакомление MACTEP 16.02.2019 10:20
            Arduino. Ознакомление Kosmonavt 16.02.2019 10:59
              Arduino. Ознакомление MACTEP 16.02.2019 12:25
                Arduino. Ознакомление MACTEP 16.02.2019 12:30
                  Arduino. Ознакомление Kosmonavt 16.02.2019 12:39
            Arduino. Ознакомление Kosmonavt 25.02.2019 20:37

 Arduino. Ознакомление
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
Вообще красота: https://youtu.be/f2dQRWq85x0
Нравится мне эта игрушка!
Отправитель Нити

 Пример случайного включения одного из восьми светодиодов
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
long randNumber;
void setup() {
  pinMode(6OUTPUT);  //6 пин на вывод
  pinMode(7OUTPUT);  //7 пин на вывод
  pinMode(8OUTPUT);  //8 пин на вывод
  pinMode(9OUTPUT);  //9 пин на вывод
  pinMode(10OUTPUT);  //10 пин на вывод
  pinMode(11OUTPUT);  //11 пин на вывод
  pinMode(12OUTPUT);  //12 пин на вывод
  pinMode(13OUTPUT);  //13 пин на вывод
}
void loop() {
  // выводим случайное число из диапазона 6..13
  randNumber random(614);
  digitalWrite(randNumberHIGH);  // включаем светодиод на случайном пине одного из 6-13 
  delay(100);  // пауза 100 мСек
  digitalWrite(randNumberLOW);   // отключаем светодиод на случайном пине одного из 6-13
  delay(100);  // пауза 100 мСек
}
Отправитель Нити

 Псевдотелевизор или имитация работы некой загадочной аппаратуры
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
long randNumber;
void setup() {
  pinMode(6OUTPUT);
  pinMode(7OUTPUT);
  pinMode(8OUTPUT);
  pinMode(9OUTPUT);
  pinMode(10OUTPUT);
  pinMode(11OUTPUT);
  pinMode(12OUTPUT);
  pinMode(13OUTPUT);
}
void loop() {
  randNumber random(614);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  randNumber random(614);
  delay(100);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberHIGH);
  delay(100);
  randNumber random(614);
  digitalWrite(randNumberLOW);
  delay(100);
}
Отправитель Нити

Ответы Отправитель Отправлено
 Arduino. Ознакомление MACTEP 16.02.2019 21:06
    Arduino. Ознакомление wolf170571 16.02.2019 21:24
      Arduino. Ознакомление Kosmonavt 18.02.2019 5:04
    Arduino. Ознакомление Kosmonavt 18.02.2019 5:12
      Arduino. Ознакомление MACTEP 18.02.2019 20:05

 Тест работоспособности портов и наличия КЗ между выводами Arduino
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
#define FIRST_PIN 0 // первый вывод
#define LAST_PIN 19 // последний вывод

void Test1(byte pin)
{
  if(
pin 10Serial.print(" PIN:  ");
  else 
Serial.print(" PIN: ");
  
Serial.print(pin);
  
pinMode(pinOUTPUT);
  
digitalWrite(pin0);
  
Serial.print("    LOW: ");
  if(!
digitalRead(pin)) Serial.print("OK  ");
  else 
Serial.print("FAIL");
  
digitalWrite(pin1);
  
Serial.print("  HIGH: ");
  if(
digitalRead(pin)) Serial.print("OK  "); 
  else 
Serial.print("FAIL");
  
pinMode(pinINPUT);
  
Serial.print("  PULL UP: ");
  if(
digitalRead(pin)) Serial.print("OK  ");
  else 
Serial.print("FAIL");
  
digitalWrite(pin0);
}

void Test2(byte pin)
{
  
Serial.print("     ");
  
pinMode(pinOUTPUT);
  
digitalWrite(pin1);
  
delay(5);
  if(!
digitalRead(pin))Serial.println("SHORT");
  else 
Serial.println("OK");
  
pinMode(pinINPUT); 
  
digitalWrite(pin0);

}

void setup() {
  
Serial.begin(9600); 

  
Serial.println("Test of short circuit on GND or VCC and between pins:");
  
Serial.println();
  for(
byte i FIRST_PIN<= LAST_PINi++) 
  {
    for(
byte j FIRST_PIN<= LAST_PINj++) 
    {
      
pinMode(jINPUT);
      
digitalWrite(j0);
    }
    
Test1(i);

    for(
byte j FIRST_PIN<= LAST_PINj++) 
    {
      
pinMode(jOUTPUT);
      
digitalWrite(j0);
    }
    
Test2(i);
  }

  for(
byte j FIRST_PIN<= LAST_PINj++) 
  {
    
pinMode(jINPUT);
    
digitalWrite(j0);
  }
}

void loop() {}
Отправитель Нити

Ответы Отправитель Отправлено
 Arduino. Ознакомление KT315 03.03.2019 17:43
 Тест работоспособности портов и наличия КЗ между выводами Arduino Lismus 05.05.2019 20:48

 Часы на Arduino и TM1637
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
Открыть изображение в новом окне
/*
 * A library for the 4 digit display
 *
 * Copyright (c) 2012 seeed technology inc.
 * Website    : www.seeed.cc
 * Author     : Frankie.Chu
 * Create Time: 9 April,2012
 * Change Log :
 *
 * The MIT License (MIT)
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
#include <TimerOne.h>
#include "TM1637.h"
#define ON 1
#define OFF 0

int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint 1;
unsigned char Update;
unsigned char halfsecond 0;
unsigned char second;
unsigned char minute 0;
unsigned char hour 12;


#define CLK 2//pins definitions for TM1637 and can be changed to other ports
#define DIO 3
TM1637 tm1637(CLK,DIO);

void setup()
{
  
tm1637.set();
  
tm1637.init();
  
Timer1.initialize(500000);//timing for 500ms
  
Timer1.attachInterrupt(TimingISR);//declare the interrupt serve routine:TimingISR
}
void loop()
{
  if(
Update == ON)
  {
    
TimeUpdate();
    
tm1637.display(TimeDisp);
  }

}
void TimingISR()
{
  
halfsecond ++;
  
Update ON;
  if(
halfsecond == 2){
    
second ++;
    if(
second == 60)
    {
      
minute ++;
      if(
minute == 60)
      {
        
hour ++;
        if(
hour == 24)hour 0;
        
minute 0;
      }
      
second 0;
    }
    
halfsecond 0;
  }
 
// Serial.println(second);
  
ClockPoint = (~ClockPoint) & 0x01;
}
void TimeUpdate(void)
{
  if(
ClockPoint)tm1637.point(POINT_ON);
  else 
tm1637.point(POINT_OFF);
  
TimeDisp[0] = hour 10;
  
TimeDisp[1] = hour 10;
  
TimeDisp[2] = minute 10;
  
TimeDisp[3] = minute 10;
  
Update OFF;
}
Отправитель Нити

 Симуляция работы Arduino Uno в программе Proteus 8.7
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
Симуляция работы Arduino Uno (пример Blink - мигающий встроенный светодиод на плате) в программе Proteus 8.7.
Скетч пишем как обычно или берём готовый пример, но в настройках программы Arduino ставим галочку: Файл->Настройки->Компиляция.
Затем жмём проверить скетч. Отправляемся заглянуть в папку c:\Users\Kosmonavt\AppData\Local\Temp\
Здесь отыскиваем папку примерно такого названия arduino_build_747962\
Заходим в неё и ищем файл с расширением *.hex, а точнее Blink.ino.hex
Копируем его адрес, должно выглядеть так: c:\Users\Kosmonavt\AppData\Local\Temp\arduino_build_747962\Blink.ino.hex
В программе Proteus в поле деятельности добавляем плату Arduino Uno и два раза кликаем на сам процессор.
Появится окно, где кроме всего прочего нужно вставить в строку напротив Program File: то что мы скопировали выше и нажать ОК.
Затем нажать знак треугольника (Run the simulation) в левом нижнем углу окна. Всё. Светодиод должен начать мигать.
Открыть изображение в новом окне
Отправитель Нити

 Простые часы на Arduino + TM1637 4-digit 7-segment display + DS3231
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
Открыть изображение в новом окне
библиотека для TM1637 4-digit 7-segment display
библиотека для модуля DS3231

Пример установки библиотек:
Открыть изображение в новом окне

Программный код:
/* Arduino example code to display a 24 hour time format clock on a TM1637 4 digit 7 segment display with a DS32321 RTC. More info: www.makerguides.com */
// Include the libraries:
#include "RTClib.h"
#include <TM1637Display.h>
// Define the connections pins:
#define CLK 2
#define DIO 3
// Create rtc and display object:
RTC_DS3231 rtc;
TM1637Display display TM1637Display(CLKDIO);
void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Wait for console opening:
  delay(3000);
  // Check if RTC is connected correctly:
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  // Check if the RTC lost power and if so, set the time:
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // The following line sets the RTC to the date & time this sketch was compiled:
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    //rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  // Set the display brightness (0-7):
  display.setBrightness(5);
  // Clear the display:
  display.clear();
}
void loop() {
  // Get current date and time:
  DateTime now rtc.now();
  // Create time format to display:
  int displaytime = (now.hour() * 100) + now.minute();
  // Print displaytime to the Serial Monitor:
  Serial.println(displaytime);
  // Display the current time in 24 hour format with leading zeros enabled and a center colon:
  display.showNumberDecEx(displaytime0b11100000true);
  // Remove the following lines of code if you want a static instead of a blinking center colon:
  delay(1000);
  display.showNumberDec(displaytimetrue); // Prints displaytime without center colon.
  delay(1000);
}

Часы с возможностью установки времени и яркости дисплея отдельными кнопками вручную (кнопку "Уст." при этом нужно удерживать):
Открыть изображение в новом окне
#include <Wire.h> 
#include "TM1637.h"
// 7 сегментный индикатор 
#define CLK 6 
#define DIO 7 
byte brightness 7// яркость, от 0 до 7 
// кнопки 
#define keyHor 5 
#define keyMin 4 
#define keyBr 8 
#define keyPL 3 
TM1637 tm1637(CLK,DIO); 
#define DS3231_I2C_ADDRESS 0x68 
volatile boolean flag; 
///// часы .. 
byte decToBcd(byte val){ 
return ( (val/10*16) + (val%10) ); 
} 
byte bcdToDec
(byte val){ 
return ( (val/16*10) + (val%16) ); 
} 
void setDateDs3231
(byte second// 0-59 
byte minute// 0-59 
byte hour// 1-23 
byte dayOfWeek// 1-7 
byte dayOfMonth// 1-28/29/30/31 
byte month// 1-12 
byte year// 0-99 
{ 
Wire
.beginTransmission(DS3231_I2C_ADDRESS); 
Wire
.write(0); 
Wire
.write(decToBcd(second)); 
Wire
.write(decToBcd(minute)); 
Wire
.write(decToBcd(hour)); 
Wire
.write(decToBcd(dayOfWeek)); 
Wire
.write(decToBcd(dayOfMonth)); 
Wire
.write(decToBcd(month)); 
Wire
.write(decToBcd(year)); 
Wire
.endTransmission(); 
} 
void getDateDs3231
(byte *second, 
byte 
*minute, 
byte 
*hour, 
byte 
*dayOfWeek, 
byte 
*dayOfMonth, 
byte 
*month, 
byte 
*year) 
{ 
Wire
.beginTransmission(DS3231_I2C_ADDRESS); 
Wire
.write(0); 
Wire
.endTransmission(); 
Wire
.requestFrom(DS3231_I2C_ADDRESS7); 
*second bcdToDec(Wire.read() & 0x7f); 
*minute bcdToDec(Wire.read()); 
*hour bcdToDec(Wire.read() & 0x3f); 
*dayOfWeek bcdToDec(Wire.read()); 
*dayOfMonth bcdToDec(Wire.read()); 
*month bcdToDec(Wire.read()); 
*year bcdToDec(Wire.read()); 
} 
void setINT
(){ //включает выход SQW 
Wire.beginTransmission(DS3231_I2C_ADDRESS); 
Wire
.write(0x0E); 
Wire
.write(0x0); 
Wire
.endTransmission(); 
} 
void blink
() { 
digitalWrite
(12, !digitalRead(12)); 
flag 
= !flag; 
tm1637
.point(flag); 
} 
void setup
() { 
// Serial.begin(9600); 
Wire.begin(); 
pinMode
(13OUTPUT); 
pinMode
(keyHorINPUT_PULLUP); 
pinMode
(keyMinINPUT_PULLUP); 
pinMode
(keyPLINPUT_PULLUP); 
pinMode
(keyBrINPUT_PULLUP); 
tm1637
.init(); 
tm1637
.set(brightness); 
setINT
(); 
attachInterrupt
(0blinkCHANGE); 
} 
void loop
(){ 
// читаем время из модуля 
byte secondminutehourdayOfWeekdayOfMonthmonthyear; 
getDateDs3231
(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 
// забиваем массив значениями для отправки на экран 
int8_t TimeDisp[4]; 
TimeDisp
[0] = hour 10; 
TimeDisp
[1] = hour 10; 
TimeDisp
[2] = minute 10; 
TimeDisp
[3] = minute 10; 
// обработка кнопок 
if (!digitalRead(keyHor) && !digitalRead(keyPL)){ // часы 
second 0// сбрасываем секунды 
hour++; // прибавляем единицу к часам 
if (hour 23hour 0// если вылезли за границы присваиваем 0 
setDateDs3231(secondminutehourdayOfWeekdayOfMonthmonthyear); // пишем в модуль 
delay(200); 
} 
if (!digitalRead(keyMin) && !digitalRead(keyPL)){ // минуты 
second 0; 
minute
++; 
if (minute 59minute 0; 
setDateDs3231
(secondminutehourdayOfWeekdayOfMonthmonthyear); 
delay
(200); 
} 
if (!digitalRead(keyBr) && !digitalRead(keyPL)){ 
brightness
++; 
if (brightness 7brightness 0; 
tm1637
.set(brightness); 
delay
(200); 
// отправляем массив на экран 
} 
tm1637
.display(TimeDisp); 
}
Восемь месяцев хранились в гараже эти самые самодельные часы с модулем реального времени DS3231 (ZS-042) со вставленной в него батарейкой GR2032. А сегодня принёс домой и подал на часы общее питание. Повезло, работают. А ведь перезимовка в неотапливаемом гараже при минусовой температуре поидее должна была сыграть своё чёрное дело. Мало того, точность хода часов осталась прежней - минута в минуту с часами на компьютере.
Готовый код к часам нашёл на просторах интернета. Из недостатков: неудобное управление настройкой времени. Из достоинств: простота сборки, высокая точность.
Отправитель Нити

 Arduino. Ознакомление
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2441
не в сети
Открыть изображение в новом окне
Собрал на досочке второй вариант часиков. Хорошо работают, время сохраняют без основного питания.
Отправитель Нити

Ответы Отправитель Отправлено
 Arduino. Ознакомление MACTEP 28.03.2020 10:21
    Arduino. Ознакомление Kosmonavt 28.03.2020 12:30

Разное

Интересно

При замене электролитических конденсаторов, кроме соблюдения полярности, не следует значительно превышать допустимое рабочее напряжение.
Например, если конденсатор рассчитан на рабочее напряжение 16 В, то при установке нового той же емкости, но рассчитанного на напряжение 300 В после непродолжительной эксплуатации произойдет его расформовка, и емкость его значительно уменьшится.

Похожие статьи