Ошибка компиляции

trevel
Offline
Зарегистрирован: 14.06.2018

В чём ошибка?
 

Arduino: 1.8.5 (Windows 7), Плата:"Arduino Nano, ATmega328P"
 
C:\Users\семья\Desktop\термометр Arduino\i2c\HelloWorld\HelloWorld.ino: In function 'void loop()':
 
HelloWorld:110: error: call of overloaded 'print(void (&)())' is ambiguous
 
C:\Users\семья\Desktop\термометр Arduino\i2c\HelloWorld\HelloWorld.ino:110:15: note: candidates are:
 
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
 
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
 
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:232,
 
                 from sketch\HelloWorld.ino.cpp:1:
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:68:12: note: size_t Print::print(char) <near match>
 
     size_t print(char);
 
            ^
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:68:12: note:   no known conversion for argument 1 from 'void()' to 'char'
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:69:12: note: size_t Print::print(unsigned char, int) <near match>
 
     size_t print(unsigned char, int = DEC);
 
            ^
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:69:12: note:   no known conversion for argument 1 from 'void()' to 'unsigned char'
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:70:12: note: size_t Print::print(int, int) <near match>
 
     size_t print(int, int = DEC);
 
            ^
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:70:12: note:   no known conversion for argument 1 from 'void()' to 'int'
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:71:12: note: size_t Print::print(unsigned int, int) <near match>
 
     size_t print(unsigned int, int = DEC);
 
            ^
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:71:12: note:   no known conversion for argument 1 from 'void()' to 'unsigned int'
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:72:12: note: size_t Print::print(long int, int) <near match>
 
     size_t print(long, int = DEC);
 
            ^
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:72:12: note:   no known conversion for argument 1 from 'void()' to 'long int'
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:73:12: note: size_t Print::print(long unsigned int, int) <near match>
 
     size_t print(unsigned long, int = DEC);
 
            ^
 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:73:12: note:   no known conversion for argument 1 from 'void()' to 'long unsigned int'
 
exit status 1
call of overloaded 'print(void (&)())' is ambiguous
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

Скетч

#include <Wire.h> // библиотека для управления устройствами по I2C 
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino
//#define digitalPin 3 // цифровой выход подключен к пину 3
//#include "DHT.h"
 
//#define DHTPIN 3  
//#define DHTTYPE DHT11   // DHT 11
float analogValue; // для аналогового значения
byte digitalValue; // для цифрового значения, можно, кстати и boolean, но не суть
 
 
LiquidCrystal_I2C lcd(0x3F,20,4); // присваиваем имя lcd для дисплея 20х2
 
// создаем символ сердца и четырех букв на кириллице
 
byte heart[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 };
 
byte Ia[8]= { 0b01111, 0b10001, 0b10001, 0b01111, 0b00101, 0b01001, 0b10001, 0b00000 };
byte B[8] = { 0b11111, 0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b11110, 0b00000 };
byte N[8] = { 0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b10001, 0b00000 };
byte F[8] = { 0b01110, 0b10101, 0b10101, 0b10101, 0b01110, 0b00100, 0b00100, 0b00000 };
byte U[8] = { 0b10001, 0b10001, 0b01010, 0b01110, 0b00100, 0b00100, 0b01000, 0b10000 };
byte L[8] = { 0b00011, 0b00101, 0b00101, 0b01001, 0b01001, 0b01001, 0b01001, 0b10001 };
byte I[8] = { 0b10001, 0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b10001 };
byte C[8] = { 0b10010, 0b10010, 0b10010, 0b10010, 0b10010, 0b10010, 0b11111, 0b00001 };
byte D[8] = { 0b00011, 0b00101, 0b00101, 0b00101, 0b01001, 0b11111, 0b10001, 0b10001 };
 
void setup() // процедура setup
 
{
  pinMode(analogPin, INPUT); // режим работы аналогового пина
//pinMode(digitalPin, INPUT); // режим работы цифрового пина
delay(1000); // устаканимся
 
  lcd.init(); // инициализация LCD дисплея
  lcd.backlight(); // включение подсветки дисплея
 
// присваиваем символам порядковый номер
 
  lcd.createChar(1, heart);
  lcd.createChar(2, Ia);
  lcd.createChar(3, B);
  lcd.createChar(4, N);
  lcd.createChar(5, F);
  lcd.createChar(6, U);
  lcd.createChar(7, L);
  lcd.createChar(8, I);
  lcd.createChar(9, C);
  lcd.createChar(10,D);
  
  
   analogValue = analogRead(analogPin); // чтение аналогового значения
//  digitalValue = digitalRead(3); // чтение цифрового значения
 
  
  lcd.setCursor(0,0); // устанавливаем курсор на начало второй строки
  lcd.print(char(6));
  lcd.print(char(7));
  lcd.print(char(8));
  lcd.print(char(9));
  lcd.print("A");
  lcd.setCursor(0,2); // устанавливаем курсор на 2 символ первой строки
  lcd.print(char(10));
  lcd.print("O");
  lcd.print("M");
  lcd.setCursor(6,0);
  lcd.print("T 22,22c");
  lcd.setCursor(15,0);
  lcd.print("H 99%");
  lcd.setCursor(2,1);
  lcd.print("P 777mm");
 
//  dht.begin();
  
  delay(1);
}
 
