2 скетча в 1
- Войдите на сайт для отправки комментариев
Ср, 08/02/2017 - 22:37
Народ вновь нужна помощь
Есть готовый скетч
сигналки и датчика воды
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 пине
так же
написалскетч для дверного звонка (по принцепу нажал кнопку играет пару секунд и останавлмваеться)Скачал откуда-то и ни хрена в нём не понимаю, правильно?
В целом легко, берем два невпихуемых скетча, делаем из одного впихуемый и засовываем его в невпихуемый.)))
первый у меня вовсе не компилируется
Ну тогда сначала нужно из некомпилируемого скетча сделать компилируемый, и только после этого заботиться о впихуемости.
там и у второго скеййтча в синтаксе ошибки. вот бы на источник этих кодов взглянуть
там и у второго скеййтча в синтаксе ошибки. вот бы на источник этих кодов взглянуть
Боюсь, это только Вам интересно, ТС уже неделю, как забил на это дело :)