обьясните дураку о функции которая ничего не возвращает?!

Vladon
Offline
Зарегистрирован: 16.11.2020

Прошу помощи, как заставить это работать?

#include <OneWire.h>
OneWire ds(5);
float temperature;
byte data[2];


void setup() {
 Serial.begin(9600); // put your setup code here, to run once:

}

void temp()
{
  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);
  delay(1000);
  ds.reset();
  ds.write(0xCC);
  ds.write(0xBE);
  data[0] = ds.read();
  data[1] = ds.read();
float temperature =  ((data[1] << 8) | data[0]) * 0.0625;
}

void loop() 
{
Serial.println(temperature); delay(1000);
}

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Код кривой на редкость. У тебя создается глобальная переменная temperature в которую void temp() пытается записать значение. Это как гланды через анус удалять. Проще сделать возвращаемое значение в типе float

UPD: да и оно вообще работать не должно, у тебя в функции локальная float с тем же именем объявляется))

mixail844
Offline
Зарегистрирован: 30.04.2012
да наверное какая то бракованная ардуина попалась, вот и не работает.
 
а на самом деле , ребята, давайте вместе поможем Vladon'y понять когда вызываеться функция temp() ? 
*область видимости вышла из чата*
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Для начала неплохо бы сформулировать, что в Вашем понимании означает "работать".

Вы, кстати, в курсе, что у Вас две переменные, носящие имя temperature: в 3-й и в 24-й строках?

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

mixail844 пишет:

когда вызываеться функция temp() ? 

До этого вопроса еще очередь не дошла))

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

это история не про "функцию, которая ничего не возвращает", а о "бесполезной функции, которая нигде в программе не используется"

GarryC
Offline
Зарегистрирован: 08.08.2016

Зеленый светодиод горит? Горит. Значит, программа работает.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Зато с частотой 1 Гц с порт выводится случайный мусор

mixail844
Offline
Зарегистрирован: 30.04.2012

andriano пишет:

Для начала неплохо бы сформулировать, что в Вашем понимании означает "работать".

ну как учили : Работа  = Сила х Путь . Ардуина лежит неподвижно на столе ,значит путь равен 0 , вот и не работает ничего

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Vladon пишет:

 

 

На мой любительский взгляд, рецепт видится таким: 

1. убрать строку 3

2. в функции temp() вместо возвращаемого void указать float. 

3. В функции сделать return (что там в расчетах локального temperature)

4. в лупе в сериалпринт выводить temp()

5. тут должен быть PROFIT

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

Rumata пишет:

На мой любительский взгляд, рецепт видится таким:

рецептов тут много...

Vladon
Offline
Зарегистрирован: 16.11.2020

есть обычный код с инета,  мне надо чтобы с этого датчика значение float temperature;  записывалось в сим800, типа удаленный температурный датчик.

#include <OneWire.h>
/*
* Описание взаимодействия с цифровым датчиком ds18b20 
* Подключение ds18b20 к ардуино через пин 8  
*/
OneWire ds(5); // Создаем объект OneWire для шины 1-Wire, с помощью которого будет осуществляться работа с датчиком

void setup(){
  Serial.begin(9600);
}

void loop(){
  // Определяем температуру от датчика DS18b20
  byte data[2]; // Место для значения температуры
  
  ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
  ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство 
  ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
  
  delay(1000); // Микросхема измеряет температуру, а мы ждем.  
  
  ds.reset(); // Теперь готовимся получить значение измеренной температуры
  ds.write(0xCC); 
  ds.write(0xBE); // Просим передать нам значение регистров со значением температуры

  // Получаем и считываем ответ
  data[0] = ds.read(); // Читаем младший байт значения температуры
  data[1] = ds.read(); // А теперь старший

  // Формируем итоговое значение: 
  //    - сперва "склеиваем" значение, 
  //    - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625)
  float temperature =  ((data[1] << 8) | data[0]) * 0.0625;
  
  // Выводим полученное значение температуры в монитор порта
  Serial.println(temperature);
   
}

 

 

 

информацию с датчика надо вставить сюда     mySerial.println(temperature);

