Разделы

В сети

Пользователей: 109
Из них просматривают:
Аналоги: 39. Даташиты: 26. Карта сайта: 1. Магазин: 1. Новости: 6. Остальное: 7. Партнёры: 1. Программы: 2. Производители: 3. Профиль пользователя: 4. Торрент: 2. Форум: 16. Чат: 1.
Участников: 3
Гостей: 106

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

Партнёры


Партнёры

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

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

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

Написал MACTEP 20.08.2016 21:10:00 (Просмотров: 17538)
Эта статья открывает рубрику 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
Откуда: Тирасполь
Сообщений: 2239
не в сети
Цитата:
азъем для питаня. Кнапку сброса.
Эм...ну как бы вы поняли...
Отправитель Нити

Ответы Отправитель Отправлено
 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

Разное

Интересно

Если у вас нет жидкого канифольного флюса, его легко изготовить самостоятельно.
В небольшом количестве спирта растворяют кусочки канифоли до образования темно-коричневой жидкости. Наносят такой флюс на место пайки кисточкой.

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