Помогите соединить два скетча
- Войдите на сайт для отправки комментариев
Сб, 22/01/2022 - 16:49
Есть два кода, один для сервопривода, другой для амперметра, каждый выводит данные в ексель, никак не могу написать код, просто ничего не работает
Вот код для сервопривода
#include <Servo.h> // подключение библиотеки Servo Servo servo1;// Servo servo2;// газ const int pinServo1=10; // Пин для подключения сервопривода const int pinServo2=11; // Пин для подключения сервопривода const int POT1=0; // Аналоговый вход 0 для подключения потенциометра const int POT2=1; // Аналоговый вход 1 для подключения потенциометра int row_excel = 0; // количество строк int valpot1 = 0; // переменная для хранения значения потенциометра int valpot2 = 0; // переменная для хранения значения потенциометра int angleServo1 = 0; // переменная для хранения угла поворота сервы int angleServo2 = 0; // переменная для хранения угла поворота сервы void setup() { Serial.begin(9600); // инициализируем последовательный порт, скорость 9600 Serial.println("CLEARDATA"); // очистка листа excel Serial.println("LABEL,Time,angleServo1, angleServo2, row_excel, , , "); // заголовки столбцов // подключить переменную servo к выводу pinServo servo1.attach(pinServo1); servo2.attach(pinServo2); } void loop() { valpot1 = analogRead(POT1); // чтение данных потенциометра valpot2 = analogRead(POT2); // чтение данных потенциометра // масштабируем значение к интервалу 0-180 angleServo1=map(valpot1,0,1023,0,180); angleServo2=map(valpot2,0,1023,0,180); // поворот сервопривода на полученный угол servo1.write(angleServo1); servo2.write(angleServo2); row_excel++; // номер строки + 1 Serial.print("DATA,TIME,"); // запись в excel текущей даты и времени Serial.print(angleServo1); Serial.print(","); Serial.print(angleServo2); Serial.print(","); Serial.println(row_excel); delay (500); }
Вот для амперметра
#include <PZEM004Tv30.h> PZEM004Tv30 pzem(8,9); // Software Serial pin 8 (RX) & 9 (TX) int row_excel = 0; // количество строк void setup() { Serial.begin(9600); Serial.println("CLEARDATA"); // очистка листа excel Serial.println("LABEL,Time,Voltage, Current, Power, Energy, Frequency, PF "); // заголовки столбцов } void loop() { float voltage = pzem.voltage(); if(voltage != NAN){ Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V"); } else { Serial.println("Error reading voltage"); } float current = pzem.current(); if(current != NAN){ Serial.print("Current: "); Serial.print(current); Serial.println("A"); } else { Serial.println("Error reading current"); } float power = pzem.power(); if(current != NAN){ Serial.print("Power: "); Serial.print(power); Serial.println("W"); } else { Serial.println("Error reading power"); } float energy = pzem.energy(); if(current != NAN){ Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh"); } else { Serial.println("Error reading energy"); } float frequency = pzem.frequency(); if(current != NAN){ Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz"); } else { Serial.println("Error reading frequency"); } float pf = pzem.pf(); if(current != NAN){ Serial.print("PF: "); Serial.println(pf); } else { Serial.println("Error reading power factor"); } Serial.println(); row_excel++; // номер строки + 1 Serial.print("DATA,TIME,"); // запись в excel текущей даты и времени Serial.print(voltage); Serial.print(","); Serial.print(current); Serial.print(","); Serial.print(power); Serial.print(","); Serial.print(energy,3); Serial.print(","); Serial.print(frequency, 1); Serial.print(","); Serial.println(pf); Serial.print(","); Serial.println(row_excel); delay(1000); }
Подскажите способы как их соединить, я пробовал и просто все в один код написать и использовать два потока ничего не выходит
А что должно получиться-то?
Так-то их нетрудно соединить - командой cat.
Я бы поставил вопрос иначе:
-Чего ты желаешь, на самом деле, научиться соединять такие коды или соединить эти два кода?
Должен получиться скетч на одной ардуинке через который можно управлять сервоприводом и получать данные от датчика pzem004t
Хочу научиться ведь мне нужно будет дальше соединять скетчи
мне нужно будет дальше соединять скетчи
Сомнительный тезис.
Мне вот за многие годы ни разу не понадобилось.
Хочу научиться ведь мне нужно будет дальше соединять скетчи
Подскажите способы как их соединить, я пробовал и просто все в один код написать и использовать два потока ничего не выходит
А я знаю что мне понадобиться, так что помощь будет?
так что помощь будет?
Конечно, нет. Вы не просили ни о какой помощи. Чтобы была помощь, нужно прочитать правила форума - в первой теме раздела Песочница - и правильно задать вопрос.
У Вас же нет никакой просьбы о помощи. Где Ваш объединённый скетч? Какие именно с ним проблемы? Вы не привели скетча и не задали никаких вопросов.
Вы хотите, чтобы кто-то просто сделал всю работу за Вас? Ну, тогда это не помощь Это заказ. В платном разделе за денюшку.
вот пробовал соединить через два потока, серво не работает, амперметр тоже
Можно и помочь, пациент вроде не безнадежен, нет?
------------------
Не забивай себе голову дурацкими библиотеками пока. У тебя две задачи, одна из них постоянно читает нечто (потенциометр), а другая просто раз в сек печатает, так? Вторую оформи так, как моргают диодиком в "блинк без делей". На фоне работы первой.
Если напишешь, что не понял... будет жаль ;)))))
Спасибо за ответ, сейчас иду пробовать
Ух ты! Есть библиотеки для разделения потоков!
В исходных скетчах вроде всё просто для объединения и без. Может не работает из-за несовместимости библиотек?
Вот этот пример не поможет?
http://arduino.ru/forum/programmirovanie/obedinenie-dvukh-sketch-kodov#c...
Кажется что код рабочий, амперметр читает раз в две секунды, но данных просто нет, а сервопривод крутится до упора и не работает (по отдельности все работает)
Вот этот пример не поможет?
Спасибо, сейчас попробую
Вот этот пример не поможет?
Честно я там ничего не понял, спасибо за помощь, но для меня там слишком тяжело
Так что забросьте непосильное Вам дело.
Кажется что код рабочий, амперметр читает раз в две секунды, но данных просто нет, а сервопривод крутится до упора и не работает (по отдельности все работает)
А библиотеки совместимы?
Выбросьте часть кода в лууп про амперметр - сервы будут правильно крутиться?
попробуй перенести сервы на 6 и 7 пины
Не поможет, тогда еще можно закинуть локально библиотеку SoftwareSerial.h и поправить чуток
Да! Есть некоторое количество ошибок, я поправил их, как мог, попробуй, не взлетит надо будет думать
попробуй перенести сервы на 6 и 7 пины
А зачем? на 6 и 7 пине что должно поменяться? ?
попробуй перенести сервы на 6 и 7 пины
Не поможет, тогда еще можно закинуть локально библиотеку SoftwareSerial.h и поправить чуток
Да! Есть некоторое количество ошибок, я поправил их, как мог, попробуй, не взлетит надо будет думать
спасибо за код, иду подключать
попробуй перенести сервы на 6 и 7 пины
Не поможет, тогда еще можно закинуть локально библиотеку SoftwareSerial.h и поправить чуток
Да! Есть некоторое количество ошибок, я поправил их, как мог, попробуй, не взлетит надо будет думать
Большое спасибо за код, амперметр начал работать, но сервопривод не могу переставить так как паяльник умер.
Вот так будет еще правильней вроде:
:-)
Чините паяльник скорее, а то пишут, что библиотеки "серво" и "софтваресериал" не работают вместе (интересно узнать).
https://qna.habr.com/q/188627
Есть такая проблема. Какой-нить макет с озвучкой через DFPlayer и сервой делаешь и матом ругаешься - включил звук, серва дернулась.
:-)
Чините паяльник скорее, а то пишут, что библиотеки "серво" и "софтваресериал" не работают вместе (интересно узнать).
https://qna.habr.com/q/188627
заставить работать можно, я думаю, точнее есть большая надежда граничащая с уверенностью )))
ЗЫ { 9600, 114, 236, 236, 233, }, это задержки, надо поднимать скорость до 115200, там они минимальные, если не взлетит, то переводить датчик на хардовый сериал
{ 115200, 1, 17, 17, 12, },