помогите с кодом ардуино уно

toxi4just
Offline
Зарегистрирован: 02.08.2019
Вот сам код:
 

Moderator : пожалуйста, вставьте код правильно - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

 
Здравствуйте!Я только начинаю изучать ардуино,решил сделать умную теплицу,но выдает ошибку:
C:\Users\anton\AppData\Local\Temp\ccVRblip.ltrans1.ltrans.o: In function `loop':
 
C:\Users\anton\Documents\Arduino\sketch_aug02a/sketch_aug02a.ino:40: undefined reference to `getTemp()'
 
collect2.exe: error: ld returned 1 exit status
 
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
как исправить?заранее спасибо
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

toxi4just пишет:

Вот сам код:

Где?

Yaselisky
Offline
Зарегистрирован: 07.04.2017

Господа, помогите пожалуйста.

Есть часы на которых установлен только шаговый двигатель, причем на него подается поминутно меняющаяся полярность. Поидее на эти часы должно подаваться 24В каждую минуту, с основных часов(Хронометра). Поскольку "Век высоких технологий" и переход на цифру, хронометр сняли и часы, мои, стали бесполезны. Я собрал хронометр и готов подключать, но возникла проблема. Делаю скетч на основе "Блинк" из стандартных скетчей и не смог сделать, чтобы последовательно подавался сигнал на пины, а также чтобы длительность в секунду. Нашел наработки и на основе их сделал скетч, но вывод идет не последовательно, а каждый со своим интервалом.

class Flasher
{
  // Переменные - члены класса
  // Инициализируются при запуске
  int ledPin; // номер пина со светодиодом
  long OnTime; // время включения в миллисекундах
  long OffTime; // время, когда светодиод выключен
 
  // Текущее состояние
  int ledState; // состояние ВКЛ/ВЫКЛ
  unsigned long previousMillis; // последний момент смены состояния
 
  // Конструктор создает экземпляр Flasher и инициализирует 
  // переменные-члены класса и состояние
  public:
  Flasher(int pin, long on, long off)
  {
   ledPin = pin;
   pinMode(ledPin, OUTPUT);
 
   OnTime = on;
   OffTime = off;
 
   ledState = LOW;
   previousMillis = 0;
  }
 
  void Update()
  {
   // выясняем не настал ли момент сменить состояние светодиода
 
   unsigned long currentMillis = millis(); // текущее время в миллисекундах
 
   if((ledState == HIGH) && (currentMillis - previousMillis >= OnTime))
   {
     ledState = LOW; // выключаем
     previousMillis = currentMillis; // запоминаем момент времени
     digitalWrite(ledPin, ledState); // реализуем новое состояние
   }
   else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTime))
   {
     ledState = HIGH; // выключаем
     previousMillis = currentMillis ; // запоминаем момент времени
     digitalWrite(ledPin, ledState); // реализуем новое состояние
   }
  }
};
 
Flasher led1(2, 60000, 1000);
//Flasher led2(3, 2000, 500);
Flasher led3(4, 60000, 1000);
//Flasher led4(5, 2000, 500);
 
void setup()
{
}
 
void loop()
{
  led1.Update();
  //led2.Update();
  led3.Update();
  //led4.Update();
}

 

b707
Offline
Зарегистрирован: 26.05.2017

опишите яснее,  как должен происходить "вывод последовательно" на 2 пина

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yaselisky пишет:

 сделал скетч, но вывод идет не последовательно, а каждый со своим интервалом.

Ничего не понял.

1. Что надо?
2. Как работает сейчас?
3. Чем (1) отличается от (2)?

Только внятно, подробно и чётко/однозначно.

Yaselisky
Offline
Зарегистрирован: 07.04.2017

сейчас каждый пин живет своей жизнью, согласно характеристик в коде, а мне надо чтобы сигнал подавался последовательно, т.е. включение на одну секунду, затем минута ожидания и включение другого пина на 1 секунду и так по кругу. Нужно чередовать пины раз в минуту и чтоб сигнал длился секунду...вот)

Yaselisky
Offline
Зарегистрирован: 07.04.2017

вначале включается D2 на 1 секунду, потом ничего не происходит 59 секунд и включается D3 на одну сикунду, затем 59 секунд ничего не происходит и сново включается D2...и так по кругу

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
#define PIN1 2
#define PIN2 3

