2 скетча в 1

sir90
Offline
Зарегистрирован: 02.01.2016

Народ вновь нужна помощь 

Есть готовый скетч 

сигналки и датчика воды

char* RUS(char* StrIn){char* StrOut=StrIn; uint8_t i[4]={0,0,StrIn[0],StrIn[1]}; while(i[2]>0&&i[0]<255){if(i[2]==0xd0&&i[3]>0x8F&&i[3]<0xC0){StrOut[i[1]]=i[3]+0x30;i[0]++;}else if(i[2]==0xd0&&i[3]==0x81){StrOut[i[1]]=0xA8;i[0]++;}else if(i[2]==0xd1&&i[3]>0x7F&&i[3]<0x90){StrOut[i[1]]=i[3]+0x70;i[0]++;}else if(i[2]==0xd1&&i[3]==0x91){StrOut[i[1]]=0xB8;i[0]++;}else{StrOut[i[1]]=i[2];} i[0]++; i[1]++; i[2]=StrIn[i[0]]; i[3]=StrIn[i[0]+1];} StrOut[i[1]]='\0'; return StrOut;}
#include <OneWire.h>
#include "pitches.h"
const byte greenLed = 10; //зеленая лампочка
const byte redLed = 11;  //красная лампочка
const byte gerkonPin = 8; //gerkon
const byte iButtonPin = 12; //пин для ibutton
const byte tonePin = 7; // пин для пищалки
const byte waterPin = 9; // пин датчика воды
 
const byte alarmTime = 3; // время, чтобы поднести ключ при разблокировке
const byte startTime = 5; // время на закрытие двери при постановке на сигнализацию
 
OneWire  ds(iButtonPin); //ibutton
byte code1[8] = {0x01, 0xF0, 0x30, 0xB5, 0x00, 0x00, 0x00, 0xDB};  //первый ключ

 
boolean waterAlarmed = 0; //флаг сработавшего оповещения о воде
boolean alarmState = 0; //флаг работающей сигнализации
boolean gerkonState = 0; //первично закрытая дверь (1 - закрыто, 0 - открыто), пока на кнопке.
boolean Hacked = 0;
// стандартные коды: 1- включение, 2- выключение, 3- тревога
void setup()
{
    Serial.begin(115200);
    delay(2000); //задержка включения
    pinMode(greenLed, OUTPUT); //задаем режим работы пинов
    pinMode(redLed, OUTPUT);
    pinMode(waterPin, INPUT);
    pinMode(gerkonPin, INPUT);
    Notify(98); // оповещение о включении ардуино (напр. после перезагрузки)
}
void loop()
{
    byte returnedValue = 0;
    if(alarmState==0) { //Сигнализация выключена, ждем пока поднесут ключ для ВКЛЮЧЕНИЯ
        returnedValue = findKey();
        if (returnedValue == 1)  { // нашли известный ключ
            guardON(); //вкл статус сигнализации
        }
    }
    if(alarmState==1) { // если включена сигнализация, то
        gerkonState = digitalRead(gerkonPin); //смотрим геркон
       //  Serial.println(gerkonState, HEX);
        if (gerkonState == 1 && Hacked != 1) { //открылась дверь и квартира не взломана ;)
            Notify(1); // сообщаем компьютеру об открытии двери
            alarmON(); //включаем сигналку
        }
        returnedValue = findKey(); //нужно выключить изнутри квартиры
        if (returnedValue == 1)  { // нашли известный ключ и
            alarmState=0;
            guardOFF();
        }
    }
    returnedValue = 0; //обнуляем для обработки датчиков воды
    //returnedValue = checkWater();
    //if (returnedValue==1) { // запускаем оповещение о срабатывании датчика воды
    //  Notify(10); //сообщаем о срабатывании датчика воды
    //}
    delay (500);
}
int checkWater() //функция проверки датчика воды
{
    int WsensorState = analogRead(waterPin);
    Serial.println(WsensorState);
    if (WsensorState == 1 && waterAlarmed == 0){
        waterAlarmed =1;
        return 1;
    }
    return 0;
}
int findKey() // функция поиска ключа



