Ошибка при компилировании (мой первый скетч)

fanis
Offline
Зарегистрирован: 07.06.2013

Всем привет Вот решил я связать два скетча в одну. 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() // дальномер

Я уже читал п свю пу она заключалась в том что я пытаюсь определить функцию внутри фукции.

Уже не знаю что и делать.

С нетерпением жду ваших советов!

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

У Вас две функции loop, так нельзя

maksim
Offline
Зарегистрирован: 12.02.2012

Многопоточность )

leshak
Offline
Зарегистрирован: 29.09.2011

И функции getEchoTiming() и getDistance() объявлены внутри loop() - так нельзя. Нельзя объявлять функцию внутри функции.

И, не уверен (и скорее всего не ошибка, а просто "лишние") - я бы не делал инклуда #include <IRremoteInt.h>

Думаю инклуда #include <IRremote.h> вполне достаточно (он сам, по идее должен подключить #include <IRremoteInt.h>)

leshak
Offline
Зарегистрирован: 29.09.2011

И ledPin - у вас нигде не объявлен.

Вообщем - возмите словарик и переведите эти ошибки :)  Компилятор же вам все рассказал и указал строки на которые нужно обратить внимание.

fanis
Offline
Зарегистрирован: 07.06.2013

Сделал так, компилируется.

#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;
  }

 

leshak
Offline
Зарегистрирован: 29.09.2011

Угу. Так больше похоже на правду. Только скобки фигурные в строках 50,55 - лишние. Ну то есть "не мешают", но и никакой смысловой нагрузки не несут (компилятор их проигнорит). Просто захламляют код.

fanis
Offline
Зарегистрирован: 07.06.2013

К сожалению не работает. Не работает даже Ик управление которое раньше работало, мигает только светодиод TX и отдает COM порту рандомное число. Не знаете почему так?

leshak
Offline
Зарегистрирован: 29.09.2011

А вы в "то что работало", добавте, в конце Loop()  - задержку в  delay(50) и посмотрите сможет ли оно еще работать.

А еще, посмотрите примеры идущие с IRRemote , обратите внимание на вещи типа

  if (results->decode_type == UNKNOWN) {
    Serial.println("Could not decode message");
  } 

Неплохо, пречде чем пытатся выполнить какую-то команду - убедится что мы такие ее правильно декодировали.

А еще, вам было-бы неплохо определится чем же именно занимается 11 пин. Ну него приходят сигналы от ИК-приемника или от дальномера? Ну ладно в коде, а при подключении двух устройств к одному пину вас не смутили?

fanis
Offline
Зарегистрирован: 07.06.2013

leshak пишет:

А вы в "то что работало", добавте, в конце Loop()  - задержку в  delay(50) и посмотрите сможет ли оно еще работать.

А еще, посмотрите примеры идущие с IRRemote , обратите внимание на вещи типа

  if (results->decode_type == UNKNOWN) {
    Serial.println("Could not decode message");
  } 

Неплохо, пречде чем пытатся выполнить какую-то команду - убедится что мы такие ее правильно декодировали.

А еще, вам было-бы неплохо определится чем же именно занимается 11 пин. Ну него приходят сигналы от ИК-приемника или от дальномера? Ну ладно в коде, а при подключении двух устройств к одному пину вас не смутили?

Я уже тестировал свой старый код он замечательно работал. "а при подключении двух устройств к одному пину вас не смутили?"  а тут просто опечатка! Я конечно же сменил его на 9 пин.

leshak
Offline
Зарегистрирован: 29.09.2011

fanis пишет:

Я уже тестировал свой старый код он замечательно работал. 

С delay(50) тестировали?

fanis пишет:

"а при подключении двух устройств к одному пину вас не смутили?"  а тут просто опечатка! Я конечно же сменил его на 9 пин.

И физически и в коде? Если да - значит сюда вы дали не тот вариант скетчка который заливали. 100% уверенны что это единственно отличие?

leshak
Offline
Зарегистрирован: 29.09.2011

leshak пишет:

fanis пишет:

Я уже тестировал свой старый код он замечательно работал. 

С delay(50) тестировали?

И, кстати, что-то сильно я сомневаюсь что тестировали. Или тестировали одно, сюда выкинули другой код.

Что-то в нем нигде не видно  irrecv.resume(); // Receive the next value 

Так что как оно могло у вас работать - неведомо.

fanis
Offline
Зарегистрирован: 07.06.2013

Что-то в нем нигде не видно  irrecv.resume(); // Receive the next value 

