Ошибка при компилировании (мой первый скетч)
- Войдите на сайт для отправки комментариев
Пт, 07/06/2013 - 00:15
Всем привет Вот решил я связать два скетча в одну. IRremote и Ultrasonic
Немного изучив я всетаки написал код, но вот в компиляции выходит ошибка
Robot_a1.ino: In function 'void loop()':
Robot_a1:52: error: redefinition of 'void loop()'
Robot_a1:23: error: 'void loop()' previously defined here
Robot_a1:55: error: 'getDistance' was not declared in this scope
Robot_a1:56: error: 'ledPin' was not declared in this scope
Robot_a1:57: error: 'ledPin' was not declared in this scope
Robot_a1:62: error: a function-definition is not allowed here before '{' token
Robot_a1:73: error: a function-definition is not allowed here before '{' token
А вот и сам отформатированный код:
#include <IRremote.h>
#include <IRremoteInt.h>
#include <Ultrasonic.h>
int RECV_PIN = 11;
int trigPin = 10;
int echoPin = 11;
long distance;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() //кнопки на пульте
{
if (irrecv.decode(&results))
{
Serial.println(results.value);
//вперед
if (results.value!=16)
{
digitalWrite(3,HIGH);
}
if (results.value!=2064)
{
digitalWrite(3,LOW);
}
// назад
if (results.value!=1168)
{
digitalWrite(5, HIGH);
}
if (results.value!=3216)
{
digitalWrite(5, LOW);
}
}
}
void loop() // дальномер
{
{
distance = getDistance();
if (distance<=10) analogWrite(ledPin, 0);
if (distance>10) analogWrite(ledPin, 255);
delay(50);
}
long getEchoTiming()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin,HIGH);
return duration;
}
long getDistance()
{
long distacne_cm = getEchoTiming()/29/2;
return distacne_cm;
}
}
Ошибка выходт в строке void loop() // дальномер
Я уже читал п свю пу она заключалась в том что я пытаюсь определить функцию внутри фукции.
Уже не знаю что и делать.
С нетерпением жду ваших советов!
У Вас две функции loop, так нельзя
Многопоточность )
И функции getEchoTiming() и getDistance() объявлены внутри loop() - так нельзя. Нельзя объявлять функцию внутри функции.
И, не уверен (и скорее всего не ошибка, а просто "лишние") - я бы не делал инклуда #include <IRremoteInt.h>
Думаю инклуда #include <IRremote.h> вполне достаточно (он сам, по идее должен подключить #include <IRremoteInt.h>)
И ledPin - у вас нигде не объявлен.
Вообщем - возмите словарик и переведите эти ошибки :) Компилятор же вам все рассказал и указал строки на которые нужно обратить внимание.
Сделал так, компилируется.
#include <IRremote.h> #include <Ultrasonic.h> int RECV_PIN = 11; int trigPin = 10; int echoPin = 11; long distance; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); pinMode(trigPin,OUTPUT); pinMode(echoPin,INPUT); pinMode(3, OUTPUT); pinMode(5, OUTPUT); } void loop() //кнопки на пульте { if (irrecv.decode(&results)) { Serial.println(results.value); //вперед if (results.value!=16) { digitalWrite(3,HIGH); } if (results.value!=2064) { digitalWrite(3,LOW); } // назад if (results.value!=1168) { digitalWrite(5, HIGH); } if (results.value!=3216) { digitalWrite(5, LOW); } } { distance = getDistance(); if (distance<=10) analogWrite(3, 0); if (distance>10) analogWrite(3, 255); delay(50); } } long getEchoTiming() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin,HIGH); return duration; } long getDistance() { long distacne_cm = getEchoTiming()/29/2; return distacne_cm; }Угу. Так больше похоже на правду. Только скобки фигурные в строках 50,55 - лишние. Ну то есть "не мешают", но и никакой смысловой нагрузки не несут (компилятор их проигнорит). Просто захламляют код.
К сожалению не работает. Не работает даже Ик управление которое раньше работало, мигает только светодиод TX и отдает COM порту рандомное число. Не знаете почему так?
А вы в "то что работало", добавте, в конце Loop() - задержку в delay(50) и посмотрите сможет ли оно еще работать.
А еще, посмотрите примеры идущие с IRRemote , обратите внимание на вещи типа
if (results->decode_type == UNKNOWN) { Serial.println("Could not decode message"); }Неплохо, пречде чем пытатся выполнить какую-то команду - убедится что мы такие ее правильно декодировали.
А еще, вам было-бы неплохо определится чем же именно занимается 11 пин. Ну него приходят сигналы от ИК-приемника или от дальномера? Ну ладно в коде, а при подключении двух устройств к одному пину вас не смутили?
А вы в "то что работало", добавте, в конце Loop() - задержку в delay(50) и посмотрите сможет ли оно еще работать.
А еще, посмотрите примеры идущие с IRRemote , обратите внимание на вещи типа
if (results->decode_type == UNKNOWN) { Serial.println("Could not decode message"); }Неплохо, пречде чем пытатся выполнить какую-то команду - убедится что мы такие ее правильно декодировали.
А еще, вам было-бы неплохо определится чем же именно занимается 11 пин. Ну него приходят сигналы от ИК-приемника или от дальномера? Ну ладно в коде, а при подключении двух устройств к одному пину вас не смутили?
Я уже тестировал свой старый код он замечательно работал. "а при подключении двух устройств к одному пину вас не смутили?" а тут просто опечатка! Я конечно же сменил его на 9 пин.
Я уже тестировал свой старый код он замечательно работал.
С delay(50) тестировали?
"а при подключении двух устройств к одному пину вас не смутили?" а тут просто опечатка! Я конечно же сменил его на 9 пин.
И физически и в коде? Если да - значит сюда вы дали не тот вариант скетчка который заливали. 100% уверенны что это единственно отличие?
Я уже тестировал свой старый код он замечательно работал.
С delay(50) тестировали?
И, кстати, что-то сильно я сомневаюсь что тестировали. Или тестировали одно, сюда выкинули другой код.
Что-то в нем нигде не видно irrecv.resume(); // Receive the next value
Так что как оно могло у вас работать - неведомо.
Что-то в нем нигде не видно irrecv.resume(); // Receive the next value
Вот только что добавил, заработало. Только вот данные обновляются только через 3 секунды, а если прикоснуться к digital выводам данны обновляются как и прежде очень часто. С чем это связано?
Все выяснилось - Шумы. Добавил датчик, оказалось что, если близи 10 см ничего нет, двигатель оставался всегда включенным , а если нет-выключенным. Удалил часть кода if (distance<=10) digitalWrite(3, HIGH); и все заработало!
Вот и весь код.
Спасибо тебе! Дальше уже буду модифицировать, пока еще не купил драйвер двигателя.
#include <IRremote.h> #include <Ultrasonic.h> int RECV_PIN = 11; int trigPin = 10; int echoPin = 9; long distance; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); pinMode(trigPin,OUTPUT); pinMode(echoPin,INPUT); pinMode(3, OUTPUT); pinMode(5, OUTPUT); } void loop() //кнопки на пульте { if (irrecv.decode(&results)) { Serial.println(results.value); //вперед if (results.value!=16) { digitalWrite(3,HIGH); } if (results.value!=2064) { digitalWrite(3,LOW); } // назад if (results.value!=1168) { digitalWrite(5, HIGH); } if (results.value!=3216) { digitalWrite(5, LOW); } irrecv.resume(); } distance = getDistance(); if (distance<=10) digitalWrite(3, LOW); } long getEchoTiming() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin,HIGH); return duration; } long getDistance() { long distacne_cm = getEchoTiming()/29/2; return distacne_cm; }Здравствуйте всем. Может кто поможет. При компиляции скетча вот этого:
Выходят такие ошибки :
Библиотеки вроде бы все есть, но нифига не работает.
Ага, и ногой еще топни или кулаком по столу.
Есть, сэр!!!!
Ошибка №1 - код вставлен неправильно! В таком виде его никто читать не будет!
Всем привет, напишу здесь свою проблему. Нашёл в инете код для пушпула на ардуино. Данный код компилируется на старой версии ардуино 1.0.6 , но не хочет компилироваться в новой ардуино 1.8х. Вопрос почему? Выделяет строку с void и выдаёт ошибки:
Arduino: 1.8.6 Hourly Build 2018/05/15 10:41 (Windows 7), Плата:"Arduino/Genuino Uno"
sketch_may21a:3:24: error: 'poluper1' was not declared in this scope
#include <LiquidCrystal.h> LiquidCrystal lcd(8,9,10,11,12,13); //RS E D4 D5 D6 D7 void (*mas[4]) (void)={poluper1, dead_time1, poluper2, dead_time2}; // массив указателей функций volatile int val_fr = 533; // длительность полупериода f=18000000/val_fr/2(Гц), volatile int dead_time = 91; // пауза между периодами, не должна быть меньше 92 и больше val_fr-92 byte uk=0; int f_val, d_val; float rpm, dtm; // ******************************************************************** // ******************************************************************** void setup() { DDRD = B11111000; // нужные пины на выход PORTD = B00000100; // на втором пине устанавливаем "единицу" TCCR1A=0; TIMSK1=0; // сбрасываем на всякий эти регистры // TCCR1A=0; TIMSK=0; TCCR1B=0; // мало ли что arduino IDE туда записало TCNT1=0; // сбрасываем счетный регистр таймера 1 OCR1A=0; // задаем частоту, в Гц, по формуле f=F_CPU/OCR1A/2 где F_CPU тактовая частота TIMSK1|=(1<<OCIE1A); // разрешаем генерацию прерывания таймера 1, по совпадению с регистром OCR1A // TIMSK|=(1<<OCIE1A); // Скетч будет работать на дуинах с atmega168/328. // При использовании atmega8 меняем все TIMSK1 на TIMSK (убираем еденицу). TCCR1B|=((1<<CS10)|(1<<WGM12)); // запускаем таймер 1 без предделителя в режиме СТС lcd.begin(16, 2); lcd.print("arduino PushPull"); } // ******************************************************************** // ******************************************************************** void loop(){ if ((PIND&(1<<2)) == 0) l_c_d(); // если на пин 2 лог 0 } // ******************************************************************** // ******************************************************************** ISR(TIMER1_COMPA_vect) { (*mas[uk])(); // вызываем функцию по указателю } // ******************************************************************** // ******************************************************************** // ******************************************************************** void poluper1(void) { PORTD&=~(1<<5); // на пин 5 лог 0 PORTD|=(1<<4); // на пин 4 лог 1, формируем первый полупериод if(dead_time<92) {OCR1A=val_fr; uk=2;} // если пауза меньше 92 тогда она формироваться не будет else {OCR1A=val_fr-dead_time; uk=1;} // иначе уменьшаем полупериод на длительность паузы чтоб сохранить частоту } void dead_time1(void) { PORTD&=~(1<<4); // на пинах 4 и 5 лог 0, формируем dead_time паузу OCR1A=dead_time; uk=2; } void poluper2(void) { PORTD&=~(1<<4); // на пин 4 лог 0 PORTD|=(1<<5); // на пин 5 лог 1, формируем второй полупериод if(dead_time<92) {OCR1A=val_fr; uk=0;} else {OCR1A=val_fr-dead_time; uk=3;} } void dead_time2(void) { PORTD&=~(1<<5); // на пинах 4 и 5 лог 0, формируем dead_time паузу OCR1A=dead_time; uk=0; } // ******************************************************************** // ******************************************************************** void l_c_d() { // работаем с частотой от 15009(533) Гц до 30075(266) Гц (f=F_CPU/OCR1A/2) // работаем с частотой от 20000(400) Гц до 30075(266) Гц (f=F_CPU/OCR1A/2) f_val = analogRead(A3); val_fr = map(f_val, 0, 1023, 533, 266); rpm = 16000000.0/val_fr/2.0; // частота в Герцах // работаем со скважностью // пауза между периодами, не должна быть меньше 92 и больше val_fr-91 d_val = analogRead(A2); int max_dt = val_fr-92; dead_time = map(d_val, 0, 1023, 91, max_dt); dtm = dead_time/(val_fr/100.0); // скважность в процентах if (dead_time < 92) dtm=0; lcd.setCursor(0, 0); lcd.print("freq Hz"); lcd.setCursor(5, 0); lcd.print(rpm); lcd.setCursor(0, 1); lcd.print("dead time %"); lcd.setCursor(10, 1); lcd.print(dtm, 1); //delay(400); }Перенесите все функции (poluper1, poluper2, dead_time2 и т.п.) повыше, чтобы они располагались выше их первого упоминания в тексте.
sketch_may21a:3:24: error: 'poluper1' was not declared in this scope
Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем? и как то обьявить функцию до ее описания нельзя? или можно и тогда это совет как боротся с симптомами а не решать проблемму....
Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем? и как то обьявить функцию до ее описания нельзя? или можно и тогда это совет как боротся с симптомами а не решать проблемму....
Все тут есть. Предварительные обьявления функций поддерживаются.
В данном случае проще перенести функции - в том смысле, что это ПРОЩЕ ОБЬЯСНИТЬ новичку, чем рассказывать ему. что такое предварительное обьявление :)
Спасибо за оперативный ответ. Пробовал выше поднять void с функциями, ошибки опять пишит, можете написать как правильно строчку эту переписать?
Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем?
И файлы есть, и предварительно объявление никуда не делось. Только Вы попробуйте объяснить как написать предварительное объявление человеку, который Вам говорит "перенёс строчку void". Скопипастить функцию целиком - тут хоть есть надежда, что делать copy/paste он умеет, и где у функции началао, а где конец - знает.
Но, как показал ответ вопрошающего, на этот раз надежда не оправдалась. Так что предлагаю Вам попробовать объяснить ему что делать, а мы посмотрим :)))))
Но, как показал ответ вопрошающего, на этот раз надежда не оправдалась. Так что предлагаю Вам попробовать объяснить ему что делать, а мы посмотрим :)))))
Так надо тогда определится с направленностью форума =) а то одних "знатоков" зарезают сразу при такого же уровня вопросах, а другим дают решение =)
Мое имхо - дать наводку где искать, указать что функция не обьявлена, и что перед использованием надо обьявлять... если дальше будут вопросы "вида ткните носом что куда написать" - забить на тему и пойти дальше, если вопросы будут более осмысленными, и человек действительно хочет понять, а не получить готовое "без регистрации и смс" - можно направлять в литературу, или давать примеры =)
пы.сы пост номер 22 в этой теме, вот если бы у ТС последовали осмысленные вопросы после этого поста.
хотябы:
1) спросил бы что значит не обьявленныи как это
2)Вот же вот оно: {тут мог бы быть кусок кода или номер строки где обьявленна функция}
Объявил массив целым и переменные тоже,
LiquidCrystal lcd(8,9,10,11,12,13); //RS E D4 D5 D6 D7 int poluper1, dead_time1, poluper2, dead_time200000; void int *mas[4]={poluper1, dead_time1, poluper2, dead_time2}; // массив указателей функций volatile int val_fr = 533; // длительность полупериода f=18000000/val_fr/2(Гц),теперь пишет теперь: two or more data types in declaration of 'mas'. В какую сторону теперь смотреть? Или неправильно объявил?
теперь пишет теперь: two or more data types in declaration of 'mas'. В какую сторону теперь смотреть?
Для начала в англорусский словарь или там онлайн переводчик, чтобы понять смысл фразы " two or more data types in declaration of 'mas'"
А когда он станет понятен, то уж как-нибудь определиться какого типа должен быть mas: int или void.
А вообще, если Вы не хотите постить на форум каждый чих компилятора, то смотрите в сторону книги Кернигана и Ритчи.
2 b707, Что и требовалось доказать =) если бы человек хотел учится - половины сообщений между этим и вашим постом небыло =) а были бы совсем другие вопросы =) а тут уровень или дайте готовое(имхо - для этого тут есть раздел даже, "ищу заказчика") или не лезте со своими советами =)
Доброго времени суток, помогите разобраться в коде. Нужно при включенном реле ( Relay,LOW) выводилась надпись"XXX" а при выключенном "YYYY" . Что я не правильно пишу? При таком написании, надписи выводятся постоянно, не зависимо от включения реле. Спасибо
#include <Adafruit_GFX.h> // Core graphics library //#include <Adafruit_TFTLCD.h> // Hardware-specific library #include <Wire.h> #include <LM75.h> #include <MCUFRIEND_kbv.h> //----------------------------------------| // TFT Breakout -- Arduino UNO / Mega2560 / OPEN-SMART UNO Black // GND -- GND // 3V3 -- 3.3V // CS -- A3 // RS -- A2 // WR -- A1 // RD -- A0 // RST -- RESET // LED -- GND // DB0 -- 8 // DB1 -- 9 // DB2 -- 10 // DB3 -- 11 // DB4 -- 4 // DB5 -- 13 // DB6 -- 6 // DB7 -- 7 MCUFRIEND_kbv tft; LM75 sensor; // initialize an LM75 object // Assign human-readable names to some common 16-bit color values: #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF // Реле модуль подключен к цифровому выводу 4 int Relay = 4; void setup(void) { Serial.begin(9600); Wire.begin(); Serial.println(F("TFT LCD test")); pinMode(Relay, OUTPUT); #ifdef USE_ADAFRUIT_SHIELD_PINOUT Serial.println(F("Using Adafruit 3.2\" TFT Arduino Shield Pinout")); #else Serial.println(F("Using Adafruit 3.2\" TFT Breakout Board Pinout")); #endif Serial.print("TFT size is "); Serial.print(tft.width()); Serial.print("x"); Serial.println(tft.height()); tft.reset(); uint16_t identifier = tft.readID(); if(identifier == 0x9325) { Serial.println(F("Found ILI9325 LCD driver")); } else if(identifier == 0x9328) { Serial.println(F("Found ILI9328 LCD driver")); } else if(identifier == 0x7575) { Serial.println(F("Found HX8347G LCD driver")); } else if(identifier == 0x9341) { Serial.println(F("Found ILI9341 LCD driver")); } else if(identifier == 0x8357) { Serial.println(F("Found HX8357D LCD driver")); } else if(identifier == 0x4747) { Serial.println(F("Found HX8347A LCD driver")); } else if(identifier == 0x9326) { Serial.println(F("Found ILI9326 LCD driver")); } else if(identifier == 0x9327) { Serial.println(F("Found ILI9327 LCD driver")); } else if(identifier == 0x65) { Serial.println(F("Found HX8352B LCD driver")); } else { Serial.print(F("Unknown LCD driver chip: ")); Serial.println(identifier, HEX); Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:")); Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT")); Serial.println(F("should appear in the library header (Adafruit_TFT.h).")); Serial.println(F("If using the breakout board, it should NOT be #defined!")); Serial.println(F("Also if using the breakout, double-check that all wiring")); Serial.println(F("matches the tutorial.")); return; } tft.begin(0x65);//to enable HX8352B driver code tft.fillScreen(BLACK ); } void loop(void) { tft.setRotation(1); tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(GREEN ); tft.setTextSize(3); tft.print(sensor.temp()); tft.print(" C" ); delay(3000); digitalWrite(Relay, LOW); // реле включено delay(5000); digitalWrite(Relay, HIGH); // реле выключено delay(5000); if( Relay,LOW); { tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(WHITE ); tft.setTextSize(3); tft.print(" XXXX" );} if(Relay, HIGH){ tft.setCursor(0, 10); tft.fillRect(0,100, 144, 24, BLACK); tft.setTextColor(WHITE ); tft.setTextSize(3); tft.print(" YYYY" ); } }http://arduino.ru/Reference/If
Что по Вашему означает запись
if( Relay,LOW);Прежде, чем отвечать, изучите вот это. Думаю, все вопросы снимутся.
Спасибо, буду изучать...
Что по Вашему означает запись
if( Relay,LOW);Прежде, чем отвечать, изучите вот это. Думаю, все вопросы снимутся.
вопросы остались , тоже самое происходит или ошибка...
вопросы остались , тоже самое происходит или ошибка...
Значит плохо читали - идите читать снова. Вам намекнули, что приведенная строчка абсолютно безграмотна. Раз вы даже после подсказки этого не видите - значит у вас нет даже базовых знаний. Прежде чем продолжать заниматься ардуиной - прочитайте какой-нибудь учебник.
вопросы остались , тоже самое происходит или ошибка...
Значит плохо читали - идите читать снова. Вам намекнули, что приведенная строчка абсолютно безграмотна. Раз вы даже после подсказки этого не видите - значит у вас нет даже базовых знаний. Прежде чем продолжать заниматься ардуиной - прочитайте какой-нибудь учебник.
Я смотрю тут грамотные все собрались? Я не претендую на звание лучшего программиста, а книг я уже прочитал, наверное больше чем некоторые видели и продолжаю читать, извините что не по ардуино :)))
А что вы тогда от форума хотите? Попробуйте все же, для разнообразия, прочитать что-нибудь про ардуино, например, как считать состояние пина реле
Я смотрю тут грамотные все собрались?
А то!
извините что не по ардуино :)))
Та и занимались бы хобби "не по ардуино", Вы же "по прдуино" пытаетесь.
Я Вам сказал в какой строке ошибка, показал, что прочитаь. Чего Вы от меня ещё ждёте? Чтобы я развёл кофнйгую гущк и угадал какие там новые ошибки у Вас появились и о которых Вы не удосужились ничего сказать?
// ------------------ НАСТРОЙКИ ------------------ #define USE_POT 1 // 1-использовать потенциометр для подстройки скорости, 0-нет #define DEF_OFFSET 50 // разница между частотами (для режима БЕЗ крутилки) #define PERIOD 5000 // период переключения соленоида, мкс #define EXPO 400 // длительность вспышки света, мкс #define LIGHT_PIN 5 // пин драйвера свет #define DRV_1 6 // пин драйвера 1 соленоид #define DRV_2 7 // пин драйвера 2 соленоид #define POT_PIN 5 // пин крутилки частоты света // --------------- ДЛЯ РАЗРАБОТЧИКОВ --------------- #define SET_TIMER 500 // период опроса крутилки boolean flashState, motorState; uint16_t lightTimer, flashDelay; uint32_t motorPrev, lightPrev, setPrev; void setup() { setADCrate(2); // ускоряем analogRead // настраиваем пины как выходы pinMode(DRV_1, OUTPUT); pinMode(DRV_2, OUTPUT); pinMode(LIGHT_PIN, OUTPUT); // выставляем период работы вспышки flashDelay = PERIOD * 2 + DEF_OFFSET; } void loop() { #if (USE_POT == 1) // таймер чтения крутилок if (millis() - setPrev >= SET_TIMER) { setPrev = millis(); // период света как 2 периода мотора + подстройка flashDelay = PERIOD * 2 + analogRead(POT_PIN) - 512; } #endif // таймер света if (micros() - lightPrev >= lightTimer) { lightPrev = micros(); flashState = !flashState; // инвертируем состояние вспышки // быстрый аналог функции digitalWrite // если используете другую модель Arduino (не Nano/UNO/Mini), // замените на digitalWrite bitWrite(PORTD, LIGHT_PIN, flashState); // подаём на вспышку // перенастраиваем таймер согласно состоянию if (flashState) lightTimer = EXPO; else lightTimer = flashDelay - EXPO; } // таймер драйвера if (micros() - motorPrev >= PERIOD) { motorPrev = micros(); motorState = !motorState; // быстрый аналог функции digitalWrite // если используете другую модель Arduino (не Nano/UNO/Mini), // замените на digitalWrite bitWrite(PORTD, DRV_1, motorState); bitWrite(PORTD, DRV_2, !motorState); } } // ускорение чтения с АЦП #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) void setADCrate(byte mode) { if ((mode & (1 << 2))) sbi(ADCSRA, ADPS2); else cbi(ADCSRA, ADPS2); if ((mode & (1 << 1))) sbi(ADCSRA, ADPS1); else cbi(ADCSRA, ADPS1); if ((mode & (1 << 0))) sbi(ADCSRA, ADPS0); else cbi(ADCSRA, ADPS0); }С двойным задуплением сетапа и лупа - на форум к Гуверу. Пусть сам разбирается, что там наколбасил.
Не надо два разных скетча в одну папку класть.
Юля, для начала переведи: redefinition of 'void loop()
Не надо два разных скетча в одну папку класть.
Эт точно )))