{
    byte i;
    byte addr[8];
    byte checkOK = 0; //счетчик совпадений массива с эталоном
    //Serial.println("searching key...");
    if (!ds.search(addr)) {  // тут надо сделать нормально сделатЬ!!!
    //Serial.println("No key connected..."); // сообщаем об этом
ds.reset_search();
delay(200);
return; // и прерываем программу

        for(int i = 0; i<8; i++) 
Serial.print(addr[i],HEX);
Serial.print(" ");
}
Serial.println("\n");


for (int i=0; i<8; i++)
  
            if (addr[i]==code1[i]) {
                checkOK++;
            }
        
        if (checkOK == 8 ){
        return 1;
    }
return 0;
}



void guardON() // выполнение действие при на сигнализацию
{
    int j;
    alarmState=1; //включаем статус сигнализации
    guardSound(1); //бибикаем
    for (j=0; j < startTime; j++) {
        guardBlink(1); //моргаем лампочками и ждем время для закрытия двери
    }
    Notify(0);
}
void guardOFF() // выполнение действие при снятии с сигнализации
{
    alarmState=0; // выключаем статус сигнализации
    Hacked = 0; // отменям статус "взломано"
    digitalWrite(greenLed, HIGH);
    guardSound(2); //бибикаем
    guardBlink(2); //моргаем лампочками
    Notify(3);
}
int alarmON() // выполнение действий при срабатывании сигнализации
{
    int checkcount=0;
    while (checkcount < alarmTime) { // даем alarmTime секунд для поднесения ключа
        int alarmCancel = findKey(); //ищем ключик
        if (alarmCancel == 1) { // нашли ключ
            guardOFF(); //отключаем сигналку,
            break; // выходим из цикла
        }
        checkcount++;
        guardBlink(3); //пищим о том, что ищем ключ
        guardSound(3); //светим о том, что ищем ключ
    }
    if (checkcount==alarmTime) { // если не нашли, то включаем оповещение
        Notify(2);
        guardBlink(4); //пищим о том, что УСЁ ПРОПАЛО
        guardSound(4); //светим о том, что УСЁ ПРОПАЛО
        Hacked = 1;
    }
}
int guardBlink (int x) //функция светового оповещения
{
    if (x==1) { // первое ожидание для закрытия двери.
        digitalWrite(redLed, LOW);
        digitalWrite(greenLed, HIGH);
        delay(500);
        digitalWrite(redLed, HIGH);
        digitalWrite(greenLed, LOW);
        delay(500);
    }
    if (x==2) { // выключаем сигнализацию и диоды
        digitalWrite(redLed, HIGH);
        digitalWrite(greenLed, HIGH);
    }
    if (x==3) { // во время ожидания ключа при открытой двери
        digitalWrite(redLed, LOW);
        delay (250);
        digitalWrite(redLed, HIGH);
        delay (250);
    }
    if (x==4) { // просрочено, ахтунг
        digitalWrite(redLed, LOW);
    }
}
int guardSound (int x)  //функция звукового оповещения
{
    if (x==1) {
        int melody[] = { // музыка при включении сигнализацию
            NOTE_DS8, NOTE_DS8, NOTE_DS8
        };
        int noteDurations[] = {
            4,4,4
        };
        for (int thisNote = 0; thisNote < 3; thisNote++) {
            int noteDuration = 1000/noteDurations[thisNote];
            tone(tonePin, melody[thisNote],noteDuration);
            int pauseBetweenNotes = noteDuration * 1.30;
            delay(pauseBetweenNotes);
            noTone(tonePin);
        }
    }
    if (x==2) { // выключаем сигнализацию
        int melody[] = {
            NOTE_C2, NOTE_G1,NOTE_G2, NOTE_A1, NOTE_G1,0, NOTE_B2, NOTE_C3
        };
        int noteDurations[] = {
            4, 8, 8, 4,4,4,4,4
        };
        for (int thisNote = 0; thisNote < 3; thisNote++) {
            int noteDuration = 1000/noteDurations[thisNote];
            tone(tonePin, melody[thisNote],noteDuration);
            int pauseBetweenNotes = noteDuration * 1.30;
            delay(pauseBetweenNotes);
            noTone(tonePin);
        }
    }
    if (x==3) { //тон ожидания ключа
        tone(tonePin,NOTE_C4, 100);
    }
    if (x==4) { //тон просроченного ключа
        tone(tonePin, 500); //включаем на 500 Гц
        delay(100); //ждем 100 Мс
        tone(tonePin, 1000); //включаем на 1000 Гц
        delay(100); //ждем 100 Мс
    }
}
int Notify(int x) //функция оповещения в последователньый порт
{
    if (x==0) { // оповещение о постановке на сигнализацию
        Serial.println(RUS("Сигнализация включена"));
    }
    if (x==1) { // оповещение о открытии двери
        Serial.println(RUS("Дверь открыта"));
    }
    if (x==2) { // оповещение о взломе квартиры!
        Serial.println(RUS("Тревога, проникновение"));
    }
    if (x==3) { // оповещение о выключении сигнализации
        Serial.println(RUS("Сигнализация отключена"));
    }
    if (x==98) { // оповещение о включении ardunio
        Serial.println(RUS("Устройство готово к работе"));
    }
    if (x==99) { // оповещение о ОШИБКЕ
        Serial.println(RUS("Ошибка"));
    }
}