void an()
{
  lcd.setCursor(1,3);
  lcd.print("Co2: "); // вывод аналогового значения в последовательный порт
  lcd.print(analogValue);
  delay(1);
 
}
 
void loop() // процедура loop
 
{
 
 
  
 
 
 
 // float h = dht.readHumidity();
 // float t = dht.readTemperature();
 // float f = dht.readTemperature(true);
//  float hif = dht.computeHeatIndex(f, h);
 // float hic = dht.computeHeatIndex(t, h, false);
 //  lcd.setCursor(6,2);
 // lcd.print("Humidity: ");
 // lcd.print(h);
 // lcd.print(" %\t");
 // lcd.setCursor(15,2);
 // lcd.print("Temperature: ");
  //lcd.print(t);
  
  lcd.print(an)
  
  
 
}
 

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

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

Читайте: Вставка программного кода в тему/комментарий

А по теме, an - это у Вас функция, которая ничего не возвращает, как Вы её напечатать собрались? (в самом конце скетча) Возможно Вам её в этом месте просто вызвать нужно? Она сама по себе что-то печатает.

trevel
Offline
Зарегистрирован: 14.06.2018

Я пришел только для 1 вопроса и не собираюсь пускать здесь корни. Я не совсем понял ваш ответ если не сложно расскажите по подробнее.

trevel
Offline
Зарегистрирован: 14.06.2018
#include <Wire.h> // библиотека для управления оборудованием по I2C 
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino
// # define digitalPin 3 // цифровой выход подключен к пину 3
// # включить "DHT.h"
 
// # define DHTPIN 3  
// # define DHTTYPE DHT11 // DHT 11
float analogValue; // для аналогового значения
байт digitalValue; // для цифровых значений, можно, кстати и boolean, но не суть
 
 
LiquidCrystal_I2C lcd (0x3F, 20,4); // присваиваем имя lcd для дисплея 20х2
 
// создаем символ сердца и четырех букв на кириллице
 
байтное сердце [8] = {0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000};
 
байт Ia [8] = {0b01111, 0b10001, 0b10001, 0b01111, 0b00101, 0b01001, 0b10001, 0b00000};
байт B [8] = {0b11111, 0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b11110, 0b00000};
байт N [8] = {0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b10001, 0b00000};
байт F [8] = {0b01110, 0b10101, 0b10101, 0b10101, 0b01110, 0b00100, 0b00100, 0b00000};
байт U [8] = {0b10001, 0b10001, 0b01010, 0b01110, 0b00100, 0b00100, 0b01000, 0b10000};
байт L [8] = {0b00011, 0b00101, 0b00101, 0b01001, 0b01001, 0b01001, 0b01001, 0b10001};
байт I [8] = {0b10001, 0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b10001};
байт C [8] = {0b10010, 0b10010, 0b10010, 0b10010, 0b10010, 0b10010, 0b11111, 0b00001};
байт D [8] = {0b00011, 0b00101, 0b00101, 0b00101, 0b01001, 0b11111, 0b10001, 0b10001};
 
void setup () // настройка параметров
 
{
  pinMode (analogPin, INPUT); // режим работы аналогового пина
// pinMode (digitalPin, INPUT); // режим работы цифрового пина
Задержка (1000); // устаканимся
 
  lcd.init (); // инициализация ЖК-дисплея
  lcd.backlight (); // включение подсветки дисплея
 
// присваиваем символам порядковый номер
 
  lcd.createChar (1, сердце);
  lcd.createChar (2, Ia);
  lcd.createChar (3, B);
  lcd.createChar (4, N);
  lcd.createChar (5, F);
  lcd.createChar (6, U);
  lcd.createChar (7, L);
  lcd.createChar (8, I);
  lcd.createChar (9, C);
  lcd.createChar (10, D);
  
  
   analogValue = analogRead (analogPin); // чтение аналогового значения
// digitalValue = digitalRead (3); // чтение цифрового значения
 
  
  lcd.setCursor (0,0); // устанавливаем курсор на начало второй строки
  lcd.print (символ (6));
  lcd.print (символ (7));
  lcd.print (символ (8));
  lcd.print (символ (9));
  lcd.print ( "А");
  lcd.setCursor (0,2); // устанавливаем курсор на 2 символ первой строки
  lcd.print (символ (10));
  lcd.print ( "О");
  lcd.print ( "М");
  lcd.setCursor (6,0);
  lcd.print ("T 22,22c");
  lcd.setCursor (15,0);
  lcd.print ("H 99%");
  lcd.setCursor (2,1);
  lcd.print ("P 777mm");
 
// dht.begin ();
  
  задержка (1);
}
 
void an ()
{
  lcd.setCursor (1,3);
  lcd.print ("Co2:"); // вывод аналогового значения в последовательный порт
  lcd.print (analogValue);
  задержка (1);
 
}
 
