GithubHelp home page GithubHelp logo

Comments (16)

himical avatar himical commented on June 8, 2024

В описании к программе написано, что всё для работы с Ардуино есть в архиве с программой. Но как связать её с Ардуино Иде? Мне нужно контролировать датчик температуры ds18b20. В ардуино Иде скачал библиотеку для датчика и в сериал порт температуру отдаю, а как вывести её на гарфик?

from svisual.

himical avatar himical commented on June 8, 2024

Текст немного исказился! Прошу прощения!. Как связать вашу программу с Arduino IDE? В описании к программе написано, что всё для работы с Ардуино есть в архиве с программой! Файлы просмотрел, но библиотек не нашел. Датчик температуры в serial port показания выводит. С чего начать.

from svisual.

Tyill avatar Tyill commented on June 8, 2024

в папке с дистрибутивом ПО есть архив rar под названием "arduino_client.rar".

default

в нем папка - библиотека для Arduino IDE. Разархивируйте ее туда, где у вас другие библиотеки для ардуино лежат. У меня, например, так:

default

и подключите в Arduino IDE:

default

Дальше наберите пример:

#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.

himical avatar himical commented on June 8, 2024

Здравствуйте! Прочитал вашу инструкцию, в общем я так и делал. Тестовый скейч с трудом загрузил в ардуино нано. Постоянно выдавала ошибку:
1
Загрузив с трудом, перешёл в программу из архива "SV106_Win64_ru" но графика так и не увидел! В чем может быть проблема? На ардуино мигает "TX" значит передача идёт! Подключенный модуль в программе загорелся зелёным кружком!
svmonitor 106
И ещё пробовал эту:
svmonitor 1001
Тоже графика нет!

from svisual.

himical avatar himical commented on June 8, 2024

Просмотрев ещё раз видео я понял, что нужно было график перетащить из под зеленого кружка! Теперь возникает вопрос , Как мне вывести температуру с датчика DS18B20 на график? Я понял serial print использовать нельзя!

from svisual.

Tyill avatar Tyill commented on June 8, 2024

надо 2 раза левой кнопкой мыши щекнуть на выбранном сигнале и справа будет график. смотрите видео, там клики мыши видать все.

чтобы температуру вывести, надо что-то типа этого записать:

 
void loop()
{

int analogPin = 3;     // номер порта к которому подключен датчик
int val = 0;           // переменная для хранения считываемого значения

  val = analogRead(analogPin);     // считываем значение
 
 svisual::addIntValue("temp", val);    // передаем в монитор      
}

В SVMonitor появится сигнал "temp", щелкайте 2 ЛКМ на него и будет график.

from svisual.

Tyill avatar Tyill commented on June 8, 2024

да. где-то в мануале у меня написано, что serial print использовать нельзя.

from svisual.

Tyill avatar Tyill commented on June 8, 2024

старые версии лучше не использовать, там много изменений было сделано, ошибок устранено.
используйте последнюю 1.0.6

from svisual.

himical avatar himical commented on June 8, 2024

Но датчик температуры 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.

Tyill avatar Tyill commented on June 8, 2024

не понял в чем проблема.
вот вы перевели в градусы, потом передавайте на график.

все 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.

himical avatar himical commented on June 8, 2024

Спасибо за оперативный ответ! Скетч залил и программой график отобразил! Но хотелось бы и десятые доли градуса отображать, а то грубоватый график получается! Такая возможность имеется?
image

from svisual.

Tyill avatar Tyill commented on June 8, 2024

вообще да, сначала имелась.
потом специально клиента для ардуинки загрубил, сделал тип int (16 бит) для всех переменных, соответственно float (32 бит) туда уже не влезет.
это было сделано, чтобы была возможность больше записать переменных, помимо самой пользовательской программы, поскольку память контроллера ограничена.

подумаю над этим, может быть на опцию посажу,
чтобы была возможность кому надо включить.
напишу здесь, когда поправлю клиентскую либу.

from svisual.

Tyill avatar Tyill commented on June 8, 2024

клиента для ардуино изменил:

  • варнинги поправил свои;
  • добавил метод для передачи 'float' значений.

вот новая версия.

from svisual.

himical avatar himical commented on June 8, 2024

Поменял "Int" на "Float" , но как то особой разницы не вижу, кроме шести цифр после запятой!
image
Может в скетче что то поменять?
#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.

Tyill avatar Tyill commented on June 8, 2024

кроме шести цифр после запятой!

криво я его собрал. скачайте релиз еще раз.

на счет того, что ничего не изменилось. пишите так:

....
// Отделяем целые от дробных чисел
float fWhole = Tc_100 / 100.0;

// Если на улице дубак напишем минус перед цифрами :)
if (SignBit)
svisual::addFloatValue("temp", -fWhole );
else
svisual::addFloatValue("temp", fWhole);

from svisual.

himical avatar himical commented on June 8, 2024

Огромное спасибо! Сейчас получилось то, что было нужно!
Ещё небольшая просьба что бы на 32 битной системе можно юзать (Планшетный ПК 32 бит система.)
А на большом компе (64 бит) всё работает хорошо! Спасибо!

from svisual.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.