void setup()
{
  pinMode(PIN1, OUTPUT);
  pinMode(PIN2, OUTPUT);
  digitalWrite(PIN1, LOW);
  digitalWrite(PIN2, LOW);
}

void loop()
{
  digitalWrite(PIN1, HIGH);
  delay(1000);
  digitalWrite(PIN1, LOW);
  delay(59000);
  digitalWrite(PIN2, HIGH);
  delay(1000);
  digitalWrite(PIN2, LOW);
  delay(59000);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Yaselisky пишет:

вначале включается D2 на 1 секунду, потом ничего не происходит 59 секунд и включается D3 на одну сикунду, затем 59 секунд ничего не происходит и сново включается D2...и так по кругу

В вашем коде у каждого пина время Offtime должно быть не 59 сек, а 1мин59сек. Далее запускаете таймеры со смещением в 1 минуту - и все будет работать как надо.

Yaselisky
Offline
Зарегистрирован: 07.04.2017

b707 пишет:

В вашем коде у каждого пина время Offtime должно быть не 59 сек, а 1мин59сек. Далее запускаете таймеры со смещением в 1 минуту - и все будет работать как надо.

вот и завис над этим...

наверно проще будет сделать на 555 и 595-й микросхеме :(

Yaselisky
Offline
Зарегистрирован: 07.04.2017

Всем спасибо за участие

b707
Offline
Зарегистрирован: 26.05.2017

Yaselisky пишет:

наверно проще будет сделать на 555 и 595-й микросхеме :(

если не хотите дорабатывать первоначальный код, вам в сообщении #7 дали готовый

Yaselisky
Offline
Зарегистрирован: 07.04.2017

этот код работает не так, он открывает один пин, через секунду второй и оба гарят минуту 

b707
Offline
Зарегистрирован: 26.05.2017

Yaselisky пишет:

этот код работает не так, он открывает один пин, через секунду второй и оба гарят минуту 

Это вы про код из сообщения 7? - а я вот в коде вижу совсем другое. В строке 14 включается PIN1. через секунду, в строке 16 - выключается. Потом ждем 59 сек и точно так же включаем и выключаем PIN2

Похоже, вы даже полностью готовый код не в состоянии правильно использовать....

Yaselisky
Offline
Зарегистрирован: 07.04.2017

b707 пишет:

Это вы про код из сообщения 7? - а я вот в коде вижу совсем другое. Похоже, вы даже полностью готовый код не в состоянии правильно использовать....

это отличие программистов и пользователей

я загрузил скетч с сообщения 7 в готовое устройство и смотрю как оно себя ведет

 

Yaselisky
Offline
Зарегистрирован: 07.04.2017

по факту зажигается пин1, через секунду пин2, потом они гарят минуту и гаснут на секунду, вначале пин1, затем пин2

kalapanga
Offline
Зарегистрирован: 23.10.2016

У него небось светодиоды или кто-там ещё подключен низким уровнем включаются.

Yaselisky, в скетче из #7 все HIGH на LOW, а LOW на HIGH поменяйте.

А вобще надо всегда показывать схему. А то спалите всё нафиг!

b707
Offline
Зарегистрирован: 26.05.2017

Yaselisky пишет:

по факту зажигается пин1, через секунду пин2, потом они гарят минуту и гаснут на секунду, вначале пин1, затем пин2

поясните, как вы "зажигаете пины". Что к ним присоединено - светодиоды или еще что? нарисуйте схему

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

МЛЯ!

что подключено к пинам и каким ?

(сейчас окажется реле с упр. минусом.)

Yaselisky
Offline
Зарегистрирован: 07.04.2017

стоит ардуино нано к пинам D2 и D3 включены реле, земля на ардуино

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

:)))

замените все HIGH на LOW и наоборот.

Yaselisky
Offline
Зарегистрирован: 07.04.2017

xDriver пишет:

:)))

замените все HIGH на LOW и наоборот.

спасибо

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

xDriver пишет:

(сейчас окажется реле с упр. минусом.)

Шаман, однако :)

Yaselisky
Offline
Зарегистрирован: 07.04.2017

ЕвгенийП пишет:

Шаман, однако :)

Блин, ну тупанул, с кем не бывает

Yaselisky
Offline
Зарегистрирован: 07.04.2017

спасибо огромно еще раз

и за терпение тоже :)

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

b707 пишет:

опишите яснее,  как должен происходить "вывод последовательно" на 2 пина

первичные часы заменить требуется )))