управление ардуино с компьютера

Тема в разделе "Arduino & Shields", создана пользователем Павлиан, 12 июл 2017.

  1. Павлиан

    Павлиан Нерд

    При зажатой клавише "1" на клавиатуре компьютера- горит светодиод №1
    При зажатой "2"- второй светодиод
    Делал через Монитор порта, но как сделать без нажатия "Enter", то есть на определённую клавишу стоит определённая команда. Какие программы для этого использовать и как этими программами пользоваться?
     
  2. railmisaka

    railmisaka Гик

    Думаю, можно через последовательный порт (Serial.read())
     
  3. Павлиан

    Павлиан Нерд

    Мисака фигни не посоветует
     
    NikitOS нравится это.
  4. ostrov

    ostrov Гуру

    Программульку надо написать или на VS или на Processing. Она и будет передавать команды через ком порт.
     
  5. Limoney

    Limoney Гик

    на lazarius, С#
     
  6. Arkad_snz

    Arkad_snz Гик

    На WSH решабельно?
     
  7. Ничего писать не надо , у меня уже год работает как часы на Z-Controller
    Код (C++):
    void softcom_() {
    //while (Serial.available() == 0); // С ним 2й поток не работает
      data = Serial.read();
      Serial.write(data);

      if ( data == 'a' ) digitalWrite(LED1, HIGH);
      if (data  == 'a') {
      tone(buzzPin, frq, dur);
      }
      if ( data == 'b' ) digitalWrite(LED1, LOW);
      if (data  == 'b') {
      tone(buzzPin, frq2, dur2);
      }
      if ( data == 'c' ) digitalWrite(LED2, HIGH);
      if (data  == 'c') {
      tone(buzzPin, frq, dur);
      }
      if ( data == 'd' ) digitalWrite(LED2, LOW);
      if (data  == 'd') {
      tone(buzzPin, frq2, dur2);
      }
      if ( data == 'e' ) digitalWrite(LED3, HIGH);
      if (data  == 'e') {
      tone(buzzPin, frq, dur);
      }
      if ( data == 'f' ) digitalWrite(LED3, LOW);
      if (data  == 'f') {
      tone(buzzPin, frq2, dur2);
      }
      if ( data == 'g' ) digitalWrite(LED4, HIGH);
      if (data  == 'g') {
      tone(buzzPin, frq, dur);
      }
      if ( data == 'h' ) digitalWrite(LED4, LOW);
      if (data  == 'h') {
      tone(buzzPin, frq2, dur2);
      }
      if ( data == 'i' ) digitalWrite(LED5, HIGH);
      if (data  == 'i') {
      tone(buzzPin, frq, dur);
      }
      if ( data == 'j' ) digitalWrite(LED5, LOW);
      if (data  == 'j') {
      tone(buzzPin, frq2, dur2);
      }
      if ( data == 'k' ) digitalWrite(LED6, HIGH);
      if (data  == 'k') {
      tone(buzzPin, frq, dur);
      }
      if ( data == 'l' ) digitalWrite(LED6, LOW);
      if (data  == 'l') {
      tone(buzzPin, frq2, dur2);
      }
      if ( data == 'm' ) digitalWrite(LED7, HIGH);
      if (data  == 'm') {
      tone(buzzPin, frq, dur);
      }
      if ( data == 'n' ) digitalWrite(LED7, LOW);
      if (data  == 'n') {
      tone(buzzPin, frq2, dur2);
      }
      if ( data == 'o' ) digitalWrite(LED8, HIGH);
      if (data  == 'o') {
      tone(buzzPin, frq, dur);
      }
      if ( data == 'p' ) digitalWrite(LED8, LOW);
      if (data  == 'p') {
      tone(buzzPin, frq2, dur2);
      }
     
  8. railmisaka

    railmisaka Гик

    почитайте про switch
     
  9. Немного не понял, ну ладно....
     
  10. ostrov

    ostrov Гуру

    Погуглить по словам arduino switch непосильно?
     
  11. b707

    b707 Гуру

    Алексей, вам мягко намекают. что ваш код не тот, которым стоит хвастать :)
    Особенно доставляют двойные if (data == ...) ... А что , диод и тон нельзя было в одну скобку поместить? :)
     
  12. Про диод и тон, не знал что можно так. Тона там не было. А код....., это код по умолчанию, к этой программе, так рекомендовали разработчики. И хвастать Я и не собирался, а просто поделился тем, что Я в своё время искал больше недели, а именно этот софт - форму Z-Controller
     
  13. if (data == А как надо??
     
  14. b707

    b707 Гуру

    Код (C++):


    switch ( data )
          {
             case 'a':
                digitalWrite(LED1, HIGH);
                tone(buzzPin, frq, dur);
                break;
             case 'b':
                digitalWrite(LED2, HIGH);
                tone(buzzPin, frq2, dur);
                break;
            .....
      }
     
  15. brokly

    brokly Гик

    Из далекого детства помню, что компилятор код вида :
    Код (C++):
    if () {
    } else if() {
    } else if() {
    }
    Преобразует в более короткий и быстрый нежели:
    Код (C++):
    switch(){
       case...
       case...
       case...
    }
    Счаз уже не так ?
     
    NikitOS нравится это.
  16. b707

    b707 Гуру

    Суровое у вас было детство :)
    Мож оно и так, спорить не буду. но switch() - для меня - мысли в порядок приводит лучше, чем бесчисленные if -else :)
    А в целом бы сказал, что и свитч, и гроздья ИФОВ - это некрасиво, признак плохо спроектированного кода :)
     
    Последнее редактирование: 31 окт 2017
  17. b707

    b707 Гуру

    Немного разовью мысль :)

    Логику оператора switch (то же самле относится к цепочкам if -elseif -else) можно сравнить с поведением двоечника на экзамене. Ему задают вопрос "Сколько будет три плюс пять?" - а он начинает подбирать "- Четыре?" - "Шесть?" - "Одиннадцать?" :)
    Правильный подход, что на экзамене, так и в программе - всегда стараться ВЫЧИСЛИТЬ правильный вариант, а не найти его перебором.
    В частности, в этом коде номера LED можно было положить в массив и выбирать по смещению символа, а уж частоты тона и того проще - их всего две. Код ужался бы до 5-7 строк, и, важно - его размер не зависел бы от числа вариантов выбора, можно было бы добавить буквы вплоть до "z" вообще без усилий.
     
    АлексейЭтоЯ нравится это.
  18. Ради интереса и так попробовал, с этой прогр. работает, точно так же. Вы считаете, это лучше?? И почему тон не с диодами, Вы ж так учили? нет?
    Код (C++):
    void softcom_() {
    data = Serial.read();
    Serial.write(data);
      switch ( data )
          {
             case 'a':
                digitalWrite(LED1, HIGH);
                tone(buzzPin, frq, dur);
                break;
             case 'b':
                digitalWrite(LED1, LOW);
                tone(buzzPin, frq2, dur);
                break;
    }
    }
     
  19. b707

    b707 Гуру

    "тон с диодами" - я имел в виду так. с общим условием для тона и диодов
    Код (C++):
    if ( data == 'c' )  {
      digitalWrite(LED2, HIGH);
      tone(buzzPin, frq, dur);
    }
     
    АлексейЭтоЯ нравится это.
  20. В любом случае заменил на этот, мне он больше понравился, тем более что работает, с этой программой. Спасибо