void SendStat() 
{
  detachInterrupt(digitalPinToInterrupt(0)); // turn off external interrupt
   digitalWrite(13, HIGH);  

  if (!forceSend){
  notsunset=0;
 for (int i=0; i <= 250; i++){
      if ( !digitalRead(2) ){ notsunset++; } //is a really sunset now? you shure?
      delay(360);
   }
  }
  if ( notsunset==0 || forceSend )
  { 

  raw01=raw02;
  raw11=raw12;
  raw21=raw22;
  raw02=scale0.get_units(16); //read data from scales
//  raw12=scale1.get_units(16);
//  raw22=scale2.get_units(16);

  daynum++; 
  delta00=(raw02-raw00)/calibrate0; // calculate weight changes 
  delta01=(raw02-raw01)/calibrate0;
  
  readVcc(); 
  delay(200);
  mySerial.println("AT+CMGF=1");    //  Part of SMS sending 
  delay(2000);
  mySerial.print("AT+CMGS=\"");
  mySerial.print(phone_no); 
  mySerial.write(0x22);
  mySerial.write(0x0D);  // hex equivalent of Carraige return    
  mySerial.write(0x0A);  // hex equivalent of newline
  delay(2000);
  mySerial.print("Turn ");
  mySerial.println(daynum);
  mySerial.print("Hive1  ");
  mySerial.print(delta01);
  mySerial.print("   ");
  mySerial.println(delta00);
  mySerial.println(temperature);

  mySerial.print("Battery capacity is ");
  mySerial.print(ch1);
  mySerial.print(ch2);
  mySerial.print(ch3);
  mySerial.print(ch4);
  mySerial.println(" %");
  if (forceSend) {mySerial.print("Forced SMS");}
  mySerial.println (char(26));//the ASCII code of the ctrl+z is 26
  delay(3000);

 

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

Vladon пишет:

информацию с датчика надо вставить сюда     mySerial.println(temperature);

э. полегче на поворотах...

кому надо? Тебе надо - ты и вставляй. Мы можем подсказать как, но дописывать код за тебя никто не будет.

какие все быстрые...

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

А в армию не думал сходить, вместо всей этой трихомудии?

Vladon
Offline
Зарегистрирован: 16.11.2020

я хочу чтобы мне оьбяснили как это сделать

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Vladon пишет:

я хочу чтобы мне оьбяснили как это сделать

Ща, Дет проснется, объяснит))

Vladon
Offline
Зарегистрирован: 16.11.2020

как заставить эту переменную  float temperature; отдавать мне значения в разные куски кода

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

Rumata пишет:

А в армию не думал сходить, вместо всей этой трихомудии?

не, это не студент, это "пчеловод". но это еще хуже :)

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

Vladon пишет:

как заставить эту переменную  float temperature; отдавать мне значения в разные куски кода

почитать учебник по С++, раздел функции

Vladon
Offline
Зарегистрирован: 16.11.2020

Спасибо, однако.

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

Rumata пишет:

Ща, Дет проснется, объяснит))

эт прям в точку :) прошлая дискуссия ТС закончилась тем. что он Деда наХ послал

Vladon
Offline
Зарегистрирован: 16.11.2020

вы тока тролить умеете...

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

вот тут немного и все по русски, просвещайся

https://ravesli.com/urok-12-funktsii-i-return/

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

Vladon пишет:

вы тока тролить умеете...

не угадал, мы много что умеем

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

Vladon - до того как ты начал хамить - тебе дали массу советов. в том числе в #9 прям-таки пошаговый рецепт. как поправить проблему. Попробуй включить мозг.

Vladon
Offline
Зарегистрирован: 16.11.2020

Ясно, сам розберусь

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Vladon пишет:

как заставить эту переменную  float temperature; отдавать мне значения в разные куски кода

Откройте любой учебник по С++ и ознакомьтесь с главой "область видимости переменных". Если после ВНИМАТЕЛЬНОГО изучения материала останутся вопросы, тут ответят почти без сарказма и глума. Если кратко, вы создаете ДВЕ абсолютно РАЗНЫХ переменных, и пытаетесь из них сложить слово СЧАТЬЕ 

Vladon
Offline
Зарегистрирован: 16.11.2020

