Нужна помощь по управлению arduino uno через hc-05 со смортфона

Тема в разделе "Проводная и беспроводная связь", создана пользователем XOXOL, 3 окт 2021.

  1. XOXOL

    XOXOL Нуб

    Вечер всем добрый. Подскажите как описать в скетче управление скоростью мигания диода при помощи ползунка в приложении андроид. С модулем hc-05 соединился, АТ командами все настроил. Пока есть вот так. Два диода управляются двумя переменными резисторами по скорости, каждый отдельно. И HC-05 настроенный. А вот как с телефона это сделать пока не пойму. попытки есть, но как-то не удачно. Опыт использования 4 дня.
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial (2,3);

    #include <Thread.h>  // подключение библиотеки ArduinoThread
    const int ledPin = 13;  // переменная с номером пина светодиода
    const int ledPin1 = 12;
    int sensorPin = A0;
    int sensorPin1 = A1;
    int sensorValue = 0;
    int sensorValue1 = 0;

    Thread ledThread = Thread(); // создаём поток управления светодиодом
    Thread led1Thread = Thread();

    void setup() {
       pinMode(2,INPUT);
       pinMode(3,OUTPUT);
       Serial.begin(9600);
       mySerial.begin(9600);
       
        pinMode(ledPin, OUTPUT);   // объявляем пин 13 как выход.
        pinMode(ledPin1, OUTPUT);

        ledThread.onRun(ledBlink);  // назначаем потоку задачу
        led1Thread.onRun(led1Blink);  // назначаем потоку задачу
       
    }

    void loop() {
      if (mySerial.available()) {
            char c = mySerial.read();  // читаем из software-порта
            Serial.print(c);                   // пишем в hardware-порт
        }
        if (Serial.available()) {
            char c = Serial.read();      // читаем из hardware-порта
            mySerial.write(c);            // пишем в software-порт
        }
     
      led1Thread.setInterval(sensorValue1); // задаём интервал срабатывания, мсек
      ledThread.setInterval(sensorValue); // задаём интервал срабатывания, мсек
      sensorValue = analogRead(sensorPin);
      sensorValue1 = analogRead(sensorPin1);
        // Проверим, пришло ли время переключиться светодиоду:
        if (ledThread.shouldRun())
            ledThread.run(); // запускаем поток
         if (led1Thread.shouldRun())
            led1Thread.run(); // запускаем поток
    }

    // Поток светодиода:
    void ledBlink() {
        static bool ledStatus = false;    // состояние светодиода Вкл/Выкл
        ledStatus = !ledStatus;           // инвертируем состояние
        digitalWrite(ledPin, ledStatus);  // включаем/выключаем светодиод
    }
    void led1Blink() {
        static bool led1Status = false;    // состояние светодиода Вкл/Выкл
        led1Status = !led1Status;           // инвертируем состояние
        digitalWrite(ledPin1, led1Status);  // включаем/выключаем светодиод
    }
     
  2. Рокки1945

    Рокки1945 Гуру

    Необходимо сделать следующие шаги:
    1 - соединить уарт ардуино с уартом модуля крест на крест
    2 - загрузить самую простую программу сериал - на прием и передачу
    3 - в телефоне скачать программу монитор сериал - соединиться с блютус модулем и послать команду - в ардуиновском терминале смотреть что происходит
     
  3. XOXOL

    XOXOL Нуб

    Команды посылать уже научился, проблема в том, что не знаю как описать это в скетче.
     
  4. Рокки1945

    Рокки1945 Гуру

    В этом блоке читаем то что пришло - если буфер не пустой
    if(Serial.available()){
    char c = Serial.read(); // читаем из hardware-порта
    mySerial.write(c);
    а потом нужно если значение переменной c
    допустим равно с == '6' то выполнить то то
    через if else или switch
    или присвоить полученное значение
    делаю или миллис - чем ты там управляешь скоростью светодиода
     
  5. Рокки1945

    Рокки1945 Гуру

  6. parovoZZ

    parovoZZ Гуру

    Кергигана и Ричи сперва надо прочитать.
     
  7. XOXOL

    XOXOL Нуб

    Вот сюда надо вписать. ledThread.setInterval(?); // задаём интервал срабатывания, мсек
    Что только не вписывал, не получается.
     
  8. XOXOL

    XOXOL Нуб

    Код (C++):
    int val;

    #include <SoftwareSerial.h>
    SoftwareSerial mySerial (2,3);

    #include <Thread.h>  // подключение библиотеки ArduinoThread
    const int ledPin = 11;  // переменная с номером пина светодиода

    Thread ledThread = Thread(); // создаём поток управления светодиодом

    void setup() {
      //управление
       Serial.setTimeout(4);

      //bluetooth
       pinMode(2,INPUT);
       pinMode(3,OUTPUT);
       Serial.begin(9600);
       mySerial.begin(9600);
     
        pinMode(ledPin, OUTPUT);   // объявляем пин 13 как выход.

        ledThread.onRun(ledBlink);  // назначаем потоку задачу
         
    }

    void loop() {
      if (mySerial.available()>0) {
            val = mySerial.parseInt();
                         
        }
     

      ledThread.setInterval(val); // задаём интервал срабатывания, мсек
      //sensorValue = analogRead(sensorPin);
      //sensorValue1 = analogRead(sensorPin1);
        // Проверим, пришло ли время переключиться светодиоду:
        if (ledThread.shouldRun())
            ledThread.run(); // запускаем поток
    }

    // Поток светодиода:
    void ledBlink() {
        static bool ledStatus = false;    // состояние светодиода Вкл/Выкл
        ledStatus = !ledStatus;           // инвертируем состояние
        digitalWrite(ledPin, ledStatus);  // включаем/выключаем светодиод
    }
     
  9. XOXOL

    XOXOL Нуб

    Вот так пока получается, но не работает как надо
     
  10. Рокки1945

    Рокки1945 Гуру

    а где в основном цикле вызов функции ledBlink?
     
  11. Рокки1945

    Рокки1945 Гуру

    зачем два сериала ? - хватит аппаратного
     
  12. XOXOL

    XOXOL Нуб

    Так без без блютуза все работает через резистор переменный