Помогите исправить скетч

Тема в разделе "Arduino & Shields", создана пользователем Brown25, 12 фев 2018.

  1. Brown25

    Brown25 Нуб

    Всем добрый день или вечер. Возникла проблема с скетчем. Для работы использую Arduino UNO и Bluetooth HC-06. Есть скетч только он работает не так как мне нужно. Мне необходимо что-бы скетч менял непрерывно цвет и частоту моргания rgb светодиода, как-бы на лету. У меня меняется только цвет, а при отправке новой частоты он на секунду выключается и потом уже мигает с новой частотой. Возможно я не сильно понятно объяснил свою проблему если что спрашивайте. Если кто знает как решить проблему или видел подобные проекты то я буду благодарен за помощь.
    Код (C++):
    const byte rPin = 3;
    const byte gPin = 5;
    const byte bPin = 6;
    byte chosed_color;
    byte incoming_byte;
    int val = -1;

    void setup()
    {
      Serial.begin(9600);
      pinMode(rPin, OUTPUT);
      pinMode(gPin, OUTPUT);
      pinMode(bPin, OUTPUT);
    }

    void loop()
    {
      if(Serial.available() > 0)
      {
        incoming_byte = Serial.peek();
        Serial.println(char(incoming_byte));
        if(incoming_byte >= '0' && incoming_byte <= '9')
        {
          val = Serial.parseInt();
        }
        else
        {
          incoming_byte = Serial.read();
          switch(incoming_byte)
          {
          case 'R':
            chosed_color = rPin;
            break;
          case 'G':
            chosed_color = gPin;
            break;
          case 'B':            
            chosed_color = bPin;
            break;
          }
        }
      }
      if(val >= 0 && chosed_color != 0)
      {
        digitalWrite(chosed_color, HIGH);
        delay(val);      
        digitalWrite(chosed_color, LOW);
        delay(val);
      }
    }
     
     
  2. b707

    b707 Гуру

    Это нормально, так работает команда parseInt - в ней встроен таймаут. Попробуйте в строке задержки после числа вставить пробел - должно помочь.
     
  3. Brown25

    Brown25 Нуб

    так
    Код (C++):
    if(incoming_byte >= '0' && incoming_byte <= '9')
        {
          val = Serial.parseInt()+" ";
        }
     
  4. b707

    b707 Гуру

    нет, совсем не так. Пробел надо вставить на стороне отправки - отправлять Ардуине строку "R200 " c пробелом на конце
    Другой вариант - отказаться от parseInt совсем и разбирать строку самостоятельно.
     
    Последнее редактирование: 12 фев 2018
  5. Brown25

    Brown25 Нуб

    ну самостоятельно я плохо представляю как это делать, а вот пробел в конце отправки строки peek помогло спасибо
     
  6. DetSimen

    DetSimen Guest

    читать про atoi()