Код без библиотек Arduino для ATtiny13

SeRRgj
Offline
Зарегистрирован: 30.06.2015

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

Помогите пожалуйста.

Вот код:

int MicPin = 1;          //вход микрофона
int CtlPin = 11;         //нога, которой управляем
int CtlVal = 0;          //состояние этой ноги сразу после включения
int ClapMargin = 70;     //порог хлопка
int SkipLen = 500;      //длительность защитной паузы
int SilenceLen = 1000;   //длительность тишины после хлопка
int NextClapLen = 500;  //время, в течение которого ждем след. хлопок

void setup()
{
  pinMode(CtlPin, OUTPUT);
  digitalWrite(CtlPin, CtlVal);
}
int mic_prev = 0;
int ReadNext() {
  int result;
  int d;
  d = analogRead(MicPin);   
  result = abs(mic_prev-d); /
  mic_prev = d;            
  return result;          
}
int WaitForClap(int WaitLen) {
  int d, i;
  i = 0;      
  do {
    d = ReadNext();               
    i++;                           
    if (d > ClapMargin) {          
      return 1;                    
    }
    if ( (WaitLen != -1) && (i >= WaitLen) ) { 
      return 0;                               
    }
  } while (1);
}
void Skip(int SkipLen) {
  int i;
  for (i=0; i<SkipLen; i++) {
    ReadNext();
  }
}
void loop() {
  int d1, d2;
  WaitForClap(-1);              
  Skip(SkipLen);               
  d1 = WaitForClap(SilenceLen); 
  if (d1 == 0) {                
    d2 = WaitForClap(NextClapLen); 
    if (d2 == 1) {                
      CtlVal = 1 - CtlVal;            
      digitalWrite(CtlPin, CtlVal);
    }
  }
  Skip(SkipLen);                
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в тиньке всего 64байта оперативки, а ты быдлокодишь))

пины и пороги объявляй через define

где возможно вмесо int используй byte или boolean

 

 

SeRRgj
Offline
Зарегистрирован: 30.06.2015

Тоесть код работать небудет на этой тиньке, даже после переделки?

Прост у меня опыт, только одна тинька 2313 была и то простую мигалочку делал))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

почему не будет. надо проверять. но код надо оптимизировать. да и всегда полезно, даже на камнях с большим объемом оперативки правильно писать

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

Знаете, толькот без обид - код-то сократить можно, но он концептуально неверен. Лучше бы Вам переписать его полностью, заодноо научившись правильно писать под концепцию программирования, применяемую здесь.

Что я имею в виду?

Вот, смотрите, концепция программирования здесь такая: Вы инициализируете программу (в функции setup) а затем Вас периодически вызывают (функция loop) чтобы Вы выполнили какие-то короткие действия. Ожидание каких-то внешних событий происходит между вызовами loop. А Вы устраиваете бесконечный цикл в ожидании внешних действий. Так программируют линейные программы, когда Вам дали управление и делайте что хотите. Здесь же бесконечных циклов не делают - хдесь и так уже есть бесконечный цикл вызово loop. Т.е. общая идея программирования здесь другая.

Если есть желание, давайте перепишем вместе по-человечески, заодно почуствуете стиль программирования в этой парадигме.