Последний раз редактировалось dragon; 20.10.2010 в 18:58.
ждем с интересом!
Продолжаем извращения. Для продолжения экспериментов был найден радар-детектор низшей ценовой категории Sho-me-1720
Внутри этой балалайки находится цельнолитой узел. Откручиваем его и видим мелкий 8 ножечный разъем
2 ноги питалово, 1 выход спектра 2 (пока не ясно что) , нога отключения гетеродина и .... нога управления частотой гетеродина (подаётся пилообразное напряжение)
В качестве просто радара - можно подключить к 2 ногам ардуино - пилообразное делаем из D2 , прием на аналоговой ноге , пилу делаем коротким импульсом заряжая емкость, который потом медленно разряжается. ....
Но это не интересно.
В течении недели сниму характеристики с гетеродина и внутреннего усилителя, на сколько быстро они могут реагировать, если фиксировать частоту гетеродина и пытаться засечь короткие импульсы на определенной частоте.
Уж не буду новую тему затевать, благо это и есть продолжение старой...
Потребовалось несколько расширить функционал проги. До сего момента все управляющие команды на Арду валились через СОМ (виртуальный, понятно, ну да не суть...)
Теперь надо помимо прочего завести еще и физическую кнопку.
Задействовал два цифровых канала - D3 на вход с кнопки, D5 - выход управления. Проинициализировал, как полагается:
В самом начале рабочего цикла прошивки вставил конструкцию:PHP код:
const int buttonPin3 = 3; // Кнопка переключение на камеру
***
const int ledPinCam = 5; // Выход переключения на камеру
digitalWrite(ledPinCam, LOW);
,PHP код:
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(ledPinCam, HIGH); в самом начале на выходе D5 стабильно висит логический ноль...
В чем могут быть грабли?
Вопрос не понятен, что за инициализация?
Ну, имелось в виду, что каналы заданы как цифровые входа/выхода (D3,D5) и задано начальное значение выхода D5=0...Вопрос не понятен, что за инициализация?
Исходное состояние выхода потому что... Смущает лишь то, что задании его HIGH (просто, чтобы проверить как оно работает) - один черт там ноль оказывается...зачем digitalWrite(ledPinCam, LOW); в глобальной области?
Код выложу уже утром (на работе он остался...)
P.S. Ну вот, собственно, и он:
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 {
}
}
}
Последний раз редактировалось Pinin; 20.07.2011 в 08:47.
А назначение режима pinMode(ledPinCam, OUTPUT) у тебя есть? Я что-то не увидел...
Ну и для входа соответственно тоже.
Есть, есть... Там в комментах везде отмечено, что вставлялось в старую прошивку.
Уже увидел Может порт дохлый?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)