Arduino:Примеры/Чтение данных с I2C-датчика температуры TC74A0-5.0VAT с отображением данных на гистограмме и программе на Processing
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Проверка/Оформление/Редактирование: Мякишев Е.А.
![]() |
Черновик |
Содержание
Чтение данных с I2C-датчика температуры TC74A0-5.0VAT с отображением данных на гистограмме и программе на Processing
Данный пример демонстрирует чтение данных с I2C-датчика температуры TC74A0-5.0VAT,подключенного к Arduino Uno и отображение данных на гистограмме и программе на Processing.
Необходимые компоненты
- Плата Arduino Uno, 1 шт.;
- I2C-датчика температуры TC74A0-5.0VAT, 1 шт.;
- Сдвиговый регистр 74HC595, 1 шт.;
- Резистор 4,7 кОм, 2 шт.;
- Резистор на 220 Ом, 8 шт.;
- Красный светодиод, 1 шт.;
- Желтый светодиод, 3 шт.;
- Зеленый светодиод, 4 шт.;
- Макетная плата;
- Провода перемычки;
Монтажная схема
Соберите схему согласно монтажной схеме.
Контакты 1-7, 15 | Q0-Q7 | Выходные контакты |
Контакт 8 | GND | «Земля», Vss |
Контакт 9 | Q7’’ | Контакт для вывода последовательных данных |
Контакт 10 | MR | Контакт, позволяющий «очистить» значения на всех выходных контактах и выставить их на LOW (если подать на него LOW) |
Контакт 11 | SH_CP | Тактовый контакт для сдвигового регистра |
Контакт 12 | ST_CP | Тактовый контакт для регистра данных (контакт-защелка) |
Контакт 13 | OE | Контакт, разрешающий вывод данных (если подать на него LOW) |
Контакт 14 | DS | Контакт для ввода последовательных данных |
Контакт 16 | Vcc | Контакт для питания напряжением с положительным зарядом |

Распиновка I2C-датчика температуры TC74A0-5.0VAT
Код для Arduino
1 #include <Wire.h> // Подключаем библиотеку Wire
2
3 #define SER 8 // Контакт для ввода последовательных данных в сдвиговый регистр
4 #define LATCH 9 // Тактовый контакт для регистра данных (контакт-защелка)
5 // служит для одновременного вывода полученных последовательных данных
6 // на параллельные выходы сдвигового регистра
7 #define CLK 10 // Тактовый контакт для сдвигового регистра
8 // При подаче HIGH происходит запись одного бита в сдвиговый регистр
9
10 int vals[8] = {1,3,7,15,31,63,127,255}; // возможные значения для регистра сдвига
11
12 int temp_address = 72; // Адрес(1001000) I2C-датчика температуры TC74A0-5.0VAT в десятичной нотации
13
14 void setup()
15 {
16 Serial.begin(9600); // Инициализация передачи по последовательному порту на скорости 9600 бод
17 Wire.begin(); // Создание объекта Wire
18
19 // Установка выводов как выходов
20 pinMode(SER, OUTPUT);
21 pinMode(LATCH, OUTPUT);
22 pinMode(CLK, OUTPUT);
23 }
24
25 void loop()
26 {
27 // Отправка запроса
28 Wire.beginTransmission(temp_address); // Выбор ведомого устройства отправкой его адреса
29 Wire.write(0); // Отправка 0, тем самым указывая что мы хотим прочитать данные из регистра температуры нашего датчика
30 Wire.endTransmission(); // Отправка стоп-бита, тем самым сообщаем об окончании записи на устройство
31
32 // Чтение температуры с датчика
33 Wire.requestFrom(temp_address, 1); // Запрос 1 байта по адресу устройства
34 while(Wire.available() == 0); // Ожидаем ответа
35 int c = Wire.read(); // Чтение данных в переменную
36
37 int graph = map(c, 24, 31, 0, 7); // Масштабирование значений для светодиодной гистограммы
38 graph = constrain(graph,0,7); // Накладываем ограничение на диапазон возможных значений
39
40 digitalWrite(LATCH, LOW); // устанавливаем LATCH в LOW, чтобы значения на параллельных выходах
41 // сдвигового регистра не изменялись во время ввода последовательных
42 // данных
43 shiftOut(SER, CLK, MSBFIRST, vals[graph]); // ввод последовательных данных в сдвиговый регистр
44 digitalWrite(LATCH, HIGH); // устанавливаем LATCH в HIGH для вывода значений
45 // на параллельные выводы сдвигового регистра
46
47 int f = round(c * 9.0 / 5.0 + 32.0); // Переводим Цельсии в Фаренгейты и округляем результат
48
49 // Передаем считанную температуру в последовательный порт
50 Serial.print(c);
51 Serial.print("C,");
52 Serial.print(f);
53 Serial.print("F.");
54
55 delay(500); // Задержка 500 мс.
56 }
Код для Processing
- Сохраните код проекта;
- Перейдите в Tools -> Create Font;
- Выберете понравившийся шрифт и укажите в поле Size размер шрифта равным примерно 200;
- При желании вы можете дать свое название шрифту в поле Filename;
- Скопируйте текст из поля Filename в буфер;
- Нажмите OK;
- Вставьте из буфера и замените AgencyFB-Bold-200.vlw в коде(14 строчка) на название вашего шрифта;
1 import processing.serial.*;
2 Serial port;
3 String temp_c = "";
4 String temp_f = "";
5 String data = "";
6 int index = 0;
7 PFont font;
8
9 void setup()
10 {
11 size(400,400);
12 port = new Serial(this, "COM5", 9600); // Измените "COM5" на номер порта к которому подключена ваша плата Arduino
13 port.bufferUntil('.');
14 font = loadFont("AgencyFB-Bold-200.vlw"); // Измените "AgencyFB-Bold-200.vlw" на тот шрифт который вы создали
15 textFont(font, 200);
16 }
17
18 void draw()
19 {
20 background(0,0,0);
21 fill(46, 209, 2);
22 text(temp_c, 70, 175);
23 fill(0, 102, 153);
24 text(temp_f, 70, 370);
25 }
26
27 void serialEvent (Serial port)
28 {
29 data = port.readStringUntil('.');
30 data = data.substring(0, data.length() - 1);
31
32 index = data.indexOf(","); // Ищем в строке позицию символа ','(запятая)
33 temp_c = data.substring(0, index); // Сохраняем градусы Цельсия
34 temp_f = data.substring(index+1, data.length()); // Сохраняем градусы Фаренгейта
35 }
См.также
Внешние ссылки