Вывод резистора

DrFix
Offline
Зарегистрирован: 08.02.2018

Всем доброго времени суток! 

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

По этом я и хотел бы обратиться с просьбой о помощи к Вам.

У меня есть задача - чтобы на дисплей выводилось сопротивление резистора, который подключен к контактам.

Весь интернет облазил, хоть убей не выходит.

Написал вот такой вот код, подскажите, в чем ошибка может быть?

 

 

#include "U8glib.h"
#include <SPI.h>                                  
#include <Wire.h>
 
 
U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов для вывода дисплея
 
 
int resist = 7; // Создание переменной lam - название, 2 - ножка пина
 
float Vout = 0;                    // Переменная для хранения значения напряжения в средней точки делителя (0-5.0)
 
float R2 = 0;                      // Переменная для хранения значения резистора R2
 
 
 
void setup() 
{
  u8g.setFont(u8g_font_6x10); // Выбор шрифта
 
  pinMode(resist, INPUT); //инициализация контакта
 
 
void loop() 
{
  
 Vout = (5.0 / 1023.0) * analogRead(analogPin); // Вычисляем напряжение в средней точки делителя (0-5.0)
 R2 = 15000 / ((5.0 / Vout) - 1); // Вычисляем сопротивление R2 (15000 это значение R1 15 кОм) 
  
R2 = digitalWrite(resist);
  
 
  u8g.firstPage();
  
  do 
   {
     u8g.drawStr(20, 10, R2); // выведод cопротиаления
 
   }
   
  while(u8g.nextPage()); 
}
b707
Offline
Зарегистрирован: 26.05.2017

DrFix пишет:

Написал вот такой вот код, подскажите, в чем ошибка может быть?

 

Во-первых, код надо выложить по правилам.

Во-вторых, вы не написали, в чем проблема - считает неверно, показывает неправильно, вообще не работает, не компилируется?

DrFix
Offline
Зарегистрирован: 08.02.2018

b707 пишет:

DrFix пишет:

Написал вот такой вот код, подскажите, в чем ошибка может быть?

 

Во-первых, код надо выложить по правилам.

Во-вторых, вы не написали, в чем проблема - считает неверно, показывает неправильно, вообще не работает, не компилируется?

 

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

А по коду, извиняюсь за выражение, "дрочу" его уже дня 4, вначале не комелировался, потом не выводил на дисплей информации, сейчас ни то, ни другое...

b707
Offline
Зарегистрирован: 26.05.2017

DrFix пишет:

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

А по коду, извиняюсь за выражение, "дрочу" его уже дня 4, вначале не комелировался, потом не выводил на дисплей информации, сейчас ни то, ни другое...

Тут нет возможности редактировать первый пост - поэтому выложите код еще раз, по правилам (это не придирка, так обсуждать код удобнее).

Насчет того, что не работает в коде - давайте поподробнее. Если не компилируется - выкладывайте копию сообщения об ошибки, если не работает - пишите, КАК ИМЕННО. Без вашей точной информации копаться в коде никто не станет.

 

DrFix
Offline
Зарегистрирован: 08.02.2018



#include "U8glib.h"
#include <SPI.h>                                  
#include <Wire.h>


U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов для вывода дисплея


int resist = 7; // Создание переменной lam - название, 2 - ножка пина

float Vout = 0;                    // Переменная для хранения значения напряжения в средней точки делителя (0-5.0)

float R2 = 0;                      // Переменная для хранения значения резистора R2



void setup() 
{
  u8g.setFont(u8g_font_6x10); // Выбор шрифта

  pinMode(resist, INPUT); //инициализация контакта

}
void loop() 
{
  
 Vout = (5.0 / 1023.0) * digitalWrite(resist); // Вычисляем напряжение в средней точки делителя (0-5.0)
 R2 = 15000 / ((5.0 / Vout) - 1); // Вычисляем сопротивление R2 (15000 это значение R1 15 кОм) 
  
}

  u8g.firstPage();
  
  do 
   {
     u8g.drawStr(20, 10, R2); // выведод cопротиаления

   }
   
  while(u8g.nextPage()); 

 

DrFix
Offline
Зарегистрирован: 08.02.2018

По ошибке

no known conversion for argument 3 from 'float' to 'const_FlashStringHelper*'

b707
Offline
Зарегистрирован: 26.05.2017

DrFix пишет:

По ошибке

no known conversion for argument 3 from 'float' to 'const_FlashStringHelper*'

На будущее всегда выкладывайте сообщения компилятора целиком. Он, к примеру, еще всегда указывает строку, в которой возникла ошибка. Но тут сразу видно, что ошибка возникает в строке 36.  Вы пытаетесь вывести значение типа float (R2) функцией, предназначенной для печати строк. - u8g.drawStr(20, 10, R2);  (она так и называется drawStr() - drawString)

Вам нужно сначала преобразовать float R2 в строку, для этого воспользуйтесь dtostrf() - найдите описание и почитайте.

Скетч после этого не заработает - там еще куча ошибок. Но исправте для начала эту.

DrFix
Offline
Зарегистрирован: 08.02.2018

Большое спасибо,что показали откуда копать. Сейчас буду пробовать =)

