ЦАП на основе ШИМ порта

Тема в разделе "Arduino & Shields", создана пользователем Анатолий439781k, 22 янв 2015.

  1. Пожалуйста, проверьте, что не так в 51 строке buffer[x]='\0'; сам скетч из учебника, если можно, то прокомментируйте. Самому пока сложно разобраться.
    Код (Text):

    // Franzis Arduino
    // ЦАП
    [COLOR=#0000ff]char buffer[18];
    int pinPWM = 9;
    int raw = 0;
    float Volt = 0;

    void setup()
    {
      Serial.begin(9600);
      Serial.println("DAC mit PWM-Ausgang");
      Serial.println();
      Serial.println("Geben Sie einen Wert zwischen 0 und 255 ein");
      Serial.flush();
    }

    void loop()
    {
      if (Serial.available() > 0);
      {
        int index = 0;
        delay(100); // ожидание символов в буфере
        int numChar = Serial.available();
        if (numChar > 15)
        {
          numChar = 15;
        }
        while (numChar--)
        {
          buffer[index++] = Serial.read();
        }
        splitString (buffer);
      }
    }

    void splitString(char* data)//36

    {
      Serial .print ("Empfangen wurde der Wert: ") ;
      Serial.println(data);
      char* parameter;
      parameter = strtok (data, " ,");
      while (parameter != NULL);
      {
        setPWM (parameter) ;
        parameter = strtok (NULL, " ,");
      }
      // Снова очистка буфера
      for (int x = 0; x < 16; x++);
      {[/COLOR]
    [COLOR=#ff0000]buffer[x]='\0';[/COLOR]
    [COLOR=#0000ff]  }
      Serial.flush();
    }

    void setPWM(char* data)
    {
      int Ans = strtol(data, NULL, 10);
      Ans = constrain(Ans, 0, 255);
      analogWrite(pinPWM, Ans);
      Serial.print("PWM = ");
      Serial.println(Ans);
      delay(100);
      raw = analogRead(0);
      float ref = 5.0 / 1024.0;
      Volt = raw * ref;
      Serial.print("Die Spannung am ADC0 betraegt: ");
      Serial.print(Volt);
      Serial.println(" Volt");
      Serial.println();
      Serial.println("Geben Sie einen Wert zwischen 0 und 255 ein");
    }[/COLOR]
     
  2. altex

    altex Гик

    Слишком много точек с запятыми
     
    Анатолий439781k нравится это.
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    for (int x = 0; x < 16; x++);
    Запяточка тут не нужна.
    Код (Text):
    for (int x = 0; x < 16; x++)
      buffer[x]='\0';
     
    Анатолий439781k нравится это.
  4. Спасибо, за отзывчивость. Проверил все,
    Код (Text):
    // Franzis Arduino
    // ЦАП
    char buffer[18];
    int pinPWM = 9;
    int raw = 0;
    float Volt = 0;

    void setup()
    {
      Serial.begin(9600);
      Serial.println("DAC mit PWM-Ausgang");
      Serial.println();
      Serial.println("Geben Sie einen Wert zwischen 0 und 255 ein");
      Serial.flush();
    }

    void loop()
    {
      if (Serial.available() > 0)
      {
        int index = 0;
        delay(100); // ожидание символов в буфере
        int numChar = Serial.available();
        if (numChar > 15)
        {
          numChar = 15;
        }
        while (numChar--)
        {
          buffer[index++] = Serial.read();
        }
        splitString (buffer);
      }
    }

    void splitString(char* data)//36

    {
      Serial .print ("Empfangen wurde der Wert: ") ;
      Serial.println(data);
      char* parameter;
      parameter = strtok (data, " ,");
      while (parameter != NULL)
      {
        setPWM (parameter) ;
        parameter = strtok (NULL, " ,");
      }
      // Снова очистка буфера
      for (int x = 0; x < 16; x++)
      {
    buffer[x]='\0';
      }
      Serial.flush();
    }

    void setPWM(char* data)
    {
      int Ans = strtol(data, NULL, 10);
      Ans = constrain(Ans, 0, 255);
      analogWrite(pinPWM, Ans);
      Serial.print("PWM = ");
      Serial.println(Ans);
      delay(100);
      raw = analogRead(0);
      float ref = 5.0 / 1024.0;
      Volt = raw * ref;
      Serial.print("Die Spannung am ADC0 betraegt: ");
      Serial.print(Volt);
      Serial.println(" Volt");
      Serial.println();
      Serial.println("Geben Sie einen Wert zwischen 0 und 255 ein");
    }
    вот рабочий скетч.