Пишем скетчи под ардуино и не только.

Тема в разделе "Сделаю проект", создана пользователем AlessandrIT, 21 ноя 2018.

?

Станете ли обращаться за моими услугами повторно?

  1. Да

    100,0%
  2. Возможно

    0 голосов
    0,0%
  3. Нет

    0 голосов
    0,0%
Можно выбрать сразу несколько вариантов.
  1. AlessandrIT

    AlessandrIT Гик

    Работаем как с готовыми ТЗ, так и помогаем написать его под ваши цели.
    Разрабатываем как готовые устройства на транзисторной логике, контроллерах Ардуино, так и пишем "скетчи" для тех же Ардуинок.
    По желанию заказчика создаём законченное устройство и высылаем по почте.
    Так же пишем программы для ПК для связи с ардуино.
    По срокам - в среднем выходит в 3-4 дня, впрочем это сильно зависит от объёма работы.
    Так же помогаем новичкам, когда им требуется помощь в написании кода, схемотехнике и т.д.

    Пишите в лс.Просьба высылать ТЗ, если оно есть, сразу на почту - на форуме плохо проработана система обмена файлами.

    Мой контакт - alessandroIT@yandex.ru
     
  2. igor2379

    igor2379 Нуб

    хочу заказать скейтч
     
  3. ostrov

    ostrov Гуру

    Певыца была такая С++ С++ Скейч.
     
    Igor68 и vvr нравится это.
  4. Airbus

    Airbus Оракул

    Лучше закажи Пицу
     
  5. Kotopes

    Kotopes Нуб

    Нуждаюсь в скетче для управления электрическим котлом

    ТЗ
    электрический котел 9 кВт (3 тэна по 3 кВт)

    Электроника
    Esp 8266 wemos d1 mini
    3 шт. твердотельные реле (SR40A ssr-40A)
    2 шт. датчик температуры 18B20
    Экран (необходимо помочь с выбором)

    Как я это вижу… датчик температуры на выходе и на самом котле, плавная регулировка мощности за счет твердотельных реле, с учетом температуры подающего и нагретого теплоносителя. Управление с кнопок 2-4 (сколько необходимо), а так же через MQTT (в последствие прикручу в majordomo)

    Режимы
    Автоматический режим (выставляем желаемую температуру теплоносителя)
    Ручной режим (вкл\выкл тэнов, и их мощность)
    Режим ГВС (выбор температуры (использовать тэны поочередно))
    Режим настройка (корректировка датчиков температур, подключение к wi-fi, дата время)

    На экране должно отражаться
    Выбранный режим, температура входящего теплоносителя, котла и желаемого, мощность, кол-во задействованных тэнов (их лучше прономеровать) время, уровень сигнала.
     
  6. Airbus

    Airbus Оракул

    А спамить во все темы обязательно?
     
  7. ну может он свои создавать не умеет.
     
  8. Всем доброго вечера, помогите в скетч добавить еще функции по управлению ws2812.
    Нужно добавить больше фенций по работе режимов на основе этого скетча, если есть кто готов помочь доделать то готов обсудить сроки и бюджет.
    #include <Adafruit_NeoPixel.h>

    // настройка значений
    #define BUTTON_LEAD 3 //кнопка
    #define LED_LEAD 6 //лента
    #define NUMBER_OF_PIXELS 60 // количество светиков в ленте
    #define NUMBER_OF_MODES 2
    #define NUM_LEDS 60 //количество светиков для эффекта точек

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMBER_OF_PIXELS, LED_LEAD, NEO_GRB + NEO_KHZ800);

    bool buttonState = LOW;
    bool lastButtonState = LOW;

    // задержка между пиксельной вспышкой. используется во всех трех режимах
    const int PIXEL_FLASH_INTERVAL = 25;

    unsigned long previousMillis = millis();

    int mode = 1; // по умолчанию - вариант 1

    byte colors[3][3] = { {0xff, 0,0xff},
    {0, 0xff, 0},
    {0 , 0 , 0xff} };

    void setup() {
    pinMode(BUTTON_LEAD, INPUT_PULLUP);
    strip.begin();
    strip.show();
    }

    int pos = 0, dir = 1;

    void loop() {
    switch (mode) {
    case 1:
    rainbow();
    break;

    case 2:
    BouncingColoredBalls(3, colors);
    //colorWipe(strip.Color(0, 255, 0));
    break;

    case 3:
    scanner();
    break;

    default:
    mode = 1;
    break;
    }
    }


    /* rainbow function */
    void rainbow() {
    uint16_t j = 0;
    while(j<256*3) {
    if(millis() - previousMillis >= PIXEL_FLASH_INTERVAL) {
    previousMillis = millis();

    uint16_t i = 0;
    while(i < strip.numPixels()) {
    strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    i++;
    if(buttonListener()) { return; }
    }
    strip.show();
    j++;
    }

    }
    }

    /* Wheel function */
    uint32_t Wheel(byte WheelPos) {
    WheelPos = 255 - WheelPos;
    if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
    }
    if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
    }
    WheelPos -= 170;
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
    }

    /* monitor button press */
    bool buttonListener() {
    bool modeChanged = false;

    buttonState = digitalRead(BUTTON_LEAD);

    if (buttonState != lastButtonState) {
    if (buttonState == LOW) {
    mode++;
    modeChanged = true;
    delay(250);
    }
    }
    lastButtonState = buttonState;

    return modeChanged;
    }

    void scanner() {
    if (millis() - previousMillis >= PIXEL_FLASH_INTERVAL) {
    previousMillis = millis();

    if(buttonListener()) { return; }

    int j;

    strip.setPixelColor(pos - 2, 0x100010); // Dark red
    strip.setPixelColor(pos - 1, 0x800080); // Medium red
    strip.setPixelColor(pos , 0xff00ff); // Center pixel is brightest
    strip.setPixelColor(pos + 1, 0x800080); // Medium red
    strip.setPixelColor(pos + 2, 0x100010); // Dark red

    strip.show();
    //delay(60);



    for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);

    pos += dir;
    if(pos < 0) {
    pos = 1;
    dir = -dir;
    } else if(pos >= strip.numPixels()) {
    pos = strip.numPixels() - 2;
    dir = -dir;
    }
    }
    }


    void BouncingColoredBalls(int BallCount, byte colors[][3]) {
    float Gravity = -9.81;
    int StartHeight = 1;
    float Height[BallCount];
    float ImpactVelocityStart = sqrt( -2 * Gravity * StartHeight );
    float ImpactVelocity[BallCount];
    float TimeSinceLastBounce[BallCount];
    int Position[BallCount];
    long ClockTimeSinceLastBounce[BallCount];
    float Dampening[BallCount];
    for (int i = 0 ; i < BallCount ; i++) {
    ClockTimeSinceLastBounce = millis();
    Height = StartHeight;
    Position = 0;
    ImpactVelocity = ImpactVelocityStart;
    TimeSinceLastBounce = 0;
    Dampening = 0.90 - float(i)/pow(BallCount,2);
    }

    while (true) {
    for (int i = 0 ; i < BallCount ; i++) {
    TimeSinceLastBounce = millis() - ClockTimeSinceLastBounce;
    Height = 0.5 * Gravity * pow( TimeSinceLastBounce/1000 , 2.0 ) + ImpactVelocity * TimeSinceLastBounce/1000;
    if ( Height < 0 ) {
    Height = 0;
    ImpactVelocity = Dampening * ImpactVelocity;
    ClockTimeSinceLastBounce = millis();
    if ( ImpactVelocity < 0.01 ) {
    ImpactVelocity = ImpactVelocityStart;
    }
    }
    Position[i] = round( Height[i] * (NUM_LEDS - 1) / StartHeight);
    }
    for (int i = 0 ; i < BallCount ; i++) {
    setPixel(Position[i],colors[i][0],colors[i][1],colors[i][2]);
    }

    if(buttonListener()) { return; }

    showStrip();
    setAll(0,0,0);
    }
    }


    void showStrip() {
    #ifdef ADAFRUIT_NEOPIXEL_H
    // NeoPixel
    strip.show();
    #endif
    #ifndef ADAFRUIT_NEOPIXEL_H
    // FastLED
    FastLED.show();
    #endif
    }

    void setPixel(int Pixel, byte red, byte green, byte blue) {
    #ifdef ADAFRUIT_NEOPIXEL_H
    // NeoPixel
    strip.setPixelColor(Pixel, strip.Color(red, green, blue));
    #endif
    #ifndef ADAFRUIT_NEOPIXEL_H
    // FastLED
    leds[Pixel].r = red;
    leds[Pixel].g = green;
    leds[Pixel].b = blue;
    #endif
    }

    void setAll(byte red, byte green, byte blue) {
    for(int i = 0; i < NUM_LEDS; i++ ) {
    setPixel(i, red, green, blue);
    }
    showStrip();
    }[/i][/i][/i][/i][/i][/i]
     
  9. Vadim.S

    Vadim.S Нуб


    Примерно такое .или просто управление приводами без платежной системы
     
  10. ostrov

    ostrov Гуру

    Чего надо то? Лентой помигать? Давайте помигаем. Кол-во пикселей и как именно надо мигать?
     
  11. Vadim.S

    Vadim.S Нуб

    Хорошо