сейчас ознакомлюсь

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

Vladon пишет:

Ясно, сам розберусь

серьезно, обрати внимание на ответ 9

И ссылки на учебник тоже посмотри.

Vladon
Offline
Зарегистрирован: 16.11.2020

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

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Vladon пишет:

если выводить темп оно и так пашет

Ага, и что показывает? ))

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

Vladon, не начинай снова. Вроде закончили по хорошему?

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

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Vladon пишет:

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

Изучи раздел учебника про область видимости, а потом ответь себе на вопрос - что делает слово float в строке 24?

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Vladon пишет:

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

Возьми паузу в срачах на этом форуме, почитай Шилдта или тут: https://ravesli.com/uroki-cpp/

Но не спеши это сделать за неделю

sadman41
Offline
Зарегистрирован: 19.10.2016

Мне вот всегда интересно было : почему значение переменной должно записываться в модем, сетевой чип и пр. Почему не сразу в смс на телефоне или в файл на компьютере?

Vladon
Offline
Зарегистрирован: 16.11.2020

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

все тему закрывайте.

 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Эх, в одном шаге от решения...

Vladon
Offline
Зарегистрирован: 16.11.2020

так я ж не програмист. Никто ж не признается говорят книгу читай)

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

И всё же , если передумаешь,  посмотри #26 . Да и в других постах тоже полезная информация

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Vladon пишет:

так я ж не програмист. 

А что вы потеряли на форуме программистов? Ваш раздел - платные услуги. Раздел "песочница" для начинающих программистов-любителей, как я. Если не хотите быть программистом - goto в заказчики в платном разделе

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Vladon пишет:

так я ж не програмист...

вот бы Вань но твой бы Ян дураку бы моему   (с) Т.Шаов

TeodorNetto
TeodorNetto аватар
Offline
Зарегистрирован: 03.06.2021

b707 пишет:

прошлая дискуссия ТС закончилась тем. что он Деда наХ послал

И правильно сделал

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

TeodorNetto пишет:

И правильно сделал

Ты зарегистрировался чтобы эту хрень написать?))) Еще, небось, ник себе долго придумывал)))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Мои 5 копеек:

Функция, которая ничего не возвращает, называется просто - процедура ))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

BOOM пишет:

Мои 5 копеек:

Функция, которая ничего не возвращает, называется просто - процедура ))


Только не в С++ )) Тут процедур нету, только функции

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

TeodorNetto пишет:

И правильно сделал

Чойта?

TeodorNetto
TeodorNetto аватар
Offline
Зарегистрирован: 03.06.2021

Потому что я почитал от Вас никогда никакой помощи только издевательство над новичками 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Бывает...  Иногда я чуствую себя карекционным педагогом, иногда нет.  Даже, я бы сказал, бОльшую часть времени - нет. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

TeodorNetto пишет:

Потому что я почитал от Вас никогда никакой помощи только издевательство над новичками 

Большинство новичков обладают настолько низким уровнем, что просто не способны не только воспользоваться той помощью, которую им оказывают, но даже заметить ее. Поэтому упорно считают, что им "не помогают" или "помогают неправильно".

Vladon
Offline
Зарегистрирован: 16.11.2020

Я все равно, сделал что от меня полагалось и впиндюрил два датчика, это ещё лучше)))) так что читайте морали дальше, от зла на вас интерес что то делать появляется, не знал что программисты такого высокого мнения о себе...
Да помощи от Вас я так понял не дождемся, патамушта тут диванные екперты походу собрались.
Розкажу историю: я с 2006 года сижу на форумах, что то у людей спрашиваю, вот одни из тех: гитразм.ру, радиокот, схем.нет, 4пда, фольцвагенклуб....и подобные, по сегодняшний день там что то пишу, то такого жёсткого отношения к новичкам я не встречал. Кстати я не пчеловод, я инженер по ремонту радиоаппаратуры, хотя работаю в СЦ и восстанавливаю цифровую технику.

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

Vladon - ты меня прости. но я удивляюсь. как тебе доверяют ремонт аппаратуры... хотя если ремонт - это прикручивание оторванных ручек к чемоданам с техникой - то может ты и справляешься.

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