Arduino Возвращает ошибку

rewoyot33
Offline
Зарегистрирован: 11.11.2017
#include "IRremote.h"
const int Red=7;
const int Yellow=10;
const int Green=11;
const int S=9;
const int a=440;
const int f=349;
const int c=523;
const int e= 659;
const int F=698;
const int gis=415;
IRrecv irrecv(6);

decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(Red, OUTPUT);
  pinMode(Yellow, OUTPUT);
  pinMode(Green, OUTPUT);
  pinMode(S, OUTPUT);
}

void beep(int Fq, int time)
{
  tone(S, Fq, time);
  delay(time + 20);
}

void loop() {
  if ( irrecv.decode( &results )) {
    switch (results.value) {
    case 0x14EB58A7:
        digitalWrite(Red, HIGH);
        digitalWrite(Yellow, LOW);
        digitalWrite(Green, LOW);
        break;
    case 0x14EB8877:
        digitalWrite(Red, LOW);
        digitalWrite(Yellow, HIGH);
        digitalWrite(Green, LOW);
        break;
    case 0x14EB906F:
        digitalWrite(Red, LOW);
        digitalWrite(Yellow, LOW);
        digitalWrite(Green, HIGH);
        break;
     case 0x14EBD827:
        digitalWrite(Red, LOW);
        digitalWrite(Yellow, HIGH);
        digitalWrite(Green, HIGH);
        break;
     case 0x14EB48B7:
        digitalWrite(Red, HIGH);
        digitalWrite(Yellow, LOW);
        digitalWrite(Green, HIGH);
        break;
     case 0x14EB50AF:
        digitalWrite(Red, HIGH);
        digitalWrite(Yellow, HIGH);
        digitalWrite(Green, LOW);
        break;
     case 0x14EB18E7:
        digitalWrite(Red, HIGH);
        digitalWrite(Yellow, HIGH);
        digitalWrite(Green, HIGH);
        break;
     case 0x14EBA857:
        digitalWrite(Red, LOW);
        digitalWrite(Yellow, LOW);
        digitalWrite(Green, LOW);
        break;
     case 0x14EB9867:
        beep(a, 100);
        break;
        
    }
    Serial.println( results.value, HEX );
    irrecv.resume();
 }
}

Сделала код. Без последнего case, вполне рабочий, но с его добавлением начинается лажа

Arduino: 1.8.5 (Windows 7), Плата:"Arduino/Genuino Uno"

Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'

libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

 

Пробовала ставить просто tone();, вместо всей этой лабуды, но результат тот же. Может у библиотеки IRremote, какие-то конфликты с этой коммандой?

 

rewoyot33
Offline
Зарегистрирован: 11.11.2017
В таком состоянии, код рабочий
#include "IRremote.h"
const int Red=7;
const int Yellow=10;
const int Green=11;
const int S=9;
const int a=440;
const int f=349;
const int c=523;
const int e= 659;
const int F=698;
const int gis=415;
IRrecv irrecv(6);

decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(Red, OUTPUT);
  pinMode(Yellow, OUTPUT);
  pinMode(Green, OUTPUT);
  pinMode(S, OUTPUT);
}

void loop() {
  if ( irrecv.decode( &results )) {
    switch (results.value) {
    case 0x14EB58A7:
        digitalWrite(Red, HIGH);
        digitalWrite(Yellow, LOW);
        digitalWrite(Green, LOW);
        break;
    case 0x14EB8877:
        digitalWrite(Red, LOW);
        digitalWrite(Yellow, HIGH);
        digitalWrite(Green, LOW);
        break;
    case 0x14EB906F:
        digitalWrite(Red, LOW);
        digitalWrite(Yellow, LOW);
        digitalWrite(Green, HIGH);
        break;
     case 0x14EBD827:
        digitalWrite(Red, LOW);
        digitalWrite(Yellow, HIGH);
        digitalWrite(Green, HIGH);
        break;
     case 0x14EB48B7:
        digitalWrite(Red, HIGH);
        digitalWrite(Yellow, LOW);
        digitalWrite(Green, HIGH);
        break;
     case 0x14EB50AF:
        digitalWrite(Red, HIGH);
        digitalWrite(Yellow, HIGH);
        digitalWrite(Green, LOW);
        break;
     case 0x14EB18E7:
        digitalWrite(Red, HIGH);
        digitalWrite(Yellow, HIGH);
        digitalWrite(Green, HIGH);
        break;
     case 0x14EBA857:
        digitalWrite(Red, LOW);
        digitalWrite(Yellow, LOW);
        digitalWrite(Green, LOW);
        break;
        
    }
    Serial.println( results.value, HEX );
    irrecv.resume();
 }
}

 

rewoyot33
Offline
Зарегистрирован: 11.11.2017

Я прогуглила и нашла, что у этой библиотеки "аллергия" на tone();. Статья англоязычная, гугл не переводит из-за обилия сокращений. Помогите, кто шарит

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

и нахрена темы плодить про одно и то же?

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

rewoyot33 пишет:

Пробовала ставить просто tone();, вместо всей этой лабуды, но результат тот же. Может у библиотеки IRremote, какие-то конфликты с этой коммандой?

Похоже. что да. Судя по описанию, и tone и IRremote используют таймер2

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

rewoyot33 пишет:

Я прогуглила и нашла, что у этой библиотеки "аллергия" на tone();. Статья англоязычная, гугл не переводит из-за обилия сокращений. Помогите, кто шарит

так ссылку дали бы. Тут есть такие, представляете!!!! - что и без гугля прочитать могут :)

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

DetSimen пишет:

и нахрена темы плодить про одно и то же?

там было про switch - а тут про tone ! - разница :)

Автору - если серьезно - надо было спрашивать в старой теме,

rewoyot33
Offline
Зарегистрирован: 11.11.2017