Нужна помощь!
- Войдите на сайт для отправки комментариев
Ср, 02/11/2016 - 20:35
Не компилируется, выдает ошибку. Помогите пожалуйста. Новичек в программировании.
#include <DS3232RTC.h> #include <Time.h> #include <Wire.h> #include <FastLED.h> #define NUM_LEDS 108 // по 26 на цифру и 4 на разделительные точки #define LED_TYPE WS2812 #define COLOR_ORDER GRB // Определение цвета ленты #define BRIGHTNESS 150 #define LED_PIN 6 // Цифровой pin для led соединения CRGB leds[NUM_LEDS]; // Определение LED ленты byte digits[10][26] = { { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } , // Цифра 0 { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 } , // Цифра 1 { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 } , // Цифра 2 { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } , // Цифра 3 { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 } , // Цифра 4 { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } , // Цифра 5 { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } , // Цифра 6 { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 } , // Цифра 7 { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } , // Цифра 8 { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } }; // Цифра 9 | 2D Массив для цифр из 7 сегментов byte firstdigit[2][10] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } , // Цифра 0 первое число { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }; // Цифра 1 первое число | 2D Массив для цифр из 7 сегментов bool Dot = true; //Dot состояние bool DST = false; //DST состояние int last_digit = 0; //long ledColor = CRGB::DarkOrchid; // Color used (in hex) long ledColor = CRGB::MediumVioletRed; long ColorTable[16] = { CRGB::Amethyst, CRGB::Aqua, CRGB::Blue, CRGB::Chartreuse, CRGB::DarkGreen, CRGB::DarkMagenta, CRGB::DarkOrange, CRGB::DeepPink, CRGB::Fuchsia, CRGB::Gold, CRGB::GreenYellow, CRGB::LightCoral, CRGB::Tomato, CRGB::Salmon, CRGB::Red, CRGB::Orchid }; enum {CLOCK, SECONDS, YEAR, DATE, END}; // режимы отображения. Метка END всегда последняя byte currentMode = CLOCK; // текущий режим (после включения питания) unsigned int interval = 20; // интервал между сменой показаний, сек void setup() { Serial.begin(9600); Wire.begin(); FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS); // FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); FastLED.setBrightness( BRIGHTNESS ); pinMode(2, INPUT_PULLUP); // Настройка DST привязка кнопки к pin pinMode(4, INPUT_PULLUP); // Настройка Минуты привязка кнопки к pin pinMode(5, INPUT_PULLUP); // Настройка Часы привязка кнопки к pin } // Проверка сенсора света и установка соответсвующего уровня void BrightnessCheck() { const byte sensorPin = 3; // Сенсор света PIN const byte brightnessLow = 75; // Уровень слабого освещения const byte brightnessHigh = 100; // Уровень сильного освещения int sensorValue = digitalRead(sensorPin); // Чтение данных с сенсора if (sensorValue == 0) { Serial.println("Brightness High"); LEDS.setBrightness(brightnessHigh); } else { Serial.println("Brightness Low"); LEDS.setBrightness(brightnessLow); } }; // Получить время в один номер int GetTime() { tmElements_t Now; RTC.read(Now); //time_t Now = RTC.Now();// Получение текущего времени и сохранение его в объект DateTime int hour = Now.Hour; int minutes = Now.Minute; int second = Now.Second; if (second % 2 == 0) { Dot = false; } else { Dot = true; }; return (hour * 100 + minutes); }; void DSTcheck() { int buttonDST = digitalRead(2); Serial.print("DST is: "); Serial.println(DST); if (buttonDST == LOW) { if (DST) { DST = false; Serial.print("Switching DST to: "); Serial.println(DST); } else if (!DST) { DST = true; Serial.print("Switching DST to: "); Serial.println(DST); }; delay(500); }; } // Конвертирование времени в массив необходимый для дисплея void TimeToArray() { int Now = GetTime(); // Get time int cursor = 108; //116 Serial.print("Time is: "); Serial.println(Now); if (Dot) { leds[52] = ledColor; leds[53] = ledColor; leds[54] = ledColor; leds[55] = ledColor; leds[56] = ledColor; //leds[48]=ledColor; } else { leds[52] = 0x000000; leds[53] = 0x000000; leds[54] = 0x000000; leds[55] = 0x000000; leds[56] = 0x000000; //leds[48]=0x000000; }; for (int i = 1; i <= 4; i++) { int digit = Now % 10; // get last digit in time if (i == 1) { cursor = 82; //82 Serial.print("Digit 4 is : "); Serial.print(digit); Serial.print(", the array is : "); for (int k = 0; k <= 25; k++) { Serial.print(digits[digit][k]); if (digits[digit][k] == 1) { leds[cursor] = ledColor; } else if (digits[digit][k] == 0) { leds[cursor] = 0x000000; }; cursor ++; }; // fin for Serial.println(); if (digit != last_digit) { fadefonction(); ledColor = ColorTable[random(16)]; } last_digit = digit; }// fin if else if (i == 2) { cursor = 56; Serial.print("Digit 3 is : "); Serial.print(digit); Serial.print(", the array is : "); for (int k = 0; k <= 25; k++) { Serial.print(digits[digit][k]); if (digits[digit][k] == 1) { leds[cursor] = ledColor; } else if (digits[digit][k] == 0) { leds[cursor] = 0x000000; }; cursor ++; }; Serial.println(); } else if (i == 3) { cursor = 26; Serial.print("Digit 2 is : "); Serial.print(digit); Serial.print(", the array is : "); for (int k = 0; k <= 25; k++) { Serial.print(digits[digit][k]); if (digits[digit][k] == 1) { leds[cursor] = ledColor; } else if (digits[digit][k] == 0) { leds[cursor] = 0x000000; }; cursor ++; }; Serial.println(); } else if (i == 4) { cursor = 0; Serial.print("Digit 1 is : "); Serial.print(digit); Serial.print(", the array is : "); for (int k = 0; k <= 25; k++) { Serial.print(digits[digit][k]); if (digits[digit][k] == 1) { leds[cursor] = ledColor; } else if (digits[digit][k] == 0) { leds[cursor] = 0x000000; }; cursor ++; }; // Serial.println(); }; Now /= 10; }; }; void TimeAdjust() { int buttonH = digitalRead(5); int buttonM = digitalRead(4); if (buttonH == LOW || buttonM == LOW) { delay(500); tmElements_t Now; RTC.read(Now); int hour = Now.Hour; int minutes = Now.Minute; if (buttonH == LOW) { if (Now.Hour == 24) { Now.Hour = 1; } else { Now.Hour += 1; }; } else { if (Now.Minute == 59) { Now.Minute = 0; } else { Now.Minute += 1; }; }; RTC.write(Now); } } void fadeall() { for (int m = 0; m < NUM_LEDS; m++) { leds[m].nscale8(250); } } void fadefonction () { static uint8_t hue = 0; // First slide the led in one direction for (int i = 0; i < NUM_LEDS; i++) { // Set the i'th led to red leds[i] = CHSV(hue++, 255, 255); // Show the leds FastLED.show(); // now that we've shown the leds, reset the i'th led to black // leds[i] = CRGB::Black; fadeall(); // Wait a little bit before we loop around and do it again delay(10); } // Now go in the other direction. for (int i = (NUM_LEDS) - 1; i >= 0; i--) { // Set the i'th led to red leds[i] = CHSV(hue++, 255, 255); // Show the leds FastLED.show(); // now that we've shown the leds, reset the i'th led to black // leds[i] = CRGB::Black; fadeall(); // Wait a little bit before we loop around and do it again delay(10); } } static unsigned long timeStamp; // переменная для хранения отметки времени void loop() // Main loop if (millis() - timeStamp > interval * 1000) { switch (currentMode) { case CLOCK: displayClock(); // функция вывода времени break; case SECONDS: displaySeconds(); break; case YEAR: displayYear(); break; case DATE: displayDate(); break; } currentMode++; // переходим в следующий режим if (currentMode) == END currentMode = 0; // зацикливаем режимы timeStamp = millis(); } void displayClock() // функция вывода времени { DSTcheck(); // Check DST TimeAdjust(); // Check to se if time is geting modified TimeToArray();// Get leds array with required configuration FastLED.show();// Display leds array //BrightnessCheck(); // Check brightness /*float t = RTC.temperature(); float celsius = t / 4.0; Serial.println(); Serial.print("Temp is : "); Serial.print(celsius); Serial.println();*/ }
выдает вот такую ошибку : mybigclock.ino:393:1: error: expected initializer before 'if'
Ошибка компиляции.
У Вас содержимое void loop() не заключено в { }
UPD: ставить точку с запятой после фигурной скобки ( }; ) необязательно, оно и без того нормально скомпилируется. Это не есть ошибка, просто лишнее.
А учебник по языку Си прочитать?
У Вас содержимое void loop() не заключено в { }
я закрыл склад скобок на переучёт.
Прошу прощения. Но после скобок
началось еще хуже.
mybigclock.ino: In function 'void loop()':
mybigclock.ino:406:22: error: 'displaySeconds' was not declared in this scope
mybigclock.ino:411:19: error: 'displayYear' was not declared in this scope
mybigclock.ino:416:19: error: 'displayDate' was not declared in this scope
mybigclock.ino:420:20: error: expected primary-expression before '==' token
mybigclock.ino:420:27: error: expected ';' before 'currentMode'
Ошибка компиляции.
Куда смотреть? Про книгу - не катит...
Про книгу - не катит...
Даже так?
Куда смотреть?
Ну, тогда смотрите футбол.
Ладно. Пойду другим путем.
На просторах инета нашел интересный проект "Большие 7 сегментные настенные часы" (кому интересно http://instructables.info/bolshie-nastennyie-chasyi-na-arduino/). После поиска как и из чего - был запущен в работу и мой. С Ардуино общаюсь не более года. В программировании не силен. Там же на просторах были найдены несколько скетчей, методом тыка один переделан под свой проект. Он сейчас и залит. У меня и лента и количество диодов немного иное. Получилось так: https://youtu.be/yhxRfyJSQ50 и https://youtu.be/qKeMa88LMCc Часы показывают. Но хотел чтобы показывалась еще и дата, а в дальнейшем и температура. Вот пытаюсь разобраться в другом скетче, он у меня почему-то не работает, вроде там эти процедуры прописаны. Вот как-то так.
mybigclock.ino:406:22: error: 'displaySeconds' was not declared in this scope
mybigclock.ino:411:19: error: 'displayYear' was not declared in this scope
mybigclock.ino:416:19: error: 'displayDate' was not declared in this scope
значит что эти функции не объявлены. что то не перенесли из первоисточника или какуюнибудь библиотеку потеряли
mybigclock.ino:420:20: error: expected primary-expression before '==' token
mybigclock.ino:420:27: error: expected ';' before 'currentMode'
хоть и в выложенном коде номера строчек другие(видимо не все скопировали сюда), подозреваю что проблема в строчке 415
я бы попробовал для начала так. но я любитель, в отличие от вышеотметившихся дядек)
if
(currentMode == END) {currentMode = 0;}
а с функциями сами разбирайтесь
ага. вот теперь понятно! написать такое сам наврядли смогу, попробую поискать еще где нибудь. Ну или кто поможет с написанием...
Спасибо!
упс! пока отмечал на 8-е пришли еще сообщения!
Вечер добрый! Вставляю ваш отрезок кода, показывает ошибку
: In function 'void loop()': : error: expected '}' at end of input
Закрывающей скобки не хватает.
Спасибо! почему-то показалось что все на месте...