CapacitiveSensor.h
- Войдите на сайт для отправки комментариев
Пнд, 25/04/2016 - 22:32
Я в этом деле новичек, но у меня получилось сделать рабочий сенсор.
мне надо теперь понять как использовать его в программе.
#include <CapacitiveSensor.h>
int Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int koncevik1 = 6; // входящий сигнал
int koncevik2 = 7; // входящий сигнал
int signal1 = 8; // входящий сигнал
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // сенсор подключен к пинам 2 и 4
void setup()
{
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
Serial.begin(9600);
pinMode(Reley1, OUTPUT);
pinMode(Reley2, OUTPUT);
pinMode(koncevik1, INPUT);
pinMode(koncevik2, INPUT);
pinMode(signal1, INPUT);
}
void loop()
{
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
Serial.print(millis() - start); // check on performance in milliseconds
Serial.print("\t"); // tab character for debug windown spacing
Serial.print(total1); // print sensor output 1
Serial.print("\t");
delay(1000); // arbitrary delay to limit data to serial port
}
мне надо чтоб когда на 8 пин приходит сигнал, включалось реле1 и ждало сигнал с концевика1,
а потом когда на емкостном датчике появится рука, подождать 5 секунд и включить реле 2, отключить когда появится сигнал на концевике2.
циферки которые выдает сомпорт с датчика когда руки нет:
1 0 1 3 2 0 2 0 2 6 1 5 1 7 2 6 2 8 1 16 1 25 2 24 2 0 1 30 2 28 2 0 2 0 2 1 1 20 1 42 2 44 2 46 1 38 2 37 2 35 2 33 1 34 1 33 2 34 2 37 1 35 1 38 2 44 2 47 1 54 1 57 2 60 2 60 1 63 2 60 2 60
когда рука есть:
14859 32 11597 33 11913 39 14694 40 14719 40 14703 30 11322 33 11874 40 14708 40 14879 40 14779 40 14725 41 14713 41 14810 31 11344 32 11791 40 14733
#include <CapacitiveSensor.h> int Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1) int Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1) int koncevik1 = 6; // входящий сигнал int koncevik2 = 7; // входящий сигнал int signal1 = 8; // входящий сигнал CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // сенсор подключен к пинам 2 и 4 void setup() { cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example Serial.begin(9600); pinMode(Reley1, OUTPUT); pinMode(Reley2, OUTPUT); pinMode(koncevik1, INPUT); pinMode(koncevik2, INPUT); pinMode(signal1, INPUT); } void loop() { digitalWrite(Reley1,HIGH); digitalWrite(Reley2,HIGH); long start = millis(); long total1 = cs_4_2.capacitiveSensor(30); Serial.print(millis() - start); // check on performance in milliseconds Serial.print("\t"); // tab character for debug windown spacing Serial.print(total1); // print sensor output 1 Serial.print("\t"); delay(1000); // arbitrary delay to limit data to serial port if (total1 >500) { Reley1 = LOW; delay(1000); } }почему не щелкает реле когда прикладываю палец, в консоле тотал стабильно >500
#include <CapacitiveSensor.h> const byte Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1) const byte Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1) const byte koncevik1 = 6; // входящий сигнал --> с подтяжкой резистором 10k к +5В const byte koncevik2 = 7; // входящий сигнал --> с подтяжкой резистором 10k к +5В const byte signal1 = 8; // входящий сигнал --> с подтяжкой резистором 10k к +5В const unsigned int tresholdValue = 400; // пороговое значение сенсора, выше которого включаем реле CapacitiveSensor cs_4_2 = CapacitiveSensor(4, 2); // сенсор подключен к пинам 2 и 4 void setup() { cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example Serial.begin(9600); pinMode(Reley1, OUTPUT); pinMode(Reley2, OUTPUT); pinMode(koncevik1, INPUT); pinMode(koncevik2, INPUT); pinMode(signal1, INPUT); } void loop() { static unsigned int phase; unsigned long total1; if (digitalRead(signal1 == HIGH)) // приходит сигнал { Serial.println("Signal detected!"); Serial.print("Phase #"); Serial.print(phase); Serial.println("starting."); digitalWrite(Reley1, LOW); // включается реле1 Serial.println("Relay #1: ON"); Serial.print("Waiting for switch #1..."); while (digitalRead(koncevik1 != HIGH)); // тупим, пока не сработает концевик1 Serial.println("Bingo!"); digitalWrite(Reley1, HIGH); // отключается реле1 Serial.println("Relay #1: OFF"); do { total1 = cs_4_2.capacitiveSensor(30); Serial.print("Sensor value: "); Serial.println(total1); // print sensor output 1 delay(100); // arbitrary delay to limit data to serial port } while (total1 < tresholdValue); // ждем руку Serial.print("Waiting 5 sec..."); delay(5000); // тупим 5 сек Serial.println("Done."); digitalWrite(Reley2, LOW); // включается реле2 Serial.println("Relay #2: ON"); Serial.print("Waiting for switch #2..."); while (digitalRead(koncevik2 != HIGH)); // тупим, пока не сработает концевик2 Serial.println("Bingo!"); digitalWrite(Reley2, HIGH); // отключается реле2 Serial.println("Relay #2: OFF"); Serial.print("Phase #"); Serial.print(phase); Serial.println("finished."); } }быдлокод, конечно, но какое ТЗ, такой и результат :)
потому что ты не включаешь реле, а присваиваешь переменной Reley1 значение LOW
спасибо огромное)))
что-то не так, резисторы переткнул на + , реле моментально выключаются
#include <CapacitiveSensor.h> int Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1) int Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1) int koncevik1 = 6; // входящий сигнал int koncevik2 = 7; // входящий сигнал int signal1 = 8; // входящий сигнал CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // сенсор подключен к пинам 2 и 4 void setup() { cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example Serial.begin(9600); pinMode(Reley1, OUTPUT); pinMode(Reley2, OUTPUT); pinMode(koncevik1, INPUT); pinMode(koncevik2, INPUT); pinMode(signal1, INPUT); } void loop() { digitalWrite(Reley1,HIGH); digitalWrite(Reley2,HIGH); /* long start = millis();*/ long total1 = cs_4_2.capacitiveSensor(30); /* Serial.print(millis() - start); // check on performance in milliseconds Serial.print("\t"); // tab character for debug windown spacing*/ Serial.print(total1); // print sensor output 1 Serial.print("\t"); // arbitrary delay to limit data to serial port if (digitalRead(signal1 == HIGH)) { digitalWrite(Reley1, LOW); while (digitalRead(koncevik1 == HIGH)); digitalWrite(Reley1, HIGH); } if (total1 >5000) { digitalWrite(Reley2, LOW); while (digitalRead(koncevik2 == HIGH)); digitalWrite(Reley1, HIGH); } }на сигнал 1 всегда приходит сигнал, даже когда его туда не посылали, всегда, а концевики не когда не срабатывают, я пробовал стовать и ==LOW, и !=LOW, и ==HIGH, и !=HIGH,
нарисуйте как подключены signal1 и koncevik1
но я пробовал и с резисторами на +.
#include <CapacitiveSensor.h> int Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1) int Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1) int koncevik1 = 6; // входящий сигнал int koncevik2 = 7; // входящий сигнал int signal1 = 8; // входящий сигнал CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // сенсор подключен к пинам 2 и 4 void setup() { cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example Serial.begin(9600); pinMode(Reley1, OUTPUT); pinMode(Reley2, OUTPUT); pinMode(koncevik1, INPUT); pinMode(koncevik2, INPUT); pinMode(signal1, INPUT); } void loop() { digitalWrite(Reley1,HIGH); digitalWrite(Reley2,HIGH); /* long start = millis();*/ long total1 = cs_4_2.capacitiveSensor(30); /* Serial.print(millis() - start); // check on performance in milliseconds Serial.print("\t"); // tab character for debug windown spacing*/ Serial.print(total1); // print sensor output 1 /* Serial.print("\t"); */ delay(100); // arbitrary delay to limit data to serial port if (digitalRead(signal1 == HIGH)) { digitalWrite(Reley1, LOW); while (digitalRead(koncevik1 != HIGH)); digitalWrite(Reley1, HIGH); } if (total1 >500) { digitalWrite(Reley2, LOW); while (digitalRead(koncevik2 != HIGH)); digitalWrite(Reley1, HIGH); } }помогите понять почему не работает, сенсор работает включает реле, а сигналы(концевик 1 и 2, и сигнал 1) не работают.
Вроде заработало, сделал так, проверте пожалусто ктонибудь, там задача еще немного изменилась, теперь двумя реле управляют сигналы и концевики, а третье реле включается с датчика и больше не выключается до перезагрузки.
#include <CapacitiveSensor.h> int Reley1 = 10; // порт к которму подключен пин IN реле int Reley3 = 11; int Reley2 = 12; // порт к которму подключен пин IN реле int koncevik1 = 6; // входящий сигнал int koncevik2 = 7; // входящий сигнал int signal1 = 8; // входящий сигнал int signal2 = 9; boolean val1 = 0; boolean val4 = 0; boolean val3 = 0; boolean val2 = 0; CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // сенсор подключен к пинам 2 и 4 void setup() { cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example Serial.begin(9600); pinMode(Reley1, OUTPUT); pinMode(Reley2, OUTPUT); pinMode(Reley3, OUTPUT); pinMode(koncevik1, INPUT); pinMode(koncevik2, INPUT); pinMode(signal1, INPUT); pinMode(signal1, INPUT); } void loop() { digitalWrite(Reley1,HIGH); digitalWrite(Reley2,HIGH); /* long start = millis();*/ long total1 = cs_4_2.capacitiveSensor(30); /* Serial.print(millis() - start); // check on performance in milliseconds Serial.print("\t"); // tab character for debug windown spacing*/ Serial.print(total1); // print sensor output 1 Serial.print("\t"); delay(100); // arbitrary delay to limit data to serial port val1 = digitalRead(signal1); val3 = digitalRead(signal2); if (digitalRead(val1 == 1)) { digitalWrite(Reley1, LOW); do { val2 = digitalRead(koncevik1); } while (val2 == 1); digitalWrite(Reley1,HIGH); } if (digitalRead(val3 == 1)) { digitalWrite(Reley2, LOW); do { val2 = digitalRead(koncevik1); } while (val2 == 1); digitalWrite(Reley2,HIGH); } if (total1 >500) { digitalWrite(Reley3, LOW); } }UPD, не не работает,почимуто одно из реле включается с с 6 пина, хотя вроде не должно