Как объединить две программы в Arduino?
Итак, у меня есть ESP8266 nodemcu, на который я прошил программу под названием Deauther 2.0. Последние два часа я потратил на то, чтобы объединить ещё один Sketch. Но всё закончилось плачевно.
Чего я пытаюсь достичь:
При первом включении nodemcu должен загрузиться Deauther. Но при нажатии кнопки встроенной флеш-памяти должен загрузиться второй скетч.
Что я попытался исправить:
Добавил свой собственный clock.cpp в скетч Deauther и отредактировал верхнюю часть скетча:
const int button = 0; int temp = 0; void setup() { pinMode(button, INPUT) } void loop() { temp = digitalRead(button) if (temp == HIGH ) { // запустить код ниже }Ещё кое-что, о чём я не хочу упоминать.
Есть идеи, как это исправить?
Спасибо!
@nobody user, 👍-1
Обсуждение1 ответ
Чтобы объединить скетчи, необходимо убедиться, что они не будут пытаться получить доступ к одним и тем же контактам/ресурсам несовместимыми способами. Например, если обоим требуется входной сигнал через последовательный порт, необходимо настроить параметры так, чтобы отправляемый входной сигнал достигал корректного кода.
Убедившись в этом, зачастую проще всего сначала провести рефакторинг обоих набросков, чтобы избежать любого типа кода, вызывающего задержку, или чего-либо, что останавливает выполнение в ожидании каких-либо событий, и вместо этого использовать конечный автомат, который просто постоянно выполняет цикл и использует временные метки для управления тем, когда следует выполнять какие-либо действия.
Например, второй скетч имеет формат:
void loop(){
//do stuff
delay(1000);
}
Вам следует переписать это так
unsigned long last_run = 0;
void loop(){
unsigned long current_millis = millis();
if(current_millis - last_run > 1000){
last_run = current_millis;
//делайте то, что никогда не блокирует
}
}
После того, как это будет завершено и вы убедитесь, что нет конфликта имен между скетчами для функций/глобальных переменных, вы можете просто добавить функции loop() и setup() в новые функции loop() и setup()
- NodeMCU - Vin контакт как выход 5V?
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разве в узле MCU v3 (LoLin) нет встроенного светодиода?
- Разница между этими двумя платами NodeMCU?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Как определить размер Flash?
- WebSocketsServer.h: No such file or directory
Волшебного способа объединить два скетча не существует. В общем случае это может быть невозможно. Вам нужно понять, что и как делает один скетч, понять, что и как делает другой, и написать третий скетч, объединяющий оба. Устраните любые проблемы, возникающие при обычном подходе., @Mark Smith
Автор не говорит об объединении двух эскизов. Автор говорит об использовании одного эскиза для загрузки другого эскиза., @jsotola
Любой, кто задаёт такой простой вопрос, не имеет права использовать деаутентификацию Wi-Fi. С ESP8266 можно делать столько всего интересного. Почему же вы выбираете вредоносное использование?, @per1234
@per1234 Я не использую деаутентификацию в вредоносных целях, я только тестирую ее в своей собственной сети., @nobody user