Ошибка компиляции
- Войдите на сайт для отправки комментариев
Чт, 14/06/2018 - 15:14
В чём ошибка?
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)
}
Вот Вы пришли на форум, ну хоть немного почитайте его! Неужели Вы не видели, как должен выглядеть код в сообщениях?
Читайте: Вставка программного кода в тему/комментарий
А по теме, an - это у Вас функция, которая ничего не возвращает, как Вы её напечатать собрались? (в самом конце скетча) Возможно Вам её в этом месте просто вызвать нужно? Она сама по себе что-то печатает.
Я пришел только для 1 вопроса и не собираюсь пускать здесь корни. Я не совсем понял ваш ответ если не сложно расскажите по подробнее.
#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 (ые) }Это через какой переводчик у Вас текст прогнался? "Байтное сердце" - это нечто! :)
А номера строк нужны, чтобы в обсуждении на них сослаться можно было. У Вас компилятор ругается фактически на строку 110. Что она по-вашему должна сделать, что напечатать на экран? Подозреваю, что вместо неё должен быть вызов функции an, т.е.:
an();
Я пришел только для 1 вопроса и не собираюсь пускать здесь корни.
Пожалуйста давайте не об этом я знаю что какой то новичек, который не соблюдает правила вас раздражает, но я проосто не вижу смысла ставить вставку *CODE*. И давайте закончим на этом, тем более я ниже кинул код. Если вы не можете помочь, то зачем вообще сюда писать? Я сюда пришел за помощью, а не за выяснением правил и т.п.
И давайте закончим на этом, тем более я ниже кинул код. Если вы не можете помочь, то зачем вообще сюда писать? Я сюда пришел за помощью, а не за выяснением правил и т.п.
trevel. внимательно посмотрите на код, который вы вставили. У вас там половина операторов почему-то перевелась на русский. С таким кодом работать невозможно. Пожалуйста, вставьте правильный скетч.
А если не хотите соблюдать правила форума - то да, вам лучше на этом закончить и сюда больше не писать.
У меня гугл перевел и поэтому код так выглядит.
Я уверен что я сделал где то здесь ошибку, но не знаю где.
voidan ()080{081lcd.setCursor (1,3);082lcd.print ("Co2:");// вывод аналогового значения в последовательный порт083lcd.print (analogValue);084delay (1);085086}087088voidloop()// цикл цикла089090{091092093094095096097// 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);109110lcd.print (an)111112113114}Я думаю что lcd.print (an)
Должен вывести void an()
нет, это пи@дец !
и нервов моих дальше на это смотреть не хватает.
110 строка должна выглядеть так
еще в #4 посту сказали.
У меня гугл перевел и поэтому код так выглядит.
не надо оправданий, просто перевыложите код
Я думаю что lcd.print (an)
Должен вывести void an()
это, простите, абсолютная чушь.
an() - это функция. Что именно вы хотите увидеть на экране? Во всяком случае, компилятор не знает, что вы хотите, о чем вам в ошибке и говорят - lcd.print() не умеет выводить на экран функции.
Я хочу увидеть an
Ну простите я не бог в программировании и поэтому я пришел сюда за ответом, а не за том чтобы мне говорили что я не знаю как сделать. Но за ответ спасибо.
Спасибо за ответ.
Что бы увидеть an нужно выполнить оператор lcd.print ("an").
void an() увидеть нельзя. Этих букв не существует в программе после компиляции. Можно увидеть адрес пямяти начала подпрограммы void an(); c помощью оператора &.
А можно попроще?
Попроще: "void an() увидеть нельзя"
Ну простите я не бог в программировании и поэтому я пришел сюда за ответом, а не за том чтобы мне говорили что я не знаю как сделать.
Вам уже несколько раз прямым текстом сказали, как надо делать. Но вы все равно просите "попроще". Куда уж проще.
Поймите, 5-летнему ребенку невозможно обьяснить интегралы. Видимо, и вы пока настолько "не бог в программировании", что даже чтобы понять готовый ответ, вам нужно еще учиться.
Ну простите я не бог в программировании и поэтому я пришел сюда за ответом, а не за том чтобы мне говорили что я не знаю как сделать.
Вам уже несколько раз прямым текстом сказали, как надо делать. Но вы все равно просите "попроще". Куда уж проще.
Поймите, 5-летнему ребенку невозможно обьяснить интегралы. Видимо, и вы пока настолько "не бог в программировании", что даже чтобы понять готовый ответ, вам нужно еще учиться.
Я поблагодарил людей выше и понял свою ошибку, почитайте сверху и поймете.