PHP код:
/*
Семь кнопок:
Вкл/Выкл питания нагрузки
Режим 1 (короткое нажатие)
Режим 1 (длинное нажатие)
Режим 2 (короткое нажатие)
Режим 2 (длинное нажатие)
Громкость +
Громкость -
Питание на нагрузку подается либо при начальной инициализации системы,
либо программно (для вкл/выкл нагрузки без снятия питания со всей системы)
По включению питания формируется импульс сброса самотестирования нагрузки.
Громкость выставляется в предустановленный уровень.
The circuit:
* Оптрон Режима 1 attached from pin 9 to ground
* Оптрон Режима 2 attached from pin 11 to ground
* Оптрон Вкл/Выкл attached from pin 7 to ground
* Оптрон "Громкость" attached from pin 10 to ground
* pin 8 attached to pin 11
* pin 7 attached to pin 12
******************
modified 22.01.2010
*/
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin1 = 12; // Вход с питания
const int buttonPin2 = 8; // Вход с формирователя сброса
const int buttonPin7 = 6; // Включение/выключение питания
const int buttonPin3 = 3; // Кнопка переключения на камеру- ДОБАВЛЕНО
const int ledPin5 = 9; // Управление 1 режимом
const int ledPin4 = 11; // Управление 2 режимом/Ипульс сброса теста
const int ledPin2 = 7; // Включение нагрузки
const int redPin = 10; // Управление громкостью
const int ledPinCam = 5; // Переключение на камеру - ДОБАВЛЕНО
int val;
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
int redLEDValue = 50; // Предустановленный уровень громкости
void setup() {
Serial.begin(115200); //установка порта
// initialize the LED pin as an output:
pinMode(ledPin2, OUTPUT);
pinMode(ledPinCam, OUTPUT); //- ДОБАВЛЕНО
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(redPin, OUTPUT); // sets the pins as output
// initialize the pushbutton pin as an input:
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin7, INPUT);
pinMode(buttonPin3, INPUT); //- ДОБАВЛЕНО
analogWrite(redPin, redLEDValue);
// turn LED on:
digitalWrite(ledPin2, HIGH); // Первое включение системы
digitalWrite(ledPinCam, LOW); //- ДОБАВЛЕНО
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin1);
// Если питание подано, формируется импульс сброса с задержкой 2 сек:
if (buttonState == HIGH) {
// turn LED on:
delay(2000); // пауза на сброс теста for a 2 second (подбирается вручную)
digitalWrite(ledPin5, HIGH); // Импульс сброса 1 сек
delay(1000);
}
else {
}
}
void loop() {
// Если нагрузка уже инициалирована, переход в рабочую программу
while (digitalRead(buttonPin1) == HIGH) {
work();
}
// Если нагрузка не инициалирована, переход в инициализацию
while (digitalRead(buttonPin1) == LOW) {
initial();
}
}
void initial(){
delay(1000); // пауза на включение
// Выбор режима Вкл/Выкл:
if (Serial.available()) //если есть принятый символ,
{
val = Serial.read(); // то читаем его и сохраняем в val
buttonState = digitalRead(buttonPin7);
if (val == 'd') {
// turn LED on:
digitalWrite(ledPin2, HIGH); // Включение питания
}
else {
}
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin1);
// Если питание подано, формируется импульс сброса с задержкой 2 сек:
if (buttonState == HIGH) {
// turn LED on:
delay(2000); // пауза на сброс теста for a 2 second (подбирается вручную)
digitalWrite(ledPin5, HIGH); // Импульс сброса 1 сек
delay(1000);
}
else {
}
// Если импульс сброса сформирован, переход к рабочему циклу
while (digitalRead(buttonPin2) == HIGH) {
work();
}
}
}
void work(){
//- ДОБАВЛЕНЫЙ БЛОК
buttonState = digitalRead(buttonPin3);
// Если кнопка нажата, формируется 2 импульса переключения с задержкой 1 сек:
if (buttonState == HIGH) {
// turn LED on:
delay(1000);
digitalWrite(ledPinCam, HIGH); // Первый импульс
delay(1000);
digitalWrite(ledPinCam, LOW);
delay(1000);
digitalWrite(ledPinCam, HIGH); // Второй импульс
delay(1000);
digitalWrite(ledPinCam, LOW);
}
// КОНЕЦ ДОБАВЛЕННОГО БЛОКА
digitalWrite(ledPin5, LOW); // Снятие импульса сброса
// Выбор режима 1 короткое/длинное нажатие:
if (Serial.available()) //если есть принятый символ,
{
val = Serial.read(); // то читаем его и сохраняем в val
if (val == '1') {
// turn LED on:
digitalWrite(ledPin4, HIGH);
delay(1000); // Короткое нажатие (Реж.1)
digitalWrite(ledPin4, LOW); // set the LED off
}
else {
// turn LED off:
digitalWrite(ledPin4, LOW);
}
if (val == '3') {
// turn LED on:
digitalWrite(ledPin4, HIGH);
delay(5000); // Длинное нажатие (Реж.1)
digitalWrite(ledPin4, LOW); // set the LED off
}
else {
// turn LED off:
digitalWrite(ledPin4, LOW);
}
// Выбор режима 2 короткое/длинное нажатие:
if (val == '5') {
// turn LED on:
digitalWrite(ledPin5, HIGH);
delay(1000); // Короткое нажатие (Реж.2)
digitalWrite(ledPin5, LOW); // set the LED off
}
else {
// turn LED off:
digitalWrite(ledPin5, LOW);
}
if (val == '7') {
// turn LED on:
digitalWrite(ledPin5, HIGH);
delay(5000); // Длинное нажатие (Реж.2)
digitalWrite(ledPin4, LOW); // set the LED off
}
else {
// turn LED off:
digitalWrite(ledPin5, LOW);
}
if (val == 'b' && redLEDValue > 1){ // Уменьшение громкости
redLEDValue -= 1; // Red down
}
if (val == '9' && redLEDValue < 255 ) { // Увеличение громкости
redLEDValue += 1; // Red up
}
// analogWrite() expects 2 parameters, the object/pin and a value between 0 (off) and 255 (full on)
analogWrite(redPin, redLEDValue); // Write current values to LED pins
delay(50);
// Включение/выключение питания:
if (val == 'd') {
// turn LED on:
digitalWrite(ledPin2, LOW);
delay(1000); //
digitalWrite(ledPin2, LOW); // set the LED off
}
else {
}
}
}