Вот только что добавил, заработало. Только вот данные обновляются только через 3 секунды, а если прикоснуться к digital выводам данны обновляются как и прежде очень часто. С чем это связано?

fanis
Offline
Зарегистрирован: 07.06.2013

Все выяснилось - Шумы. Добавил датчик, оказалось что, если близи 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;
}

 

witt84
Offline
Зарегистрирован: 18.07.2017

Здравствуйте всем. Может кто поможет. При компиляции скетча вот этого: 

#include <Encoder.h> // The rotary encoder library http://www.pjrc.com/teensy/td_libs_Encoder.html
int accel = 1;
int c = 0 ;
// This is an acceleration factor. Use between 1 and 8 to suit how quickly the volume goes up or down.
Encoder myEnc(2, 3);
long oldPosition = 0;

void setup() {
   Keyboard.begin(); 
   //Serial.begin(9600);
}
void loop() {
  long newPosition = myEnc.read() / accel;
  if (newPosition != oldPosition) {
    if(newPosition > oldPosition) { 
    Remote.increase(); //  Увеличить громкость
    delay(50); 
    Remote.clear();   
    }
    if(newPosition < oldPosition) {  
    Remote.decrease(); 
    delay(50); 
    Remote.clear(); 
    }
    
    oldPosition = newPosition;
    //Serial.println(newPosition);
    
  }
  if (digitalRead(16) == LOW && c==0) { 
   
    Remote.mute(); 
     
    delay(10); 
    Remote.clear(); 
    c=1;  
    delay (100);
  }
  if (digitalRead(16) == HIGH && c==1) { 
    c=0;  
    delay (100);
  }
}

Выходят такие ошибки :

Arduino: 1.8.3 (Windows 7), Плата:"Arduino Leonardo"
 
Изменены опции сборки, пересобираем все
C:\Users\1\Desktop\sketch_jul18a\sketch_jul18a.ino: In function 'void setup()':
 
sketch_jul18a:9: error: 'Клавиатура' не найдена. Убедитесь входит ли скетч в код '#include <Keyboard.h>'?
    Keyboard.begin(); 
 
    ^
 
C:\Users\1\Desktop\sketch_jul18a\sketch_jul18a.ino: In function 'void loop()':
 
sketch_jul18a:16: error: 'Remote' was not declared in this scope
 
     Remote.increase(); //  РЈРІРµР»РёС‡РёС‚СЊ громкость
 
     ^
 
sketch_jul18a:21: error: 'Remote' was not declared in this scope
 
     Remote.decrease(); 
 
     ^
 
sketch_jul18a:32: error: 'Remote' was not declared in this scope
 
     Remote.mute(); 
 
     ^
 
Несколько библиотек найдено для "Encoder.h"
 Используется: C:\Users\1\Documents\Arduino\libraries\Encoder
Не используется: C:\Program Files (x86)\Arduino\libraries\Encoder-master
exit status 1
'Клавиатура' не найдена. Убедитесь входит ли скетч в код '#include <Keyboard.h>'?
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 
Подскажите, где я дурак?

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

witt84 пишет:
'Клавиатура' не найдена. Убедитесь входит ли скетч в код '#include <Keyboard.h>'?

Подскажите, где я дурак?
Наверно русский для вас не родной язык,потому что  там на русском написано, что библиотека в среде не установлена.Убедитесь входит ли скетч в код '#include <Keyboard.h>

 

witt84
Offline
Зарегистрирован: 18.07.2017

Библиотеки вроде бы все есть, но нифига не работает.

michail_xx
Offline
Зарегистрирован: 09.05.2018
#include <dht.h>
 
 
 
 
 
 
 
void setup() {
  Serial.begin(9600);
  sensor.attach(A0);
  delay(1000);
 
}
 
void loop() {
  sensor.update(); 
  switch (sensor.getLastError()) {
     case DHT_ERROR_OK:
            char msg[128];
             sprintf(msg, "Temperature = %dC, Humidity = %d%%", 
                    sensor.getTemperatureInt(), sensor.getHumidityInt());
            Serial.println(msg);
            break;
        case DHT_ERROR_START_FAILED_1:
            Serial.println("Error: start failed (stage 1)");
            break;
        case DHT_ERROR_START_FAILED_2:
            Serial.println("Error: start failed (stage 2)");
            break;
        case DHT_ERROR_READ_TIMEOUT:
            Serial.println("Error: read timeout");
            break;
        case DHT_ERROR_CHECKSUM_FAILURE:
            Serial.println("Error: checksum error");
            break;
    }
 
    delay(2000);
}
 
 
 
