Pinin


с нами с 17 Мая 2011 года.

Проекты и идеиСтояла задача интегрировать радар-детект

Стояла задача интегрировать радар-детектор Stinger S650 в автомобиль. Установка должна была быть скрытной, т.е. доступа к органам управления девайсом не предусматривалось. Так же необходимо было избавиться от режима самотестирования при подаче питания. При наличии в авто CarPC естественным желанием было завязать все это в кучку посредством Арду. Что и было сделано.

Полный отчет на сайте проекта: (http://carpc-project.ru, раздел «Ну и хау?» статья "Stinger S650"). Теперь все управление — через тачскрин автомобильного компьютера. И при включении питания РД уже не заливается воплями и писками, имитируя в течении минуты обнаружение различных радаров…

Прошивка Арду:

/*
  Семь кнопок: 
  Вкл/Выкл питания нагрузки
  Режим 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
  
  carpc-project.ru
 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 ledPin5 =  9;        // Управление 1 режимом
const int ledPin4 =  11;       // Управление 2 режимом/Ипульс сброса теста
const int ledPin2 =  7;        // Включение нагрузки
const int redPin   = 10;       // Управление громкостью
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(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);
  analogWrite(redPin, redLEDValue);

    // turn LED on:    
    digitalWrite(ledPin2, HIGH); // Первое включение системы
   
  // 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(){
  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 >


Скетч управляющей проги:

import processing.serial.*;   
Serial port;  
int x,y,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6, w1,h1,w6,h6,lock;

PImage bs;     // Все кнопки не нажаты 
PImage dw;     // Все кнопки не нажаты, нажата "DIM" 
PImage dw1;    // Все кнопки не нажаты, нажата "MENU" 
PImage dw2;    // Все кнопки не нажаты, нажата "MUTE" 
PImage dw3;    // Все кнопки не нажаты, нажата "HW/CITY" 
PImage dw4;    // Все кнопки не нажаты, нажата "VOL_UP" 
PImage dw5;    // Все кнопки не нажаты, нажата "VOL_DOWN" 
PImage dw6;    // Все кнопки не нажаты, нажата "ПИТАНИЕ" 

void setup() 
{ 
  port = new Serial(this, "COM5", 115200); // Прописываем COM-порт на котором у вас сидит Carduino 
   
  size(540, 408);//размер окна 
     
  bs = loadImage("BG1.jpg");             //загрузить все кнопки ненажатыми 
  dw = loadImage("DIM.jpg");       //загрузить изображение с нажатой кнопкой "DIM" 
  dw1 = loadImage("MENU.jpg");     //загрузить изображение с нажатой кнопкой "MENU" 
  dw2 = loadImage("MUTE.jpg");     //загрузить изображение с нажатой кнопкой "MUTE" 
  dw3 = loadImage("HW.jpg");       //загрузить изображение с нажатой кнопкой "HW/CITY" 
  dw4 = loadImage("VOL_UP_1.jpg");   //загрузить изображение с нажатой кнопкой "VOL_UP" 
  dw5 = loadImage("VOL_DOWN_1.jpg"); //загрузить изображение с нажатой кнопкой "VOL_DOWN" 
  dw6 = loadImage("7_down.jpg");        //загрузить изображение с нажатой кнопкой "ПИТАНИЕ" 
  w1 = 140;      // Размер малой кнопки по горизонтали 
  h1 = 60;       // Размер  малой кнопки по вертикали 
  w6 = 195;      // Размер большой кнопки по горизонтали 
  h6 = 80;       // Размер большой кнопки по вертикали 
  x = 270;        // Х начальная координата кнопки "DIM" 
  y = 225;       // y начальная координата кнопки "DIM" 
  x1= 120;       // Х начальная координата кнопки "MENU" 
  y1= 145;       // y начальная координата кнопки "MENU" 
  x2= 270;       // Х начальная координата кнопки "MUTE" 
  y2= 145;       // y начальная координата кнопки "MUTE" 
  x3= 120;       // Х начальная координата кнопки "HW/CITY" 
  y3= 225;       // y начальная координата кнопки "HW/CITY" 
  x4= 120;       // Х начальная координата кнопки "VOL_UP" 
  y4= 65;       // y начальная координата кнопки "VOL_UP" 
  x5= 270;       // Х начальная координата кнопки "VOL_DOWN" 
  y5= 65;       // y начальная координата кнопки "VOL_DOWN" 
  x6= 170;       // Х начальная координата кнопки "ПИТАНИЕ" 
  y6= 295;       // y начальная координата кнопки "ПИТАНИЕ" 
  image(bs,0,0); // Нарисовать в окне все кнопки ненажатыми 
  } 


void draw() 
{   
   
  if( mousePressed) 
   { 
    
     // Проверка нажатия в области "DIM" 
     if (mousePressed && (mouseX >= x && mouseX <= x + w1 && mouseY >= y && mouseY <= y + h1)) 
     {
     if(lock==1){image(dw, 0, 0);port.write('1');
     }
     lock=0;
     }
          
     // Проверка нажатия в области "MENU" 
      if (mouseX >= x1 && mouseX <= x1 + w1 && mouseY >= y1 && mouseY <= y1 + h1) 
     {   
     if(lock==1){image(dw1, 0, 0);port.write('3');
     }
     lock=0;
     }
     
     // Проверка нажатия в области "MUTE" 
     if (mouseX >= x2 && mouseX <= x2 + w1 && mouseY >= y2 && mouseY <= y2 + h1) 
     {   
     if(lock==1){image(dw2, 0, 0);port.write('5');
     }
     lock=0;
     }  
     
     // Проверка нажатия в области "HW/CITY" 
     if (mouseX >= x3 && mouseX <= x3 + w1 && mouseY >= y3 && mouseY <= y3 + h1) 
     {   
     if(lock==1){image(dw3, 0, 0);port.write('7');
     }
     lock=0;   
     }  
     // Проверка нажатия в области "VOL_UP" 
     if (mouseX >= x4 && mouseX <= x4 + w1 && mouseY >= y4 && mouseY <= y4 + h1) 
     { 
      port.write('9');
     delay (50); 
     if(lock==1){image(dw4, 0, 0);
     }
     lock=0;    
     }  
     // Проверка нажатия в области "VOL_DOWN" 
     if (mouseX >= x5 && mouseX <= x5 + w1 && mouseY >= y5 && mouseY <= y5 + h1) 
     {  
      port.write('b');
      delay (50);
     if(lock==1){image(dw5, 0, 0);
     }
     lock=0;   
     }  
     // Проверка нажатия в области "ПИТАНИЕ" 
     if (mouseX >= x6 && mouseX <= x6 + w6 && mouseY >= y6 && mouseY <= y6 + h6) 
     {   
     if(lock==1){image(dw6, 0, 0);port.write('d');
     }
     lock=0;    
     }  
        
   }
if(!mousePressed){
if(lock==0){image(b s, 0, 0);lock=1;//port.write('С');
}
}
   
} 
Pinin 17.05.2011 в 08.16 (обновлен 19.05.2011 в 10.47) комментарии 0
Последние комментарии:
© 2012 pobot.ru