Нужна помощь!
- Войдите на сайт для отправки комментариев
Ср, 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() не заключено в { }
я закрыл склад скобок на переучёт.
Прошу прощения. Но после скобок
void 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(); } }началось еще хуже.
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;}void loop() { if (millis() - timeStamp > interval * 1000) { switch (currentMode) { case 1: // clock displayClock(); // функция вывода времени break; case 2:// SECONDS displaySeconds(); break; case 3:// YEAR displayYear(); break; case 4:// DATE displayDate(); break; } currentMode++; // переходим в следующий режим if (currentMode ==4) {currentMode = 1; // зацикливаем режимы timeStamp = millis(); } }а с функциями сами разбирайтесь
ага. вот теперь понятно! написать такое сам наврядли смогу, попробую поискать еще где нибудь. Ну или кто поможет с написанием...
Спасибо!
упс! пока отмечал на 8-е пришли еще сообщения!
void loop() { if (millis() - timeStamp > interval * 1000) { switch (currentMode) { case 1: // clock displayClock(); // функция вывода времени break; case 2:// SECONDS displaySeconds(); break; case 3:// YEAR displayYear(); break; case 4:// DATE displayDate(); break; } currentMode++; // переходим в следующий режим if (currentMode ==4) {currentMode = 1; // зацикливаем режимы timeStamp = millis(); } }Вечер добрый! Вставляю ваш отрезок кода, показывает ошибку
: In function 'void loop()': : error: expected '}' at end of input
Закрывающей скобки не хватает.
Спасибо! почему-то показалось что все на месте...