DrFix
Offline
Зарегистрирован: 08.02.2018

Стыдно выкладывать, но пробежался по примерам и вышло что-т о типа вот этого

 


#include "U8glib.h"
#include <SPI.h>                                  
#include <Wire.h>

U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов


int resist = 7; // Создание переменной lam - название, 2 - ножка пина
float Vout = 0;                    // Переменная для хранения значения напряжения в средней точки делителя (0-5.0)



float R2 = 0;                      // Переменная для хранения значения резистора R2
char myStr[20];  // текстовый массив






void setup() 
{
  Serial.begin(9600); // скорость 9600
  
  u8g.setFont(u8g_font_6x10); // Выбор шрифта

  pinMode(resist, INPUT); //инициализация контакта ОУТПУТ - в качестве выхода
}


void loop() 
{
  ///////////////////////////////////////////////////////////////////////////////////
  
    // подготовка буфера строки
  for (int i=0; i<20; i++) {myStr[i]=' ';}  // заполнение пробелами 
  myStr[18]='\r'; // возврат каретки 
  myStr[19]='\n'; // перевод строки

  // преобразование переменной float x в строку
  dtostrf(R2, 2, 3, myStr);
  
  Serial.write(myStr, 20);
  R2+= 0.01;  
  delay(500);  
  
  

  
  
  
  
  
 Vout = (5.0 / 1023.0) * digitalWrite(resist); // Вычисляем напряжение в средней точки делителя (0-5.0)
 R2 = 15000 / ((5.0 / Vout) - 1); // Вычисляем сопротивление R2 (15000 это значение R1 15 кОм) 
  

  u8g.firstPage();
  
  do 
   {

     u8g.drawStr(2, 27, R2); // выведет число 2015
   }
   
  while(u8g.nextPage()); 
}
Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Какого эффекта вы ожидаете от строки 54?

DrFix
Offline
Зарегистрирован: 08.02.2018

Често сказать, без понятия.

 Я нашел на ютубе видеоурок с исходником и пытаюсь его подстроить под свой дисплей. )))

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Вы умножаете на функцию записи.

Начните хотя бы с туториалов по языку на сайте )

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

DrFix пишет:

Често сказать, без понятия.

Прочитай, что делает функция digitalWrite() и подумай - а нужна ли она в строке 54? А может там другая функция нужна?

DrFix
Offline
Зарегистрирован: 08.02.2018

Время написания очень поджимает, по этому мудохаюсь с готовыми исходниками и переделываю их)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Это как колоть дрова тупым топором, потому что торопишься и не успеваешь наточить. 

DrFix
Offline
Зарегистрирован: 08.02.2018

Вы правы, DigitalRead

DrFix
Offline
Зарегистрирован: 08.02.2018

полностью согласен.9 лет назад занимался Delphi и Питоном, но уже все позабывал...

DrFix
Offline
Зарегистрирован: 08.02.2018

Ну впринципе все переделал и вот что получилось, но опять, ошибки, ошибки..

#include "U8glib.h"
#include <SPI.h>                                  
#include <Wire.h>

U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов


int resist = 7; // Создание переменной lam - название, 2 - ножка пина


float R2 = 0;                      // Переменная для хранения значения резистора R2
char myStr[20];  // текстовый массив






void setup() 
{
  Serial.begin(9600); // скорость 9600
  
  u8g.setFont(u8g_font_6x10); // Выбор шрифта

  pinMode(resist, INPUT); //инициализация контакта ОУТПУТ - в качестве выхода
}


void loop() 
{
  ///////////////////////////////////////////////////////////////////////////////////
  
    // подготовка буфера строки
  for (int i=0; i<20; i++) {myStr[i]=' ';}  // заполнение пробелами 
  myStr[18]='\r'; // возврат каретки 
  myStr[19]='\n'; // перевод строки

  // преобразование переменной float x в строку
  dtostrf(R2, 2, 3, myStr);
  
  Serial.write(myStr, 20);
  R2+= 0.01;  
  delay(500);  
  
  

  
  
  

  u8g.firstPage();
  
  do 
   {

     u8g.drawStr(2, 27, R2); // выведет число 2015
   }
   
  while(u8g.nextPage()); 
}

 

DrFix
Offline
Зарегистрирован: 08.02.2018

Ребят, тогда такой вопрос, мне нужно подключить к Ардуино 3 датчика NPC и иметь переменные с числами-сопротивлениями онных.

Кто и за сколько?)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

NTC? Термисторы?