НАЙДИТЕ ОШИБКУ 
vk007
Offline
Зарегистрирован: 16.06.2015

michail_xx пишет:

НАЙДИТЕ ОШИБКУ 

Ага, и ногой еще топни или кулаком по столу.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

michail_xx пишет:

НАЙДИТЕ ОШИБКУ 

Есть, сэр!!!!

Ошибка №1 - код вставлен неправильно! В таком виде его никто читать не будет!

electro24
Offline
Зарегистрирован: 21.05.2018

Всем привет, напишу здесь свою проблему. Нашёл в инете код для пушпула на ардуино. Данный код компилируется на старой версии ардуино 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

void (*mas[4]) (void)={poluper1, dead_time1, poluper2, dead_time2};    // массив указателей функций                            
sketch_may21a:3:34: error: 'dead_time1' was not declared in this scope
 void (*mas[4]) (void)={poluper1, dead_time1, poluper2, dead_time2};    // массив указателей функций        
sketch_may21a:3:46: error: 'poluper2' was not declared in this scope
 void (*mas[4]) (void)={poluper1, dead_time1, poluper2, dead_time2};    // массив указателей функций        
sketch_may21a:3:56: error: 'dead_time2' was not declared in this scope
 void (*mas[4]) (void)={poluper1, dead_time1, poluper2, dead_time2};    // массив указателей функций        
exit status 1
#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); 
} 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Перенесите все функции (poluper1poluper2dead_time2 и т.п.) повыше, чтобы они располагались выше их первого упоминания в тексте.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

electro24 пишет:

sketch_may21a:3:24: error: 'poluper1' was not declared in this scope

Вам же черным по англицки написано, 'poluper1' не обьявлен =)
ToRcH2565
Offline
Зарегистрирован: 16.05.2015

ЕвгенийП пишет:
Перенесите все функции (poluper1poluper2dead_time2 и т.п.) повыше, чтобы они располагались выше их первого упоминания в тексте.

Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем? и как то обьявить функцию до ее описания нельзя? или можно и тогда это совет как боротся с симптомами а не решать проблемму....

b707
Offline
Зарегистрирован: 26.05.2017

ToRcH2565 пишет:

Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем? и как то обьявить функцию до ее описания нельзя? или можно и тогда это совет как боротся с симптомами а не решать проблемму....

Все тут есть. Предварительные  обьявления функций поддерживаются.

В данном случае проще перенести функции - в том смысле, что это ПРОЩЕ ОБЬЯСНИТЬ  новичку, чем рассказывать ему. что такое предварительное обьявление :)

electro24
Offline
Зарегистрирован: 21.05.2018

Спасибо за оперативный ответ. Пробовал выше поднять void с функциями, ошибки опять пишит, можете написать как правильно строчку эту переписать? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ToRcH2565 пишет:

Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем? 

И файлы есть, и предварительно объявление никуда не делось. Только Вы попробуйте объяснить как написать предварительное объявление человеку, который Вам говорит "перенёс строчку void". Скопипастить функцию целиком - тут хоть есть надежда, что делать copy/paste он умеет, и где у функции началао, а где конец - знает.

Но, как показал ответ вопрошающего, на этот раз надежда не оправдалась. Так что предлагаю Вам попробовать объяснить ему что делать, а мы посмотрим :)))))

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

ЕвгенийП пишет:

Но, как показал ответ вопрошающего, на этот раз надежда не оправдалась. Так что предлагаю Вам попробовать объяснить ему что делать, а мы посмотрим :)))))

Так надо тогда определится с направленностью форума =) а то одних "знатоков" зарезают сразу при такого же уровня вопросах, а другим дают решение =) 

Мое имхо - дать наводку где искать, указать что функция не обьявлена, и что перед использованием надо обьявлять... если дальше будут вопросы "вида ткните носом что куда написать" - забить на тему и пойти дальше, если вопросы будут более осмысленными, и человек действительно хочет понять, а не получить готовое "без регистрации и смс" -  можно направлять в литературу, или давать примеры =)

 

пы.сы пост номер 22 в этой теме, вот если бы у ТС последовали осмысленные вопросы после этого поста.

хотябы:

1) спросил бы что значит не обьявленныи как это

2)Вот же вот оно: {тут мог бы быть кусок кода или номер строки где обьявленна функция}

electro24
Offline
Зарегистрирован: 21.05.2018

Объявил массив целым и переменные тоже,

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'.  В какую сторону теперь смотреть? Или неправильно объявил?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

