Программирование

Вопросы по программированию Arduino.

Нужна помощь по коду

Всем привет! Недавно купил arduino uno. Чуть изучил язык и делал по урокам простые схемки. Сейчас делаю rgb ночник. Но вот одна проблема: при затемнении фоторезистора включается красный. Потом ещё темнеет-зелёный, НО красный остаётся включенным. Также и с синим. Что надо исправить в коде, чтобы горел только один цвет. 

neopixel + микрофон реагирующий на хлопки

Делаю проект в котором диоды из Neopixel кольца должны реагировать на хлопки.
проблема в том что не знаю как сделать так, что один хлопок будет означать включение, а два - переключение из цветного (мигающего режима) в обычный белый.
Я новичёк в этом деле и проект делается для учебы.
вот нашла код для этого Neopixel кольца( в нем 12 диодов) и код для микрафона, но он работет только для одного хлопка.
Еще не совсем получается соединить их чтобы при хлопке начинал работать уже готовый код для диодов.
Помогите пожалуйста, кто разбирается в этом.

Импульсный режим TIG сварки

Добрый всем день. Я начинающий "ардуинист". Решил заменить управление на своем сварочном комбайне. В одном корпусе электрод, полуавтомат и "аргон"(в планах). 

Написал скетч, где куча меню и тд...

Возникла проблема нужно создать хитрые импульсы для импульсного режима TIG сварки.

Нужно вот такое...

Исходные переменные - частота f до 300 гц и коэфициент заполнения k от 0 до 100% -  (верхний график)

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

void loop()  // цикл программы
{
 
   if (digitalRead(key) == HIGH) {n++;}   // если нажата кнопкa
   if(n >= 20)
    { n0++;
      n = 0;
    }                                // снижаем скорость нарастания чисел(20 к 1),наш атмега слишком шустрый)))
  if (n0 > 9) {n0 = 0; n1++;}        // увеличиваем 2 разряд если первый превысил 9 и обнуляем первый
  if (n1 > 9) {n1 = 0; n2++;}
     
   if (n2 < 9) 
   { printch ( n0,  0);    // выводим первый разряд
     printch ( n1,  1);    // выводим второй рязряд    
     printch ( n2,  2);   

Кнопки

Всем привет!

незнаю как написать программу, помогите!

5 кнопок в определенном порядке нужно их нажать, допустим 2,5,4,3,1 должен податься сигнал на релле который открывает магнитный замок.

 

 

Не могу послать по выходу из состояния сна

#include <avr/sleep.h>
#include <avr/power.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

const uint64_t pipes[2] = { 0xFFFFFFFF00LL, 0xFFFFFFFF01LL };

RF24 radio(9,10);

byte data[4];
int ich=0;
byte bch=0;
volatile boolean onflag=0;

void waking(void){
  onflag=1;
}

void sleeping(void){
  onflag=0;
  delay(100);
  radio.powerDown();
  pinMode(13,0);
  pinMode(12,0);
  pinMode(11,0);
  pinMode(10,0);
  pinMode(9,0);
  delay(50);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();

Break из while

Ни въеду, как сделать выход break из цикла while по времени. т.е. если через 500мс цикл не закончился то принудительный выход. 

Примерно так:

while(x==0){
выполняется какой то код;
break если через 500мс цикл сам не закончился;
}

 

Запуск функции с заданной частотой

В этой - http://arduino.ru/forum/programmirovanie/etyudy-dlya-nachinayushchikh-bl... - теме подробно описывается, как инвертировать определённый пин по прерыванию, но не понятно, как по нему запускать процедуру.

Или я не нашел, гдк это описано.

Помогите, пожалуйста, нужно выполнять определённые команды через равные зсданные промежутки времени (раз в 3750 мсек).

DS3231. логика включения и выключению светодиода при времени включении больше, чем время выключения(в след. сутках)

Задача: включить светодиод например в 19:00, выключить в 18:00 следующих суток. и при этом состояние светодиоды могло восстановиться после отключения сети.

пол дня голову ломаю. для случая включения в течении одних и тех же суток понятно. 

Если (Час.сейчас >=Час.вкл И Мин.сейчас>=Мин.вкл И Час.сейчас <= Час.выкл И Мин.сейчас <= Мин.выкл)
 {светодиод включить}

иначе выключить

А вот с переходом на следующие сутки как?

если образ идеи, но до ума не доводится никак...