Прошу помощи со скетчем часов
- Войдите на сайт для отправки комментариев
Ср, 05/09/2018 - 12:15
Доброго времени суток всем. Делаю часы на ин-12 не могу залить скетч вылезает ошибка компиляции помогите пожайлуста!!!
Arduino: 1.8.5 (Windows 7), Плата:"Arduino Nano, ATmega328P"
C:\Users\0A6D~1\AppData\Local\Temp\ccSRHNGk.ltrans0.ltrans.o: In function `main':
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined reference to `loop'
collect2.exe: error: ld returned 1 exit status
Несколько библиотек найдено для "DS3231.h"
Используется: C:\Users\джо\Documents\Arduino\libraries\DS3231
Не используется: C:\Users\джо\Documents\Arduino\libraries\DS3231-1.0.2
Не используется: C:\Program Files (x86)\Arduino\libraries\DS3231
Используем библиотеку DS3231 в папке: C:\Users\джо\Documents\Arduino\libraries\DS3231 (legacy)
Используем библиотеку Wire версии 1.0 из папки: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire
exit status 1
Ошибка компиляции для платы Arduino Nano.
Вот скетч:
#include <DS3231.h>
#include <Wire.h>
// выводы для дешифратора
int out1 = A3;
int out2 = A1;
int out4 = A0;
int out8 = A2;
// выводы для транзисторных ключей
int key1= 4;
int key2 = 6;
int key3 = 7;
int key4 = 8;
int led1=11;// вывод светодиода
int keyb=A6;// пин для клавиатуры
int keynum=0; //номер нажатой кнопки
int mode =0; //0 - отображение текущего времени 1- установка времени
int currentdigit = 0; //0 - установка часов 1- установка минут
bool blinkflag = 0; // флаг для мигания цифр при установке времени
bool timeout=false; // таймаут после нажатия кнопки (для устраниния дребезга)
unsigned long startTime; //для мигания светодиода
unsigned long startTime2; // для опроса нажатых кнопок
int sec; //переменная увеличивается каждые 500мс на единицу. Нужна для мигания секундных светодиодов, бывает в двух значениях 0 - светодиоды не горят, 1 - горят, если больше 1, то сбрысывается в 0
// переменные, необходимые для работы ds3231
void setup() {
// put your setup code here, to run once:
// задаем частоту ШИМ на 9 выводе 30кГц
TCCR1B=TCCR1B&0b11111000|0x01;
analogWrite(9,130);
// Start the I2C interface
// Wire.begin();
// Start the serial interface
Serial.begin(9600);
//задаем режим работы выходов микроконтроллера
pinMode(out1,OUTPUT);
pinMode(out2,OUTPUT);
pinMode(out4,OUTPUT);
pinMode(out8,OUTPUT);
pinMode(key1,OUTPUT);
pinMode(key2,OUTPUT);
pinMode(key3,OUTPUT);
pinMode(key4,OUTPUT);
pinMode(led1,OUTPUT);
startTime = millis();
startTime2=startTime;
sec = 0;
// считываем текущее вермя
// ReadDS3231();
delay(1000);
// lastMinute = minute%10;
}
//void ReadDS3231() //функция считывает в глобальные переменные minute и hour текущие значения
//void loop() {
// // put your main code here, to run repeatedly:
//
// int digits[3]; // массив для текущего значения времени на четыре цифры
// int keyval= analogRead(keyb); // считываем значение с клавиатуры
//
// unsigned long currentTime = millis(); //текущее время с момента запуска рограммы
// if (currentTime>=(startTime2+200)) // если прошло 200мс посмотрим какая кнопка была нажата
// {
// timeout=false;
// //проверим нажатие кнопок
// if (keynum==3) // кнопка переключения между режимами "время" и "настройка"
// {
// timeout=true; // запрещаем считывать нажатия кнопок
// if (mode==0) mode=1; // если отображалось время, переходим в режим настроек
// else
// if (mode==1) mode=0; //если был режим настроек, переключаемся на текущее время
// }
// if (keynum==2) // кнопка переключения между часами и минутами
// {
// timeout=true; // запрещаем считывать нажатия кнопок
// // currentdigit либо 0 - настройка часов, либо 1 - настройка минут
// currentdigit++;
// if (currentdigit==2) currentdigit=0;
// }
// if (keynum==1 && mode==1) // кнопка увеличения количества часов или минут(при настройке)
// {
// blinkflag=true; // прекращаем мигать цифрами
// startTime=millis();
// timeout=true; // запрещаем считывать нажатия кнопок
// if (currentdigit==0) // если меняем часы
// {
// if (hour<=22) hour++;
// else
// hour=0;
// Clock.setHour(hour);
// }
// if (currentdigit==1) // если меняем минуты
// {
// if (minute<=58) minute++;
// else
// minute=0;
// Clock.setMinute(minute);//Set the minute
// Clock.setSecond(0);
// }
// }
// keynum=0; //сбрасываем нажатую кнопку
// startTime2=millis();
// }
//
// if (currentTime>=(startTime+500)) // если прошло 500мс
// {
// blinkflag=!blinkflag; // инвертируем флаг мигающей цифры
//
// if(sec<1) // светодиоды не горят
// {
// // зажечь светодиоды
// digitalWrite(led1,HIGH);
// Serial.println(blinkflag);
// Serial.print("Keyval=");
// Serial.println(keyval);
//
// }
// if(sec>=1) // светодиоды горят
// {
// // потушить светодиоды
// digitalWrite(led1,LOW);
// }
// startTime = currentTime;
// ReadDS3231();
// sec = (sec+1);
// if(sec>=2) sec=0;
//
// }
// digits[0] = hour/10;
// digits[1] = hour%10;
// digits[2] = minute/10;
// digits[3] = minute%10;
//
// //антиотравление
// if (minute%10!=lastMinute && mode == 0)
// {
//
// digits[3] = lastMinute;
// lastMinute = minute%10;
//
// Safe(digits);
// digits[3] = lastMinute;
// }
// //
//
// show(digits); // вывести цифры на дисплей
//
// //проверяем нажатые кнопки
// if(!timeout) //если разрешено, считываем нажатую кнопку
// {
// /*keyval - значение функции analogread
// * если нажата первая кнопка, то принимает значение около 200
// * если нажата вторая кнопка то значение около 700
// * если третяя кнопка, то значение будет около 1000
// * эти значения зависят от выбранных резисторов в клавиатуре
// */
// if (keyval>150 && keyval<400) keynum=1;
// if (keyval>700 && keyval<900) keynum=2;
// if (keyval>960) keynum=3;
// }
//}
//void show(int a[])
//{
// //выведем цифру a[0] на первый индикатор
// setNumber(a[0]);
// if (!(mode==1&¤tdigit==0&&blinkflag==false)) //если мы в режиме настройки и происходит настройка часов, то в первая цифра будет мигать
// {
// digitalWrite(key1,HIGH);
// delay(2);
// //потушим первый индикатор
// digitalWrite(key1,LOW);
// delay(1);
// }
//
// //цифра a[1] на второй индикатор
// setNumber(a[1]);
// if (!(mode==1&¤tdigit==0&&blinkflag==false))
// {
// digitalWrite(key2,HIGH);
// delay(2);
// //потушим второй индикатор
// digitalWrite(key2,LOW);
// delay(1);
// }
//
// //цифра a[2] на третий индикатор
// setNumber(a[2]);
// if (!(mode==1&¤tdigit==1&&blinkflag==false))
// {
// digitalWrite(key3,HIGH);
// delay(2);
// //потушим третий индикатор
// digitalWrite(key3,LOW);
// delay(1);
// }
//
// //выведем цифру a[3] на четвертый индикатор
// setNumber(a[3]);
// if (!(mode==1&¤tdigit==1&&blinkflag==false))
// {
// digitalWrite(key4,HIGH);
// delay(2);
// //потушим четвертый индикатор
// digitalWrite(key4,LOW);
// delay(1);
// }
//}
//// передача цифры на дешифратор
//void setNumber(int num)
//{
// switch (num)
// {
// case 0:
// digitalWrite (out1,LOW);
// digitalWrite (out2,LOW);
// digitalWrite (out4,LOW);
// digitalWrite (out8,LOW);
// break;
// case 1:
// digitalWrite (out1,HIGH);
// digitalWrite (out2,LOW);
// digitalWrite (out4,LOW);
// digitalWrite (out8,LOW);
// break;
// case 2:
// digitalWrite (out1,LOW);
// digitalWrite (out2,HIGH);
// digitalWrite (out4,LOW);
// digitalWrite (out8,LOW);
// break;
// case 3:
// digitalWrite (out1,HIGH);
// digitalWrite (out2,HIGH);
// digitalWrite (out4,LOW);
// digitalWrite (out8,LOW);
// break;
// case 4:
// digitalWrite (out1,LOW);
// digitalWrite (out2,LOW);
// digitalWrite (out4,HIGH);
// digitalWrite (out8,LOW);
// break;
// case 5:
// digitalWrite (out1,HIGH);
// digitalWrite (out2,LOW);
// digitalWrite (out4,HIGH);
// digitalWrite (out8,LOW);
// break;
// case 6:
// digitalWrite (out1,LOW);
// digitalWrite (out2,HIGH);
// digitalWrite (out4,HIGH);
// digitalWrite (out8,LOW);
// break;
// case 7:
// digitalWrite (out1,HIGH);
// digitalWrite (out2,HIGH);
// digitalWrite (out4,HIGH);
// digitalWrite (out8,LOW);
// break;
// case 8:
// digitalWrite (out1,LOW);
// digitalWrite (out2,LOW);
// digitalWrite (out4,LOW);
// digitalWrite (out8,HIGH);
// break;
// case 9:
// digitalWrite (out1,HIGH);
// digitalWrite (out2,LOW);
// digitalWrite (out4,LOW);
// digitalWrite (out8,HIGH);
// break;
// }
//}
//void Safe(int n[])
//{
// int h1 = n[0];
// int h2 = n[1];
// int m1 = n[2];
// int m2 = n[3];
//
// n[0]++;
// while(n[0]!=h1)
// {
//
// for (int x=0;x<2;x++)
// {
// show(n);
// }
// n[0]++;
// if (n[0]>9) n[0]=0;
// }
//
// n[1]++;
// while(n[1]!=h2)
// {
//
// for (int x=0;x<2;x++)
// {
// show(n);
// }
// n[1]++;
// if (n[1]>9) n[1]=0;
// }
//
// n[2]++;
// while(n[2]!=m1)
// {
//
// for (int x=0;x<2;x++)
// {
// show(n);
// }
// n[2]++;
// if (n[2]>9) n[2]=0;
// }
//
// n[3]++;
// while(n[3]!=m2)
// {
//
// for (int x=0;x<2;x++)
// {
// show(n);
// }
// n[3]++;
// if (n[3]>9) n[3]=0;
// }
//
//
//}
Так раскоментируй фукцию loop. Да , и почитай как вставлять правильно код.
Славян - судя по вопросу. в этом коде ты не понимаешь ни буквы, просто нашел где-то в инете?
Брысь отсюда. тут таким не место :)
Славян - судя по вопросу. в этом коде ты не понимаешь ни буквы, просто нашел где-то в инете?
Брысь отсюда. тут таким не место :)
У Вас в 46, 63, 97 строке кода БООЛЬШИЕ ошибки.
Слушайте умных людей.
Злые вы. А ведь какое трудолюбие надо иметь, чтобы на каждой строчке по две косые палочки поставить. Эхххх.
Злые вы. А ведь какое трудолюбие надо иметь, чтобы на каждой строчке по две косые палочки поставить. Эхххх.
Дурная IDE по Ctrl + Slash, когда выделено несколько строчек - комментирует однострочными комментариями каждую строку. Дичь :)
Там в скетче уже используется комментирование через /* */, и если использовать этот способ на более глобальный блок, то компилятор найдет первую закрывающую */ и дальше все остальное будет воспринимать за код. Так что тут да, по Ctrl+/ было действительно проще. Я так думаю (с).