PROCESSING for ARDUINO

Нет ответов
georgy36arduino
Offline
Зарегистрирован: 27.11.2021

Моя Первая программа на PROCESSING !

ЗАДАЧИ:

1.Передать сигнал со входа микрофона Пк по средствам PROCESSINGa 

2.Передать значения кодов RGB  

3.Возможность передавать введенные значения вручную 

4.А так же возможность выбора передачи однократно или циклично

5.Минимальные настройки выбора COM порта и его скорости БОДЫ

6.Визуализация звукового сигнала 

ПРИЛОГАЮ ФОТО И ОСНОВНОЙ КОД:

КОНСОЛЬ:

//ARDUINO SKETCH----------------------------------------------------------------------
long commandValue; // данные, поступаемые с последовательного порта
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.clear();
  
}
void loop(){
  
   // считывание
   // если можно прочитать данные
  if (Serial.available() > 0) {
    // считываем данные
    //commandValue = Serial.read();
    commandValue = Serial.parseInt();
    lcd.clear();
    lcd.setCursor(0, 0);  
    lcd.print("DATA: ");
    lcd.setCursor(0, 1);
    lcd.print(commandValue,DEC);
    delay(600);
    //lcd.clear();
    }
  delay(100);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("NO Signal");
}
//ARDUINO SKETCH----------------------------------------------------------------------


//PROCESSING SKETCH-------------------------------------------------------------------
import processing.sound.*;                 // Это библиотеа проигрыватель звуковых файлов
import processing.serial.*;                // библиотека 
Serial serial;                             // сериал порт
AudioIn input;                             // аудио вход
Amplitude loudness;                        //Амплитуда громкости
import controlP5.*;                        // библиотека кнопки крутилки
ControlP5 cp5;
String portName;
RadioButton r1, r2; 
int speed = 9600;                          // начальная скорость порта
int TheMyCalor;
int rgb;
int size;
int AudiFIX;