electro24 пишет:

теперь пишет теперь: two or more data types in declaration of 'mas'.  В какую сторону теперь смотреть? 

Для начала в англорусский словарь или там онлайн переводчик, чтобы понять смысл фразы " two or more data types in declaration of 'mas'"

А когда он станет понятен, то уж как-нибудь определиться какого типа должен быть mas: int или void.

А вообще, если Вы не хотите постить на форум каждый чих компилятора, то смотрите в сторону книги Кернигана и Ритчи. 

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

b707, Что и требовалось доказать =) если бы человек хотел учится - половины сообщений между этим и вашим постом небыло =) а были бы совсем другие вопросы =) а тут уровень или дайте готовое(имхо - для этого тут есть раздел даже, "ищу заказчика") или не лезте со своими советами =)

 

begimot
Offline
Зарегистрирован: 29.01.2019

Доброго времени суток, помогите разобраться в коде. Нужно при включенном реле ( 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" );
}

}


 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Что по Вашему означает запись

if( Relay,LOW);

Прежде, чем отвечать, изучите вот это. Думаю, все вопросы снимутся.

 

begimot
Offline
Зарегистрирован: 29.01.2019

Спасибо, буду изучать...

begimot
Offline
Зарегистрирован: 29.01.2019

ЕвгенийП пишет:

Что по Вашему означает запись

if( Relay,LOW);

Прежде, чем отвечать, изучите вот это. Думаю, все вопросы снимутся.

вопросы остались , тоже самое происходит  или ошибка...

b707
Offline
Зарегистрирован: 26.05.2017

begimot пишет:

вопросы остались , тоже самое происходит  или ошибка...

 

Значит плохо читали - идите читать снова. Вам намекнули, что приведенная строчка абсолютно безграмотна. Раз вы даже после подсказки этого не видите - значит у вас нет даже базовых знаний. Прежде чем продолжать заниматься ардуиной - прочитайте какой-нибудь учебник.

begimot
Offline
Зарегистрирован: 29.01.2019

b707 пишет:

begimot пишет:

вопросы остались , тоже самое происходит  или ошибка...

 

Значит плохо читали - идите читать снова. Вам намекнули, что приведенная строчка абсолютно безграмотна. Раз вы даже после подсказки этого не видите - значит у вас нет даже базовых знаний. Прежде чем продолжать заниматься ардуиной - прочитайте какой-нибудь учебник.

Я смотрю тут грамотные все собрались? Я не претендую на звание лучшего программиста, а книг я уже прочитал, наверное больше чем некоторые видели и продолжаю читать, извините что не по ардуино :)))

b707
Offline
Зарегистрирован: 26.05.2017

А что вы тогда от форума хотите? Попробуйте все же, для разнообразия, прочитать что-нибудь про ардуино, например, как считать состояние пина реле

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

begimot пишет:

Я смотрю тут грамотные все собрались?

А то!

begimot пишет:

извините что не по ардуино :)))

Та и занимались бы хобби "не по ардуино", Вы же "по прдуино" пытаетесь.

Я Вам сказал в какой строке ошибка, показал, что прочитаь. Чего Вы от меня ещё ждёте? Чтобы я развёл кофнйгую гущк и угадал какие там новые ошибки у Вас появились и о которых Вы не удосужились ничего сказать?

Leroy
Offline
Зарегистрирован: 29.01.2020


Вылезает такая ошибка, помогите пожалуйста
 
SlowDance_Gyver_v1.0:32:6: error: redefinition of 'void setup()'
 
C:\Users\Юля\Documents\Arduino\sketch_jan29a\sketch_jan29a.ino:1:6: note: 'void setup()' previously defined here
 
C:\Users\Юля\Documents\Arduino\sketch_jan29a\SlowDance_Gyver_v1.0.ino: In function 'void loop()':
 
SlowDance_Gyver_v1.0:44:6: error: redefinition of 'void loop()'
 
C:\Users\Юля\Documents\Arduino\sketch_jan29a\sketch_jan29a.ino:6:6: note: 'void loop()' previously defined here
 
exit status 1
redefinition of 'void setup()'
// ------------------ НАСТРОЙКИ ------------------
#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);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

С двойным задуплением сетапа и лупа - на форум к Гуверу. Пусть сам разбирается, что там наколбасил.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Не надо два разных скетча в одну папку класть.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Юля, для начала переведи: redefinition of 'void loop()

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kalapanga пишет:

Не надо два разных скетча в одну папку класть.

Эт точно )))