Помогите выполнить задание

Тема в разделе "Флудилка", создана пользователем zarar, 15 окт 2017.

  1. zarar

    zarar Нуб

    Задание: реализовать чтение с последовательного порта значений частоты,яркости светодиода и управления им.
    Как выполнить?

    Вот код:

    int val;
    int value = 0;
    int ledpin = 6;
    int x = 0;

    int T = 2550;

    void setup() {
    Serial.begin(9600);
    pinMode (LED_BUILTIN, OUTPUT);
    Serial.print(" Hello world!");
    }

    void loop() {
    for (value = 0 ; value <= 2550; value += 10) {

    digitalWrite(LED_BUILTIN, HIGH);
    delayMicroseconds(value);

    digitalWrite(LED_BUILTIN, LOW);
    delayMicroseconds(T - value);

    }
    for (value = 2550; value >= 0; value -= 10) {

    digitalWrite(LED_BUILTIN, HIGH);
    delayMicroseconds(value);

    digitalWrite(LED_BUILTIN, LOW);
    delayMicroseconds(T - value);

    }

    }
     
  2. DIYMan

    DIYMan Guest

    Очевидно, добавить чтение из порта на предмет входящих параметров и пр. - и применять их, когда таковые параметры там есть. Подробности - в описании к Serial, там есть ВСЁ.
     
  3. zarar

    zarar Нуб

    Объясните , куда писать?
     
  4. DIYMan

    DIYMan Guest

    Что писать? Код? Если вы про код - то код пишется в исходный файл. Параметры, поступающие из Serial, разбираются, и складываются в переменные, вы потом манипулируете этими переменными с помощью кода, чтобы получить требуемое поведение. Вот смотрите - я приведу простой пример в ПСЕВДОКОДЕ (компилироваться он не будет, а призван лишь продемонстрировать логику работы, для того, чтобы вы поняли, как оно всё должно шевелиться):
    Код (C++):
    bool canWork = false; // можем ли работать?
    int hertz = 50; // частота мерцания светодиода

    void setup()
    {
        Serial.begin(9600);
    }

    void loop()
    {
        if(Serial.hasCommand('HERTZ'))
        {
            // есть команда на установку частоты из порта
            hertz = Serial.parseInt();
           
        }
        if(Serial.hasCommand('RUN'))
        {
            // есть команда на начало работы
            canWork = true;
        }
        if(Serial.hasCommand('STOP'))
        {
            // есть команда на конец работы
            canWork = false;
        }
       
        if(canWork)
        {
            // тут мигаем светодиодом с нужной частотой hertz
        }
        else
        {
            // тут гасим светодиод
        }
       
    }
     
     
  5. zarar

    zarar Нуб

    Ну а как считывать частоту мигания светодиода и яркость? Я вообще не понимаю
     
  6. ostrov

    ostrov Гуру

    Считывать с сериалпорта? Должен быть некий протокол, который понимает передающее и принимающее устройство. Один пересылает команды, другой принимает и выполняет. Для перфекционистов еще и подтверждает выполнение.
     
  7. DIYMan

    DIYMan Guest

    Например, передающая сторона плюёт в порт строчку "HERTZ=100", принимающая её разбирает, и понимает, что запросили установку частоты в 100 Герц. Далее - по аналогии.