void loop () // цикл цикла
 
{
 
 
  
 
 
 
 // float h = dht.readHumidity ();
 // float t = dht.readTemperature ();
 // float f = dht.readTemperature (true);
// float hif = dht.computeHeatIndex (f, h);
 // float hic = dht.computeHeatIndex (t, h, false);
 // lcd.setCursor (6,2);
 // lcd.print («Влажность:»);
 // lcd.print (h);
 // lcd.print ("% \ t");
 // lcd.setCursor (15,2);
 // lcd.print («Температура:»);
  //lcd.print(t);
  
  lcd.print (ые)
  
  
 
}
 
 

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Это через какой переводчик у Вас текст прогнался? "Байтное сердце" - это нечто! :)

А номера строк нужны, чтобы в обсуждении на них сослаться можно было. У Вас компилятор ругается фактически на строку 110. Что она по-вашему должна сделать, что напечатать на экран? Подозреваю, что вместо неё должен быть вызов функции an, т.е.:

an();

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

trevel пишет:

Я пришел только для 1 вопроса и не собираюсь пускать здесь корни.

Это не дает Вам основания пренебрегать правилами форума.

trevel
Offline
Зарегистрирован: 14.06.2018

Пожалуйста давайте не об этом я знаю что какой то новичек, который не соблюдает правила вас раздражает, но я проосто не вижу смысла ставить вставку *CODE*. И давайте закончим на этом, тем более я ниже кинул код. Если вы не можете помочь, то зачем вообще сюда писать? Я сюда пришел за помощью, а не за выяснением правил и т.п.

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

trevel пишет:

И давайте закончим на этом, тем более я ниже кинул код. Если вы не можете помочь, то зачем вообще сюда писать? Я сюда пришел за помощью, а не за выяснением правил и т.п.

trevel. внимательно посмотрите на код, который вы вставили. У вас там половина операторов почему-то перевелась на русский. С таким кодом работать невозможно. Пожалуйста, вставьте правильный скетч.

А если не хотите соблюдать правила форума - то да, вам лучше на этом закончить  и сюда больше не писать.

trevel
Offline
Зарегистрирован: 14.06.2018

У меня гугл перевел и поэтому код так выглядит.

trevel
Offline
Зарегистрирован: 14.06.2018

Я уверен что я сделал где то здесь ошибку, но не знаю где.

void an ()

080 {
081   lcd.setCursor (1,3);
082   lcd.print ("Co2:"); // вывод аналогового значения в последовательный порт
083   lcd.print (analogValue);
084   delay (1);
085  
086 }
087  
088 void loop () // цикл цикла
089  
090 {
091  
092  
093   
094  
095  
096  
097  // float h = dht.readHumidity ();
098  // float t = dht.readTemperature ();
099  // float f = dht.readTemperature (true);
100 // float hif = dht.computeHeatIndex (f, h);
101  // float hic = dht.computeHeatIndex (t, h, false);
102  // lcd.setCursor (6,2);
103  // lcd.print («Влажность:»);
104  // lcd.print (h);
105  // lcd.print ("% \ t");
106  // lcd.setCursor (15,2);
107  // lcd.print («Температура:»);
108   //lcd.print(t);
109   
110   lcd.print (an)
111   
112   
113  
114 }

 

trevel
Offline
Зарегистрирован: 14.06.2018

Я думаю что lcd.print (an)
Должен вывести void an()

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

нет, это пи@дец !

и нервов моих дальше на это смотреть не хватает.

110 строка должна выглядеть так

an();

еще в #4 посту сказали.

 

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

trevel пишет:

У меня гугл перевел и поэтому код так выглядит.

не надо оправданий, просто перевыложите код

trevel пишет:

Я думаю что lcd.print (an)
Должен вывести void an()

это, простите, абсолютная чушь. 

an() - это  функция. Что именно вы хотите увидеть на экране? Во всяком случае, компилятор не знает, что вы хотите, о чем вам в ошибке и говорят - lcd.print() не умеет выводить на экран функции.

trevel
Offline
Зарегистрирован: 14.06.2018

Я хочу увидеть an

trevel
Offline
Зарегистрирован: 14.06.2018

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

trevel
Offline
Зарегистрирован: 14.06.2018

Спасибо за ответ.

nik182
Offline
Зарегистрирован: 04.05.2015

Что бы увидеть an нужно выполнить оператор lcd.print ("an").

void an() увидеть нельзя. Этих букв не существует в программе после компиляции. Можно увидеть адрес пямяти начала подпрограммы void an(); c помощью оператора  &.

trevel
Offline
Зарегистрирован: 14.06.2018

А можно попроще?

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

Попроще: "void an() увидеть нельзя"

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

trevel пишет:

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

Вам уже несколько раз прямым текстом сказали, как надо делать. Но вы все равно просите "попроще". Куда уж проще.

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

 

trevel
Offline
Зарегистрирован: 14.06.2018

b707 пишет:

trevel пишет:

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

Вам уже несколько раз прямым текстом сказали, как надо делать. Но вы все равно просите "попроще". Куда уж проще.

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

 

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