Comments (16)
В описании к программе написано, что всё для работы с Ардуино есть в архиве с программой. Но как связать её с Ардуино Иде? Мне нужно контролировать датчик температуры ds18b20. В ардуино Иде скачал библиотеку для датчика и в сериал порт температуру отдаю, а как вывести её на гарфик?
from svisual.
Текст немного исказился! Прошу прощения!. Как связать вашу программу с Arduino IDE? В описании к программе написано, что всё для работы с Ардуино есть в архиве с программой! Файлы просмотрел, но библиотек не нашел. Датчик температуры в serial port показания выводит. С чего начать.
from svisual.
в папке с дистрибутивом ПО есть архив rar под названием "arduino_client.rar".
в нем папка - библиотека для Arduino IDE. Разархивируйте ее туда, где у вас другие библиотеки для ардуино лежат. У меня, например, так:
и подключите в Arduino IDE:
Дальше наберите пример:
#include <SVClient.h>
void setup() {
bool ok = svisual::connectOfCOM("test");
}
int cnt = 0;
void loop() {
svisual::addIntValue("dfv", cnt);
++cnt;
if (cnt > 10) cnt = 0;
bool odd_cnt = cnt % 2;
svisual::addBoolValue("bFW", odd_cnt);
svisual::addBoolValue("bBW", !odd_cnt);
delay(200);
}
Запустите SVMonitor.exe, в настройках выберите - "Получение данных с COM".
Загрузите скетч в плату и увидите график.
from svisual.
Здравствуйте! Прочитал вашу инструкцию, в общем я так и делал. Тестовый скейч с трудом загрузил в ардуино нано. Постоянно выдавала ошибку:
Загрузив с трудом, перешёл в программу из архива "SV106_Win64_ru" но графика так и не увидел! В чем может быть проблема? На ардуино мигает "TX" значит передача идёт! Подключенный модуль в программе загорелся зелёным кружком!
И ещё пробовал эту:
Тоже графика нет!
from svisual.
Просмотрев ещё раз видео я понял, что нужно было график перетащить из под зеленого кружка! Теперь возникает вопрос , Как мне вывести температуру с датчика DS18B20 на график? Я понял serial print использовать нельзя!
from svisual.
надо 2 раза левой кнопкой мыши щекнуть на выбранном сигнале и справа будет график. смотрите видео, там клики мыши видать все.
чтобы температуру вывести, надо что-то типа этого записать:
void loop()
{
int analogPin = 3; // номер порта к которому подключен датчик
int val = 0; // переменная для хранения считываемого значения
val = analogRead(analogPin); // считываем значение
svisual::addIntValue("temp", val); // передаем в монитор
}
В SVMonitor появится сигнал "temp", щелкайте 2 ЛКМ на него и будет график.
from svisual.
да. где-то в мануале у меня написано, что serial print использовать нельзя.
from svisual.
старые версии лучше не использовать, там много изменений было сделано, ошибок устранено.
используйте последнюю 1.0.6
from svisual.
Но датчик температуры 18d20 цифровой и к аналоговому пину не подключишь! Кроме того, после считывания бит происходит перевод значений в градусы цельсия. Вот пример мною проверенного скетча, но как тут вывести показания на график? ХЭЛП!
#include <OneWire.h>
/*
- Получаем температуру от датчиков серии DS18x20
*/
// Поддерживаемые датчики
#define DS18S20_ID 0x10
#define DS18B20_ID 0x28
// Линия 1-Wire будет на pin 2
OneWire ds(2);
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if (!ds.search(addr)) {
ds.reset_search();
return;
}
if (OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!\n");
return;
}
if (addr[0] != DS18S20_ID && addr[0] != DS18B20_ID) {
Serial.print("Device is not a DS18x20 family device.\n");
return;
}
ds.reset();
ds.select(addr);
// Запускаем конвертацию
ds.write(0x44, 1);
// Подождем...
delay(1000);
present = ds.reset();
ds.select(addr);
// Считываем ОЗУ датчика
ds.write(0xBE);
// Обрабатываем 9 байт
for ( i = 0; i < 9; i++) {
data[i] = ds.read();
}
// Высчитываем температуру :)
int HighByte, LowByte, TReading, Tc_100, SignBit, Whole, Fract;
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
// Проверяем дубак там или нет
SignBit = TReading & 0x8000;
// Если на улице дубак :)
if (SignBit) {
TReading = (TReading ^ 0xffff) + 1;
}
// Умножаем на (100 * 0.0625) или 6.25
Tc_100 = (6 * TReading) + TReading / 4;
// Отделяем целые от дробных чисел
Whole = Tc_100 / 100;
Fract = Tc_100 % 100;
Serial.print("Temperature: ");
// Если на улице дубак напишем минус перед цифрами :)
if (SignBit) {
Serial.print("-");
}
Serial.print(Whole);
Serial.print(".");
if (Fract < 10) {
Serial.print("0");
}
Serial.print(Fract);
Serial.print("\n");
}
from svisual.
не понял в чем проблема.
вот вы перевели в градусы, потом передавайте на график.
все Serial.Print уберите, вот что получится:
#include <OneWire.h>
#include <SVClient.h>
/*
Получаем температуру от датчиков серии DS18x20
*/
// Поддерживаемые датчики
#define DS18S20_ID 0x10
#define DS18B20_ID 0x28
// Линия 1-Wire будет на pin 2
OneWire ds(2);
void setup(void) {
svisual::connectOfCOM("myModule");
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if (!ds.search(addr)) {
ds.reset_search();
return;
}
if (OneWire::crc8( addr, 7) != addr[7]) {
//Serial.print("CRC is not valid!\n");
return;
}
if (addr[0] != DS18S20_ID && addr[0] != DS18B20_ID) {
//Serial.print("Device is not a DS18x20 family device.\n");
return;
}
ds.reset();
ds.select(addr);
// Запускаем конвертацию
ds.write(0x44, 1);
// Подождем...
delay(1000);
present = ds.reset();
ds.select(addr);
// Считываем ОЗУ датчика
ds.write(0xBE);
// Обрабатываем 9 байт
for ( i = 0; i < 9; i++) {
data[i] = ds.read();
}
// Высчитываем температуру :)
int HighByte, LowByte, TReading, Tc_100, SignBit, Whole, Fract;
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
// Проверяем дубак там или нет
SignBit = TReading & 0x8000;
// Если на улице дубак :)
if (SignBit) {
TReading = (TReading ^ 0xffff) + 1;
}
// Умножаем на (100 * 0.0625) или 6.25
Tc_100 = (6 * TReading) + TReading / 4;
// Отделяем целые от дробных чисел
Whole = Tc_100 / 100;
Fract = Tc_100 % 100;
// Если на улице дубак напишем минус перед цифрами :)
if (SignBit)
svisual::addIntValue("temp", -Whole );
else
svisual::addIntValue("temp", Whole );
}
и будет в градусах график.
from svisual.
Спасибо за оперативный ответ! Скетч залил и программой график отобразил! Но хотелось бы и десятые доли градуса отображать, а то грубоватый график получается! Такая возможность имеется?
from svisual.
вообще да, сначала имелась.
потом специально клиента для ардуинки загрубил, сделал тип int (16 бит) для всех переменных, соответственно float (32 бит) туда уже не влезет.
это было сделано, чтобы была возможность больше записать переменных, помимо самой пользовательской программы, поскольку память контроллера ограничена.
подумаю над этим, может быть на опцию посажу,
чтобы была возможность кому надо включить.
напишу здесь, когда поправлю клиентскую либу.
from svisual.
клиента для ардуино изменил:
- варнинги поправил свои;
- добавил метод для передачи 'float' значений.
вот новая версия.
from svisual.
Поменял "Int" на "Float" , но как то особой разницы не вижу, кроме шести цифр после запятой!
Может в скетче что то поменять?
#include <OneWire.h>
#include <SVClient.h>
/*
Получаем температуру от датчиков серии DS18x20
*/
// Поддерживаемые датчики
#define DS18S20_ID 0x10
#define DS18B20_ID 0x28
// Линия 1-Wire будет на pin 6
OneWire ds(6);
void setup(void) {
svisual::connectOfCOM("myModule");
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if (!ds.search(addr)) {
ds.reset_search();
return;
}
if (OneWire::crc8( addr, 7) != addr[7]) {
//Serial.print("CRC is not valid!\n");
return;
}
if (addr[0] != DS18S20_ID && addr[0] != DS18B20_ID) {
//Serial.print("Device is not a DS18x20 family device.\n");
return;
}
ds.reset();
ds.select(addr);
// Запускаем конвертацию
ds.write(0x44, 1);
// Подождем...
delay(1000);
present = ds.reset();
ds.select(addr);
// Считываем ОЗУ датчика
ds.write(0xBE);
// Обрабатываем 9 байт
for ( i = 0; i < 9; i++) {
data[i] = ds.read();
}
// Высчитываем температуру :)
int HighByte, LowByte, TReading, Tc_100, SignBit, Whole, Fract;
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
// Проверяем дубак там или нет
SignBit = TReading & 0x8000;
// Если на улице дубак :)
if (SignBit) {
TReading = (TReading ^ 0xffff) + 1;
}
// Умножаем на (100 * 0.0625) или 6.25
Tc_100 = (6 * TReading) + TReading / 4;
// Отделяем целые от дробных чисел
Whole = Tc_100 / 100;
Fract = Tc_100 % 100;
// Если на улице дубак напишем минус перед цифрами :)
if (SignBit)
svisual::addFloatValue("temp", -Whole );
else
svisual::addFloatValue("temp", Whole );
}
from svisual.
кроме шести цифр после запятой!
криво я его собрал. скачайте релиз еще раз.
на счет того, что ничего не изменилось. пишите так:
....
// Отделяем целые от дробных чисел
float fWhole = Tc_100 / 100.0;
// Если на улице дубак напишем минус перед цифрами :)
if (SignBit)
svisual::addFloatValue("temp", -fWhole );
else
svisual::addFloatValue("temp", fWhole);
from svisual.
Огромное спасибо! Сейчас получилось то, что было нужно!
Ещё небольшая просьба что бы на 32 битной системе можно юзать (Планшетный ПК 32 бит система.)
А на большом компе (64 бит) всё работает хорошо! Спасибо!
from svisual.
Related Issues (20)
- Просмотр в браузере HOT 1
- Баг при экспорте HOT 2
- Win32 32bits version HOT 2
- Создать Docker образ и выложить на Docker Hub HOT 1
- Raspberri Pi3 Ubuntu Mate HOT 2
- При соединении Arduino по Ethernet не появляется модуль в SVMonitor. HOT 6
- Цвет графика как атрибут сигнала, определяемый пользователем. HOT 1
- Ошибки компиляции для платы Arduino Due HOT 78
- SVisual Client in C not C++ HOT 4
- Proposals for improvement of SVMonitor HOT 1
- proposal for features, potential bugs HOT 6
- Перенос сигналов bool в верхнею область окна. HOT 4
- Linux compilation errors HOT 2
- sorting function is not right HOT 12
- How to compile/run in Ubuntu HOT 2
- Unable to copy table data HOT 1
- SVViewer crash HOT 2
- SV Viewer not open new dataset HOT 5
- SV Viewer Settings HOT 2
- Virtual Channels often stuttering HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from svisual.