так же написал скетч для дверного звонка (по принцепу нажал кнопку играет пару секунд и останавлмваеться)

#include "pitches.h"
const byte tonePin = 7; // пин для пищалки

void setup() 
{
Serial.begin(9600);
pinMode(8,OUTPUT);//конфигурируем пин как выход ( к нему подключен светодиод)
digitalWrite(14,HIGH);//включаем внутренний pull-up резистор
pinMode(13, OUTPUT);
}

void loop() 
{
  
  int buttonState = digitalRead(14);
  Serial.println(buttonState, DEC);
  delay(1);

if (buttonState < 1)

{
        int melody[] = { // музыка при включении сигнализацию


  NOTE_DS5, NOTE_E5,  NOTE_FS5, NOTE_B5,  NOTE_DS5, NOTE_E5, 
  NOTE_FS5, NOTE_B5,  NOTE_CS6, NOTE_DS6, NOTE_CS6, NOTE_AS5, 
  NOTE_B5,  
  NOTE_FS5, NOTE_DS5, NOTE_E5,  NOTE_FS5, NOTE_B5, 
  NOTE_CS6, NOTE_AS5, NOTE_B5,  NOTE_CS6, NOTE_E6,  
  NOTE_DS6, NOTE_E6,  NOTE_CS6,
  //Total of 26
  NOTE_FS5, NOTE_GS5, NOTE_DS5, NOTE_DS5,0,NOTE_B4,  NOTE_D5, 
  NOTE_CS5, NOTE_B4,0,NOTE_B4,  NOTE_CS5,  NOTE_D5,  NOTE_D5, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5, NOTE_DS5,  NOTE_FS5, NOTE_GS5, 
  NOTE_DS5, NOTE_FS5, NOTE_CS5, NOTE_DS5,  NOTE_B4,  NOTE_CS5, 
  NOTE_B4,  NOTE_DS5, NOTE_FS5, NOTE_FS5,  NOTE_DS5, NOTE_FS5, 
  NOTE_CS5, NOTE_DS5, NOTE_B4,  NOTE_D5,   NOTE_DS5, NOTE_D5, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5, NOTE_D5, 0,NOTE_B4,  NOTE_CS5, 
  NOTE_DS5, NOTE_FS5, NOTE_CS5, NOTE_DS5,  NOTE_CS5, NOTE_B4, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5,
  //Total of 54
  NOTE_FS5, NOTE_GS5, NOTE_DS5, NOTE_DS5,0,NOTE_B4,  NOTE_D5, 
  NOTE_CS5, NOTE_B4,0,NOTE_B4,  NOTE_CS5,  NOTE_D5,  NOTE_D5, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5, NOTE_DS5,  NOTE_FS5, NOTE_GS5, 
  NOTE_DS5, NOTE_FS5, NOTE_CS5, NOTE_DS5,  NOTE_B4,  NOTE_CS5, 
  NOTE_B4,  NOTE_DS5, NOTE_FS5, NOTE_FS5,  NOTE_DS5, NOTE_FS5, 
  NOTE_CS5, NOTE_DS5, NOTE_B4,  NOTE_D5,   NOTE_DS5, NOTE_D5, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5, NOTE_D5, 0,NOTE_B4,  NOTE_CS5, 
  NOTE_DS5, NOTE_FS5, NOTE_CS5, NOTE_DS5,  NOTE_CS5, NOTE_B4, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5,
  //Total of 54
  NOTE_B4, NOTE_FS4, NOTE_GS4, NOTE_B4, NOTE_FS4, NOTE_GS4, 
  NOTE_B4, NOTE_CS5, NOTE_DS5, NOTE_B4, NOTE_E5,  NOTE_DS5,
  NOTE_E5, NOTE_FS5, NOTE_B4,  NOTE_B4, NOTE_FS4, NOTE_GS4,
  NOTE_B4, NOTE_FS4, NOTE_E5,  NOTE_DS5,NOTE_CS5, NOTE_B4,
  NOTE_FS4,NOTE_DS4, NOTE_E4,  NOTE_FS4,NOTE_B4,  NOTE_FS4,
  NOTE_GS4,NOTE_B4,  NOTE_FS4, NOTE_GS4,NOTE_B4,  NOTE_B4,
  NOTE_CS5,NOTE_DS5, NOTE_B4,  NOTE_FS4,NOTE_GS4, NOTE_FS4,
  NOTE_B4, NOTE_B4,  NOTE_AS4, NOTE_B4, NOTE_FS4, NOTE_GS4,
  NOTE_B4, NOTE_E5,  NOTE_DS5, NOTE_E5, NOTE_FS6, NOTE_B4,
  NOTE_AS4,
  //Total of 55
  NOTE_B4, NOTE_FS4, NOTE_GS4, NOTE_B4, NOTE_FS4, NOTE_GS4, 
  NOTE_B4, NOTE_CS5, NOTE_DS5, NOTE_B4, NOTE_E5,  NOTE_DS5,
  NOTE_E5, NOTE_FS5, NOTE_B4,  NOTE_B4, NOTE_FS4, NOTE_GS4,
  NOTE_B4, NOTE_FS4, NOTE_E5,  NOTE_DS5,NOTE_CS5, NOTE_B4,
  NOTE_FS4,NOTE_DS4, NOTE_E4,  NOTE_FS4,NOTE_B4,  NOTE_FS4,
  NOTE_GS4,NOTE_B4,  NOTE_FS4, NOTE_GS4,NOTE_B4,  NOTE_B4,
  NOTE_CS5,NOTE_DS5, NOTE_B4,  NOTE_FS4,NOTE_GS4, NOTE_FS4,
  NOTE_B4, NOTE_B4,  NOTE_AS4, NOTE_B4, NOTE_FS4, NOTE_GS4,
  NOTE_B4, NOTE_E5,  NOTE_DS5, NOTE_E5, NOTE_FS6, NOTE_B4,
  NOTE_CS5,
  //Total of 55
  NOTE_FS5, NOTE_GS5, NOTE_DS5, NOTE_DS5,0,NOTE_B4,  NOTE_D5, 
  NOTE_CS5, NOTE_B4,0,NOTE_B4,  NOTE_CS5,  NOTE_D5,  NOTE_D5, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5, NOTE_DS5,  NOTE_FS5, NOTE_GS5, 
  NOTE_DS5, NOTE_FS5, NOTE_CS5, NOTE_DS5,  NOTE_B4,  NOTE_CS5, 
  NOTE_B4,  NOTE_DS5, NOTE_FS5, NOTE_FS5,  NOTE_DS5, NOTE_FS5, 
  NOTE_CS5, NOTE_DS5, NOTE_B4,  NOTE_D5,   NOTE_DS5, NOTE_D5, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5, NOTE_D5, 0,NOTE_B4,  NOTE_CS5, 
  NOTE_DS5, NOTE_FS5, NOTE_CS5, NOTE_DS5,  NOTE_CS5, NOTE_B4, 
  NOTE_CS5, NOTE_B4,  NOTE_CS5};

  

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  8, 8, 4, 4, 8, 8, 
  8, 8, 8, 8, 8, 8, 
  4, 
  4, 8, 8, 4, 4, 
  8, 8, 8, 8, 8, 
  8, 8, 8,
  
  4, 4,  8, 8,8,8, 8, 
  8, 8,8,4, 4,  4, 8, 
  8, 8,  8, 8,  8, 8,
  8, 8,  8, 8,  8, 8,
  8, 4,  4, 8,  8, 8, 
  8, 8,  8, 8,  8, 8,
  8, 8,  8, 8,8,8, 8, 
  8, 8,  8, 8,  8, 8,
  4, 4,  4,
  
  4, 4,  8, 8,8,8, 8, 
  8, 8,8,4, 4,  4, 8, 
  8, 8,  8, 8,  8, 8,
  8, 8,  8, 8,  8, 8,
  8, 4,  4, 8,  8, 8, 
  8, 8,  8, 8,  8, 8,
  8, 8,  8, 8,8,8, 8, 
  8, 8,  8, 8,  8, 8,
  4, 4, 4,

  4, 8, 8, 4, 8, 8,
  8, 8, 8, 8, 8, 8,
  8, 8, 4, 4, 8, 8,
  8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 4, 8,
  8, 4, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8,
  4, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 4,
  4,

  4, 8, 8, 4, 8, 8,
  8, 8, 8, 8, 8, 8,
  8, 8, 4, 4, 8, 8,
  8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 4, 8,
  8, 4, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8,
  4, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 4,
  4,
  
  4, 4,  8, 8,8,8, 8, 
  8, 8,8,4, 4,  4, 8, 
  8, 8,  8, 8,  8, 8,
  8, 8,  8, 8,  8, 8,
  8, 4,  4, 8,  8, 8, 
  8, 8,  8, 8,  8, 8,
  8, 8,  8, 8,8,8, 8, 
  8, 8,  8, 8,  8, 8,
  4, 4,  4};


  for (int thisNote = 0; thisNote < 244; thisNote++) {

    // to calculate the note duration, take one second 
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    
    tone(tonePin, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(244);
    //if (thisNote == 27) thisNote = 0;
            }
}
else
{
  // действие B
}

так вот мне нужно второй скетч "запихнуть" в первый скетч.

Одноих обьединяет: пьезо динамик висит на 7 пине

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

sir90 пишет:

так же написал скетч для дверного звонка (по принцепу нажал кнопку играет пару секунд и останавлмваеться)

Скачал откуда-то и ни хрена в нём не понимаю, правильно?

bwn
Offline
Зарегистрирован: 25.08.2014

В целом легко, берем два невпихуемых скетча, делаем из одного впихуемый и засовываем его в невпихуемый.)))

valera678
Offline
Зарегистрирован: 04.11.2016

первый у меня вовсе не компилируется

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

valera678
Offline
Зарегистрирован: 04.11.2016

там и у второго скеййтча в синтаксе ошибки. вот бы на источник этих кодов взглянуть

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

valera678 пишет:

там и у второго скеййтча в синтаксе ошибки. вот бы на источник этих кодов взглянуть

Боюсь, это только Вам интересно, ТС уже неделю, как забил на это дело :)