bwn
Offline
Зарегистрирован: 25.08.2014

Yarik.Yar пишет:

Это как колоть дрова тупым топором, потому что торопишься и не успеваешь наточить. 

Та ладно, ты их когда последний раз колол (не на лучину для растопки)?)))) Его колуном зовут, там острота не нужна.))))

DrFix
Offline
Зарегистрирован: 08.02.2018

Именно

DrFix
Offline
Зарегистрирован: 08.02.2018

Используются в холодильном оборудовании. Даже в бытовых хол-ках.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

DrFix пишет:

Вы правы, DigitalRead

Нет, digitalRead может считывать только два состояния - 0 (0В) и 1 (5В). Промежуточные значения она не считывает, для этого есть analogRead(). И резистор должен быть подключен к аналоговому входу.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

bwn пишет:

Yarik.Yar пишет:

Это как колоть дрова тупым топором, потому что торопишься и не успеваешь наточить. 

Та ладно, ты их когда последний раз колол (не на лучину для растопки)?)))) Его колуном зовут, там острота не нужна.))))

Не придирайся))) возьмём для примера поход, куда колун по причине неподъёмности не берут)

 

DrFix
Offline
Зарегистрирован: 08.02.2018

т.е  на цифровые контакты не пойдет, нужно к аналоговым входам/выходам?

bwn
Offline
Зарегистрирован: 25.08.2014

Yarik.Yar пишет:

bwn пишет:

Yarik.Yar пишет:

Это как колоть дрова тупым топором, потому что торопишься и не успеваешь наточить. 

Та ладно, ты их когда последний раз колол (не на лучину для растопки)?)))) Его колуном зовут, там острота не нужна.))))

Не придирайся))) возьмём для примера поход, куда колун по причине неподъёмности не берут)

Опять не в цвет.))) Еще как берут и бензопилу в придачу, правда в багажнике. Давно уже не был.((((

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Поход это когда пешком с рюкзаками ) остальное уже не то)

Но от оффтопа к делу. ТС, если ну никак не справитесь, создавайте тему в "Ищу исполнителя". 

bwn
Offline
Зарегистрирован: 25.08.2014

DrFix пишет:

т.е  на цифровые контакты не пойдет, нужно к аналоговым входам/выходам?

В принципе не обязательно, если рассчитаете делитель так, чтобы в нужный момент давало единицу или ноль, то можно и на цифровой. Хотя это уже полное извращение.))))

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

DrFix пишет:

т.е  на цифровые контакты не пойдет,

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

DrFix пишет:

нужно к аналоговым входам/выходам?

Только к аналоговым входам, они подключены к АЦП.

Аналоговые выходы это совсем другое, там выход ШИМ.

 

bwn
Offline
Зарегистрирован: 25.08.2014

DrFix, я вот только не очень понимаю цель измерения сопротивления, вы ведь не омметр делаете. Чем кривая напряжения на выходе не устраивает? У нее прямая зависимость от соотношения делителя.

b707
Offline
Зарегистрирован: 26.05.2017

DrFix пишет:

Ну впринципе все переделал и вот что получилось, но опять, ошибки, ошибки..

что вы переделали? Переменную R2 типа Float так и продолжаете через функцию строки выводить? Добавили кучу бесполезного кода с 33 по 43 строку, а даже эту первую задачу не решили... Измерение сопротивления из кода вообще пропало, расчет делителя тоже... Что это за фигня у вас получилась?

DrFix - какое может быть "сроки поджимают" с таким кодом? Кому подобная галиматья нужна?

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

DrFix
Offline
Зарегистрирован: 08.02.2018

Да заказал уже человеку.

Остановился на вот таком коде)

#include "U8glib.h"
U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов


int analogPin = 0;                 // Анлоговый вход для считывания напряжения с делителя напряжения
float Vout = 0;                    // Переменная для хранения значения напряжения в средней точки делителя (0-5.0)

float R2 = 0;                      // Переменная для хранения значения резистора R2




void setup() {
  u8g.setFont(u8g_font_6x10); // Выбор шрифта


А сроки жмут - потому что через4 дня уезжаю, а хотелось бы закончить, то что начал)
}

void loop() {

 Vout = (5.0 / 1023.0) * analogRead(analogPin); // Вычисляем напряжение в средней точки делителя (0-5.0)
 R2 = 15000 / ((5.0 / Vout) - 1); // Вычисляем сопротивление R2 (15000 это значение R1 15 кОм) 




u8g.firstPage();  
  do {
     u8g.setPrintPos(40, 20);
     u8g.print(R2);
     delay(1000);
         
     
  } while( u8g.nextPage() );



                                                               
}

 

DrFix
Offline
Зарегистрирован: 08.02.2018

А сроки жмут потому что уезжаю.

Хотелось бы закончить все до отьезда)

А по поводу термометров - я не их хочу сделать)