ПОМОГИТЕ!!! не знаю где ошибки
- Войдите на сайт для отправки комментариев
Чт, 24/11/2016 - 21:10
Здрасвуйте, выдает ошибку
AMERICA:21: error: 'NONE_D4' was not declared in this scope
AMERICA:21: error: expected `}' before numeric constant
AMERICA:21: error: expected ',' or ';' before numeric constant
AMERICA:27: error: expected declaration before '}' token
не знаю как боротьса(буква йа не работает).
Помогите пожалуйста!!
*/
#include "pitches.h"
// notes in the melody:
int melody[] = {NOTE_F4, NONE_D4, NOTE_C3, NOTE_D4 NOTE_C4, NOTE_F4, NOTE_D3, NOTE_H3, NOTE_D4, NOTE_D6, NOTE_C6, NOTE_D4, NOTE_H4 ,NOTE_D4, NOTE_E4, NOTE_F3, NOTE_F7, NOTE_F7, NOTE_F4,
NOTE_D7, NONE_F4, NOTE_C7, NOTE_F4, NOTE_H4, NOTE_F3, NOTE_A3, NOTE_G4, NOTE_A4, NOTE_F3, NOTE_H4, NOTE_H4, NONE_F4, NOTE_D6, NOTE_C3, NOTE_F4, NOTE_D3, NOTE_C4, NOTE_D5, NOTE_C3, NOTE_F4,
NOTE_D3, NOTE_H3, NOTE_D4, NOTE_C7, NOTE_H4, NOTE_D4, NOTE_H3, NOTE_D4, NOTE_E5, NOTE_F3, NOTE_F7, NOTE_F7, NOTE_F4, NOTE_D8, NOTE_F4, NOTE_C7, NOTE_F5, NOTE_H4, NOTE_F3, NOTE_G6, NOTE_G4,
NOTE_A4, NOTE_F4, NOTE_H4, NOTE_H3, NOTE_F3, NOTE_D1, NOTE_C4, NOTE_C7, NOTE_C1, NOTE_A4, NOTE_C1, NOTE_H3, NOTE_C1, NOTE_C8, NOTE_G9, NOTE_G3, NOGE_C8, NOTE_C8, NOTE_F7, NOTE_H6, NOTE_C7,
NOTE_A4, NOTE_H5, NOTE_H7, NOTE_B6, NOTE_F7, NOTE_C7, NOTE_D8, NOTE_F4, NOTE_D7, NOTE_B6, NOTE_D7, NOTE_F4, NOTE_C7, NOTE_F4, NOTE_H4, NOTE_F3, NOTE_F7, NOTE_D4, NOTE_B6, NOTE_C7, NOTE_G4,
NOTE_C7, NOTE_F3, NOTE_F4, NOTE_F3, NOTE_B6, NOTE_C7, NOTE_B6, NOTE_A5, NOTE_E6, NOTE_E5, NOTE_G7, NOTE_G4, NOTE_E8, NOTE_D7, NOTE_C6, NOTE_C5, NOTE_B6, NOTE_F4, NOTE_F7, NOTE_F4, NOTE_B6,
NOTE_C7, NOTE_D8, NOTE_E9, NOTE_F8, NOTE_C7, NOTE_D7, NOTE_B6, NOTE_B8, NOTE_F7, NOTE_B6};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {4,4, 2,4,4,4,4,5,6,7,4,5,5, 4,4, 4,4, 6,4, 6,8,4,4, 7,4, 5,3,4,8,5,4,5,4,5,6,5,4,4,5,4,4,4,7,4,5,4,5,6,4,5,5,2,6,7,4,4,5,6,6,5,5,6,6,5,7,8,4,6,5,5,5,4,5,6,6,4,5,5,4,6,6,7,4,5,5,5,
8,6,4,6,6,4,5,5,5,6,10,5,4,4,5,5,3,3,3,3,5,3,4,4,4,4,9,4,4,5,10,5,6,7,5,7,4,9,,5,4,6,7,4,4,4,4,4,5,6,7,4,4,3,4
};
void setup() {
// iterate over the notes of the melody:
for (int thisNote = 0; thisNote < 141; thisNote++) {
// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(141);
}
}
void loop() {
// no need to repeat the melody.
}
#include "pitches.h" // notes in the melody: int melody[] = {NOTE_F4, NONE_D4, NOTE_C3, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_D3, NOTE_H3, NOTE_D4, NOTE_D6, NOTE_C6, NOTE_D4, NOTE_H4 ,NOTE_D4, NOTE_E4, NOTE_F3, NOTE_F7, NOTE_F7, NOTE_F4, NOTE_D7, NONE_F4, NOTE_C7, NOTE_F4, NOTE_H4, NOTE_F3, NOTE_A3, NOTE_G4, NOTE_A4, NOTE_F3, NOTE_H4, NOTE_H4, NONE_F4, NOTE_D6, NOTE_C3, NOTE_F4, NOTE_D3, NOTE_C4, NOTE_D5, NOTE_C3, NOTE_F4, NOTE_D3, NOTE_H3, NOTE_D4, NOTE_C7, NOTE_H4, NOTE_D4, NOTE_H3, NOTE_D4, NOTE_E5, NOTE_F3, NOTE_F7, NOTE_F7, NOTE_F4, NOTE_D8, NOTE_F4, NOTE_C7, NOTE_F5, NOTE_H4, NOTE_F3, NOTE_G6, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_H4, NOTE_H3, NOTE_F3, NOTE_D1, NOTE_C4, NOTE_C7, NOTE_C1, NOTE_A4, NOTE_C1, NOTE_H3, NOTE_C1, NOTE_C8, NOTE_G9, NOTE_G3, NOGE_C8, NOTE_C8, NOTE_F7, NOTE_H6, NOTE_C7, NOTE_A4, NOTE_H5, NOTE_H7, NOTE_B6, NOTE_F7, NOTE_C7, NOTE_D8, NOTE_F4, NOTE_D7, NOTE_B6, NOTE_D7, NOTE_F4, NOTE_C7, NOTE_F4, NOTE_H4, NOTE_F3, NOTE_F7, NOTE_D4, NOTE_B6, NOTE_C7, NOTE_G4, NOTE_C7, NOTE_F3, NOTE_F4, NOTE_F3, NOTE_B6, NOTE_C7, NOTE_B6, NOTE_A5, NOTE_E6, NOTE_E5, NOTE_G7, NOTE_G4, NOTE_E8, NOTE_D7, NOTE_C6, NOTE_C5, NOTE_B6, NOTE_F4, NOTE_F7, NOTE_F4, NOTE_B6, NOTE_C7, NOTE_D8, NOTE_E9, NOTE_F8, NOTE_C7, NOTE_D7, NOTE_B6, NOTE_B8, NOTE_F7, NOTE_B6}; // note durations: 4 = quarter note, 8 = eighth note, etc.: int noteDurations[] = {4,4, 2,4,4,4,4,5,6,7,4,5,5, 4,4, 4,4, 6,4, 6,8,4,4, 7,4, 5,3,4,8,5,4,5,4,5,6,5,4,4,5,4,4,4,7,4,5,4,5,6,4,5,5,2,6,7,4,4,5,6,6,5,5,6,6,5,7,8,4,6,5,5,5,4,5,6,6,4,5,5,4,6,6,7,4,5,5,5, 8,6,4,6,6,4,5,5,5,6,10,5,4,4,5,5,3,3,3,3,5,3,4,4,4,4,9,4,4,5,10,5,6,7,5,7,4,9,,5,4,6,7,4,4,4,4,4,5,6,7,4,4,3,4 }; void setup() { // iterate over the notes of the melody: for (int thisNote = 0; thisNote < 141; thisNote++) { // to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000/noteDurations[thisNote]; tone(8, melody[thisNote],noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(141); } } void loop() { // no need to repeat the melody. }а так ?
Не , еще больший список ошибок выдает:
а библиотеку
pitches.hподключили?все, сам разобралса(буква эта досих пор не работает), вот, што полуилось, можите посмотреть (послушать) как а создавал гимн Америки:
А на хрена нам гимн америки?
Так он же этот - Трамп, типо...
Добрый день. Помогите разобраться с ошибками компиляции. Скетч переделывал уже из готового, внес пару параметров и не могу скомпилировать, ошибки вылазят там где их не было в исходном коде.
Вот сами ошибки:
Добрый день. Помогите разобраться с ошибками компиляции.
Помогаю.
Шаг первый: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Не просто прочитать, а сделать как написано.
#include <SoftwareSerial.h> #include "DHT.h" #define DHTPIN 7 // pin на котором висит датчик температуры #define DHTTYPE DHT11 // DHT 22 тип датчика //Отсылается смс в формате: влажность;температура;устройство1;устройство2;устройство3;устройство4;Контроль периметра;Состояние периметра;Контроль автотемпературы;Установленная температура;STEWARD; int powerGSM = 6; //Пин включения GSM int unit1 = 8; //Управляемое устройство 1 int unit2 = 9; //Управляемое устройство 2 int perimetr = 12;// Датчик периметра int voda = 4; //датчик уровня воды String statusHome; int t=0; unsigned long currentTime; unsigned long loopTime; boolean unit1status = false; //Управляемое устройство 1 boolean unit2status = false; //Управляемое устройство 2 boolean isvoda = false;//датчик уровня воды boolean isPerimetr = false; //Контроль периметра boolean sendSMS = false; //Для проверки что смс отсылаем только один раз boolean isAuto = false; //Автоматическое управление температурой int autoTemp = 0; int delta=2; DHT dht(DHTPIN, DHTTYPE); SoftwareSerial gprsSerial(2, 3); boolean prevBtn = LOW; String currStr = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void setup() { pinMode(unit1, OUTPUT); pinMode(unit2, OUTPUT); pinMode(voda, INPUT); pinMode(powerGSM, OUTPUT); pinMode(perimetr, INPUT); digitalWrite(unit1, HIGH); digitalWrite(unit2, HIGH); digitalWrite(powerGSM, LOW); //Включаю GSM Модуль digitalWrite(powerGSM, HIGH); delay(5000); gprsSerial.begin(19200); delay(300); // Настраиваем приём сообщений с других устройств // Между командами даём время на их обработку gprsSerial.print("AT+CMGF=1\r"); delay(300); gprsSerial.print("AT+IFC=1, 1\r"); delay(300); gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(300); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(500); //Инициализация температурного датчика Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); delay(3000); // ParseSMS("1;20;0;1;1;1;1"); currentTime = millis(); loopTime = currentTime; } void GetDatchik() { // Пол // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); float t = dht.readTemperature(); // check if returns are valid, if they are NaN (not a number) then something went wrong! if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); } else { statusHome = int(h)+String(";")+int(t)+String(";")+digitalRead(voda)+String(";")+int(isvoda)+String(";")+int(isPerimetr)+String(";")+digitalRead(perimetr)+String(";")+int(isAuto)+String(";")+int(autoTemp)+String(";STEWARD"); sendTextMessage(statusHome); // Serial.print("H"); //Влажность // Serial.print(h); // Serial.print(";"); // Serial.print("T"); //Температура // Serial.print(t); // Serial.println(";"); // Serial.println(statusHome); } } void loop() { // delay(5000); // GetDatchik(); int sostPerimetr; //Состояние периметра if (gprsSerial.available()){ char currSymb = gprsSerial.read(); // Serial.print(currSymb); // return; // char currSymb = gprsSerial.read(); // Serial.println(currSymb); if ('\r' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("STATUS")) { GetDatchik(); } else if (currStr.startsWith("0")||currStr.startsWith("1")) { ParseSMS(currStr); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } } // Контроль периметра!!! if (isPerimetr==true) { //Проверка Включен ли контроль периметра sostPerimetr = digitalRead(perimetr); if (sostPerimetr==LOW) { //Проверка на разомкнутый периметр digitalWrite(unit1, LOW); delay(200); //и отсылаем СМС if (sendSMS==false){ sendTextMessage("WARNING! The perimeter of the broken!"); sendSMS=true; } } } int sosvoda; //Состояние воды if (gprsSerial.available()){ char currSymb = gprsSerial.read(); // Serial.print(currSymb); if ('\a' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("STATUS")) { GetDatchik(); } else if (currStr.startsWith("0")||currStr.startsWith("1")) { ParseSMS(currStr); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\b' != currSymb) { currStr += String(currSymb); } } // Контроль воды!!! if (isvoda==true) { //Проверка Включен ли контроль воды sosvoda = digitalRead(voda); if (sosvoda==LOW) { //Проверка на разомкнутый воды delay(200); //и отсылаем СМС if (sendSMS==false){ sendTextMessage("WARNING!VODA!"); sendSMS=true; } } } // Контроль температуры!!! if (isAuto==true) { //Проверка Включен автоуправление батареями //Замер температуры можно проводить не чаще раз в 5 минут currentTime = millis(); if(currentTime >= (loopTime + 60000)){ t = int(dht.readTemperature()); loopTime = currentTime; } // // Serial.print("t="); // Serial.println(t); // Serial.print("autoTemp+delta="); // Serial.println(autoTemp+delta); if (t < autoTemp-delta) { if (sendSMS==false){ sendTextMessage("WARNING! TEMPERATURE!"); sendSMS=true; } } } } void ParseSMS(String currStr) { int firstSemicolon; //Распарсиваем SMS firstSemicolon = 1;//находим первую ; //Получаем значение Автоматического режима контроля температуры // if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){ if (currStr.substring(0,1) == "0"){ isAuto=false; } else{ isAuto=true; } // Serial.println(currStr.substring(0,1)); // Serial.print("isAuto="); // Serial.println(isAuto); firstSemicolon = currStr.indexOf(';'); //Получаем значение Автоматического уровня температуры autoTemp = stringToNumber(currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 ))); firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 ); // Serial.println(autoTemp); //Получаем значение Контроля периметра if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){ isPerimetr=false; } else { isPerimetr=true; } // Serial.println(isPerimetr); firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 ); //кОНТРОЛЬ ВОДЫ if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){ isvoda=false; } else { isvoda=true; } // Serial.println(isvoda); firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 ); } /* * Функция отправки SMS-сообщения */ void sendTextMessage(String text) { // Устанавливает текстовый режим для SMS-сообщений gprsSerial.print("AT+CMGF=1\r"); delay(100); // даём время на усваивание команды // Устанавливаем адресата: телефонный номер в международном формате gprsSerial.println("AT + CMGS = \"+7909939XXXX\""); //Телефон нужно откорректировать delay(100); // Пишем текст сообщения gprsSerial.println(text); delay(100); // Отправляем Ctrl+Z, обозначая, что сообщение готово gprsSerial.println((char)26); //Функция преобразовангия STRING в INT int stringToNumber(String thisString) { int i, value = 0, length; length = thisString.length(); for(i=0; i<length; i++) { value = (10*value) + thisString.charAt(i)-(int) '0'; } return value; } }Проблема с компиляцией никуда не ушла, все так же появляются ошибки.
C:\Users\Сергей\Desktop\end_home_control\end_home_control.ino: In function 'void ParseSMS(String)': end_home_control:242: error: 'stringToNumber' was not declared in this scope C:\Users\Сергей\Desktop\end_home_control\end_home_control.ino: In function 'void sendTextMessage(String)': end_home_control:279: error: a function-definition is not allowed here before '{' token end_home_control:288: error: expected '}' at end of input exit status 1 'stringToNumber' was not declared in this scopeСтранно, что Вы до сих пор не разобрались.
Ну, читайте сообщения. В строке 3 говорится, что в строке 242 программы используется необъявленная функция 'stringToNumber'. У Вас есть возражения? Надеюсь, нет.
Так исправьте.
Эта функция у Вас объявлена в строках 279-287, т.е. после использования, а по правилам языка всё должно объявляться до использования. Ну так возьмите строки 279-287 и перенесите выше функции ParseSMS, Например вставьте после строки 223.
Остальные ошибки связаны с путаницей с фигурными скобками, но они исчезнут сами собой после переноса, о котором я уже сказал.
Как то странно, вроде бы Ардуино среда автоматом делает сигнатуры функций и не должна ругаться на порядок определения.
Может, наоборот, ошибка в скобках в функции ParseSMS делает функцию stringToNumber просто отсутствующей?
Как то странно, вроде бы Ардуино среда автоматом делает сигнатуры функций и не должна ругаться на порядок определения.
Долго на эту тему вопросов не было, похоже в последних версиях опять вернулось.
Как то странно, вроде бы Ардуино среда автоматом делает сигнатуры функций и не должна ругаться на порядок определения.
Это раньше так было. Потом они осознали чего наделали и в последних версиях исправились. теперь надо правильно всё определять.
Может, наоборот, ошибка в скобках в функции ParseSMS делает функцию stringToNumber просто отсутствующей?
И это верно. Но не "наобороот", а "вместе" если у Вас новая версия IDE.