void setup() {
  size(680, 430);                          // размеры основного окна
  input = new AudioIn(this, 0);            // Создайте аудиовход и возьмите 1-й канал
  input.start();                           // Начните захват аудиовхода 
  loudness = new Amplitude(this);          // Подключите вход к анализатору объема
  loudness.input(input);
  cp5 = new ControlP5(this);
  cp5.setFont(createFont("Calibri", 16));  // сделаем шрифт побольше
  
  // AudiFIX кнопка с фиксацией
  cp5.addToggle("AudiFIX")                        //AudiFIX
     .setPosition(10,360)
     .setSize(660,20)
     ;
  //ON Отправка AUDIO-in-----------------------------------------------------------------
   cp5.addButton("AudioIn").setPosition(340, 320).setSize(240, 30);   
  //ON Отправка RGB--------------------------------------------------------------------
   cp5.addButton("ONRGB").setPosition(10, 320).setSize(240, 30);
  //palitra----------------------------------------------------------------------------
  cp5.addColorWheel("myCalor" , 10 , 50 , 240 ).setRGB(color(128,0,255));
  // кнопки---------------------------------------------------------------------
  cp5.addButton("open").setPosition(90, 10).setSize(80, 30);
  cp5.addButton("close").setPosition(170, 10).setSize(80, 30).linebreak();
  //отправка--------------------------------------------------------------------
  cp5.addTextfield("input").setPosition(260, 10).setSize(320, 30);
  cp5.addButton("send").setPosition(590, 10).setSize(80, 30);
  // выпадающий список----------------------------------------------------------
  cp5.addScrollableList("com")
    .setPosition(10, 10)
    .setSize(80, 100)
    .setBarHeight(30)
    .setItemHeight(30)
    .close()
    .addItems(Serial.list());                // добавляем список портов
  ;
  // cкорость порта--------------------------------------------------------------
   r1 = cp5.addRadioButton("radioButton")
         .setPosition(10,400)                //позиция кнопок выбора скорости порта 
         .setSize(80,20)                     //размер кнопок выбора скорости порта 
         .setColorForeground(color(120))
         .setColorActive(color(255))
         .setColorLabel(color(255))
         .setItemsPerRow(5)
         .setSpacingColumn(50)
         .addItem("4800",1)                 //режим 1 равен скорости 4800 бод
         .addItem("9600",2)                 //режим 1 равен скорости 9600 бод
         .addItem("19200",3)                //режим 1 равен скорости 19200 бод
         .addItem("38400",4)                //режим 1 равен скорости 38400 бод
         .addItem("115200",5)               //режим 1 равен скорости 115200 бод
         ;
         for(Toggle t:r1.getItems()) {
       t.getCaptionLabel().setColorBackground(color(255,80));
       t.getCaptionLabel().getStyle().moveMargin(-3,0,0,-3);
       t.getCaptionLabel().getStyle().movePadding(7,0,0,3);
       t.getCaptionLabel().getStyle().backgroundWidth = 55;      //длинна серых окон выбора скорости порта 
       t.getCaptionLabel().getStyle().backgroundHeight = 13;
}}
void radioButton(int TheRadioButton) {
 if(TheRadioButton==1){speed=4800;}                              //при включенном режиме 1 установить скорость в 4800 бод
  if(TheRadioButton==2){speed=9600;}                             //при включенном режиме 1 установить скорость в 9600 бод
   if(TheRadioButton==3){speed=19200;}                           //при включенном режиме 1 установить скорость в 19200 бод
    if(TheRadioButton==4){speed=38400;}                          //при включенном режиме 1 установить скорость в 38400 бод
     if(TheRadioButton==5){speed=115200;}                        //при включенном режиме 1 установить скорость в 115200 бод
     print(speed);
}
public void AudioIn(boolean MyAudioIn ) {
   String textAudioIn = "Str=" + size; 
   if(MyAudioIn==true) {serial.write(textAudioIn);println(textAudioIn);}
}
public void AudiFIX(boolean MyAudiFIX ) {
 if(MyAudiFIX==true){AudiFIX=1;}else{AudiFIX=0;}                 //указываем флаг rgb  0 или 1 
}
public void ONRGB(boolean MyONRGB ) {                            
  String textONRGB = "Str=" + ~TheMyCalor;                       //создаем СТРОКУ для отправки цвета
 if(MyONRGB==true) {serial.write(textONRGB);println(textONRGB);} //отправить значение RGB при нажатой кнопке ONRGB (инвертировал ~) 
}
public void myCalor(int TheMyCalor2) {
 TheMyCalor=TheMyCalor2;                                         //глобальная переменная равна локальной
}
void com(int n) {
  portName = Serial.list()[n];
}
void open() {
  serial = new Serial(this, portName, speed);
}
void close() {
  serial.stop();
}
void send() {
  serial.write(cp5.get(Textfield.class, "input").getText());     //Отправка сообщения при нажатой кнопке Send
}
void draw() {
 
  background(40);                                               // цвет фона
  if(AudiFIX==1){                                               // если флаг rgb равен 1
    String textAudiFIX = "Str=" + size;                         //создаем СТРОКУ для отправки цвета
    serial.write(textAudiFIX);println(textAudiFIX);             //включить постоянную передача цвета
    //delay(200);           //задержка
   
}

  float inputLevel = map(mouseY, 0, height, 1.0, 0.0);           // Отрегулируйте громкость аудиовхода в зависимости от положения мыши
        input.amp(inputLevel);             
                                     
  float volume = loudness.analyze();                             //volume.analyze () возвращает значение от 0 до 1. Для настройки(сигнал со входа микрофона)
  size = int(map(volume, 0, 0.55, volume, 350));                 //масштабирование и отображение эллипса мы масштабируем от 0 до 0,5
  fill(150, 255, 10);                                            //цвет круга RGB
  ellipse(460, height/2, 400, size); //координаты круга          //Мы рисуем круг, размер которого зависит от анализа звука.
}

//PROCESSING SKETCH-------------------------------------------------------------------

ПОЛЕЗНЫЕ ССЫЛКИ:

IDE https://processing.org/donate

БИБЛИОТЕКИ SOUND:   https://processing.org/reference/libraries/sound/Sound.html

                    controlP5: http://www.sojamo.de/libraries/controlP5/

                    SERIAL:    https://processing.org/reference/libraries/serial/index.html