| Форум РадиоКот https://radiokot.ru/forum/ |
|
| нужна помощь в компиляции https://radiokot.ru/forum/viewtopic.php?f=66&t=197945 |
Страница 1 из 1 |
| Автор: | mitre [ Пн май 12, 2025 22:41:51 ] | ||
| Заголовок сообщения: | нужна помощь в компиляции | ||
Привет из Болгарии. Я не могу скомпилировать этот файл. Можете ли вы исправить ошибки? или делать Binary file (.bin) файл Я хочу Binary file (.bin) файл
|
|||
| Автор: | smacorp [ Пн май 12, 2025 23:54:04 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
mitre, в Болгарии знают слово "херня"? Так вот, Вы прислали херню, а не скетч - это не исходный код, могущий быть скомпилированным, и исправлять там просто нечего. |
|
| Автор: | Уош [ Пн май 12, 2025 23:57:49 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
интересно, в компиляторе есть сообщение об ошибке "херня" ? Добавлено after 33 seconds: Не ИИ ли генерировал этот код... |
|
| Автор: | roman.com [ Вт май 13, 2025 09:25:53 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
всё что я понял... esp8266... nodemcuv2... Home Assistant... Кажется, где-то уже обсуждали... https://www.radiokot.ru/forum/viewtopic ... &start=160 |
|
| Автор: | mitre [ Пт июн 20, 2025 21:25:52 ] | ||
| Заголовок сообщения: | Re: нужна помощь в компиляции | ||
Где я допустил ошибку, заставив мотор вращаться только в одном направлении?
|
|||
| Автор: | mitre [ Сб июн 21, 2025 08:34:50 ] | ||
| Заголовок сообщения: | Re: нужна помощь в компиляции | ||
Вот как подключен двигатель
|
|||
| Автор: | roman.com [ Сб июн 21, 2025 10:30:55 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
двигатель мы сейчас подключаем в соседней теме... viewtopic.php?f=28&t=185219&start=220 |
|
| Автор: | kvn234 [ Вс июн 22, 2025 11:59:37 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
Товарищ любит слегка приврать. Двигатель подключали не мы, а я. Исходники можно посмотреть здесь https://t.me/zu_kvn/1880/2129?single |
|
| Автор: | roman.com [ Вс июн 22, 2025 17:00:36 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
эти Исходники не катят. товарищ подключает шаговый двигатель.
|
|
| Автор: | mitre [ Вс июн 29, 2025 12:04:44 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
Все работало, когда я включени 2 питания один 5V для ESP8266 и еще один 5V для ULN2003 питания. Почему должен два источника питания от 5V???? |
|
| Автор: | roman.com [ Вс июн 29, 2025 14:01:40 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
видимо сильные помехи по питанию... или слабый источник питания... напряжение проведает. в нормальный схемах ULN2003 питается напрямую от блока питания 5V а ESP8266 питается от того же блока питания 5V но через стабилизатор 3,3V. |
|
| Автор: | mitre [ Пт авг 08, 2025 17:17:00 ] |
| Заголовок сообщения: | Re: нужна помощь в компиляции |
Пожалуйста, подскажите, как это сделать. Это код для жалюзи, и он работает как с Sinric, так и с потенциометром, но у меня возникла проблема с синхронизацией потенциометра и Sinric Pro. Итак, когда я поворачиваю потенциометр в положение «открыть жалюзи», они открываются. Однако когда я закрываю их с помощью Sinric, как открыть их с помощью потенциометра, учитывая, что потенциометр находится в положении «открыть жалюзи»? Код: #include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> #include <EEPROM.h> #include <SinricPro.h> #include <SinricProBlinds.h> #include <AccelStepper.h> #include "credentials.h" // WIFI_SSID, WIFI_PASS, APP_KEY, APP_SECRET, BLINDS_ID //#define LEFT_BLIND #ifdef LEFT_BLIND #define IN1 D1 #define IN2 D3 #define IN3 D2 #define IN4 D4 #else #define IN1 D4 #define IN2 D2 #define IN3 D3 #define IN4 D1 #endif #define BUTTON_UP_PIN D5 #define BUTTON_DOWN_PIN D6 #define LED_PIN D7 #define BUILTIN_LED D0 #define POTENTIOMETER A0 #define BAUD_RATE 115200 #define DEBOUNCE_TIME 300 #define EEPROM_SAVE_DELAY 3000 #define MAX_STEPS 500 #define MIN_STEPS 10 #define DEFAULT_STEPS 200 #define POTENTIOMETER_THRESHOLD 3 #define MAX_SPEED 800 #define ACCELERATION 500 #define POSITION_REPORT_INTERVAL 5000 #define POT_TIMEOUT 300000 // 5 минути AccelStepper stepper(AccelStepper::FULL4WIRE, IN1, IN3, IN2, IN4); int blindsPosition = 0; int blindsTarget = 0; bool powerState = true; int stepsPerPercent = DEFAULT_STEPS; unsigned long lastPress = 0; bool stepsChanged = false; unsigned long stepsChangeTime = 0; int lastPotValue = -100; unsigned long lastPositionReport = 0; bool sinricProConnected = false; bool externalControl = false; unsigned long lastExternalControl = 0; const unsigned long EXTERNAL_CONTROL_TIMEOUT = 10000; int virtualPotPosition = 0; unsigned long lastPotMoveTime = 0; void handleButtons(); void handlePotentiometer(); void loadStepsFromEEPROM(); void saveStepsToEEPROM(); void indicateFullRotations(); void handleMovement(); void reportPosition(); void calibrateStepper(); void setupWiFi(); void setupSinricPro(); void updateSinricPosition(); bool onPowerState(const String &deviceId, bool &state) { powerState = state; if (!powerState && stepper.isRunning()) stepper.stop(); return true; } bool onRangeValue(const String &deviceId, int &position) { externalControl = true; lastExternalControl = millis(); blindsTarget = position; if (millis() - lastPotMoveTime > POT_TIMEOUT) { virtualPotPosition = position; lastPotValue = position; } return true; } bool onAdjustRangeValue(const String &deviceId, int &positionDelta) { externalControl = true; lastExternalControl = millis(); blindsTarget += positionDelta; positionDelta = blindsTarget; if (millis() - lastPotMoveTime > POT_TIMEOUT) { virtualPotPosition = blindsTarget; lastPotValue = blindsTarget; } return true; } void setupWiFi() { Serial.begin(BAUD_RATE); WiFi.begin(WIFI_SSID, WIFI_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); } ArduinoOTA.setHostname("SmartBlinds"); ArduinoOTA.begin(); } void setupSinricPro() { SinricProBlinds &myBlinds = SinricPro[BLINDS_ID]; myBlinds.onPowerState(onPowerState); myBlinds.onRangeValue(onRangeValue); myBlinds.onAdjustRangeValue(onAdjustRangeValue); SinricPro.onConnected([]() { sinricProConnected = true; updateSinricPosition(); }); SinricPro.onDisconnected([]() { sinricProConnected = false; }); SinricPro.begin(APP_KEY, APP_SECRET); } void setupPins() { pinMode(BUTTON_UP_PIN, INPUT_PULLUP); pinMode(BUTTON_DOWN_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); pinMode(BUILTIN_LED, OUTPUT); pinMode(POTENTIOMETER, INPUT); } void loadStepsFromEEPROM() { EEPROM.begin(4); EEPROM.get(0, stepsPerPercent); EEPROM.end(); if(stepsPerPercent < MIN_STEPS || stepsPerPercent > MAX_STEPS) stepsPerPercent = DEFAULT_STEPS; } void saveStepsToEEPROM() { EEPROM.begin(4); EEPROM.put(0, stepsPerPercent); EEPROM.commit(); EEPROM.end(); stepsChanged = false; } void indicateFullRotations() { digitalWrite(LED_PIN, HIGH); delay(300); digitalWrite(LED_PIN, LOW); } void handleButtons() { unsigned long currentMillis = millis(); if(currentMillis - lastPress < DEBOUNCE_TIME) return; if(digitalRead(BUTTON_UP_PIN) == LOW) { stepsPerPercent = min(stepsPerPercent + 10, MAX_STEPS); stepsChanged = true; stepsChangeTime = currentMillis; lastPress = currentMillis; indicateFullRotations(); } if(digitalRead(BUTTON_DOWN_PIN) == LOW) { stepsPerPercent = max(stepsPerPercent - 10, MIN_STEPS); stepsChanged = true; stepsChangeTime = currentMillis; lastPress = currentMillis; indicateFullRotations(); } if(stepsChanged && (currentMillis - stepsChangeTime > EEPROM_SAVE_DELAY)) saveStepsToEEPROM(); } // FIXED POTENTIOMETER HANDLING void handlePotentiometer() { static unsigned long lastPotRead = 0; unsigned long currentMillis = millis(); if (currentMillis - lastPotRead < 100) return; lastPotRead = currentMillis; int potValue = analogRead(POTENTIOMETER); int mappedValue = map(potValue, 0, 1023, 0, 100); // Ако разликата е значителна или сме близо до виртуалната позиция if (abs(mappedValue - lastPotValue) > POTENTIOMETER_THRESHOLD) { lastPotMoveTime = currentMillis; blindsTarget = mappedValue; virtualPotPosition = mappedValue; lastPotValue = mappedValue; } } void updateSinricPosition() { if (!sinricProConnected) return; SinricProBlinds &myBlinds = SinricPro[BLINDS_ID]; myBlinds.sendRangeValueEvent(blindsPosition); lastPositionReport = millis(); } void handleMovement() { static long targetSteps = 0; static int lastReportedPosition = -1; if (!powerState) { if (stepper.isRunning()) stepper.stop(); return; } if (blindsTarget != blindsPosition) { targetSteps = (long)blindsTarget * stepsPerPercent; stepper.moveTo(targetSteps); } if (stepper.distanceToGo() != 0) stepper.run(); else if (blindsPosition != blindsTarget) { blindsPosition = blindsTarget; if (blindsPosition != lastReportedPosition) { updateSinricPosition(); lastReportedPosition = blindsPosition; } } } void calibrateStepper() { stepper.setMaxSpeed(MAX_SPEED); stepper.setAcceleration(ACCELERATION); stepper.moveTo(100 * stepsPerPercent); while (stepper.distanceToGo() != 0) { stepper.run(); delay(1); } delay(1000); stepper.moveTo(0); while (stepper.distanceToGo() != 0) { stepper.run(); delay(1); } stepper.setCurrentPosition(0); blindsPosition = 0; blindsTarget = 0; } void setup() { setupPins(); loadStepsFromEEPROM(); stepper.setMaxSpeed(MAX_SPEED); stepper.setAcceleration(ACCELERATION); setupWiFi(); setupSinricPro(); calibrateStepper(); } void loop() { ArduinoOTA.handle(); SinricPro.handle(); handleButtons(); handlePotentiometer(); handleMovement(); if (sinricProConnected && (millis() - lastPositionReport > POSITION_REPORT_INTERVAL)) updateSinricPosition(); } |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


