прошу помощи в доработке кода

sir90
Offline
Зарегистрирован: 02.01.2016

имеиться код

#include <IRremote.h>

int RECV_PIN = A0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  irrecv.enableIRIn();
  Serial.begin(9600);
  
  pinMode(2, OUTPUT); //Relay 1
  pinMode(3, OUTPUT); //Relay 2
  pinMode(4, OUTPUT); //Relay 3
  pinMode(5, OUTPUT); //Relay 4
  pinMode(6, OUTPUT); //Relay 5
  pinMode(7, OUTPUT); //Relay 6
  pinMode(8, OUTPUT); //Relay 7
  pinMode(9, OUTPUT); //Relay 8
 
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
}
 
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
  }



  if (results.value == 0xFE807F) {//1
    num1();
    results.value = 0x00000000;
  }

  if (results.value == 0xFE40BF) {//2
    num2();
    results.value = 0x00000000;
  }

  if (results.value == 0xFEC03F) {//3
    num3();
    results.value = 0x00000000;
  }

  if (results.value == 0xFE20DF) {//4
    num4();
    results.value = 0x00000000;
  }

  if (results.value == 0xFEA05F) {//5
    num5();
    results.value = 0x00000000;
  }

  if (results.value == 0xFE609F) {//6
    num6();
    results.value = 0x00000000;
  }

  if (results.value == 0xFEE01F) {//7
    num7();
    results.value = 0x00000000;

  if (results.value == 0xFE10EF) {//8
    num8();
    results.value = 0x00000000;
  }


  }
  }
  


void num1() {
  static int m = HIGH;
  m = !m;
  digitalWrite(2, m);
  
} 

void num2() {
  static int m = HIGH;
  m = !m;
  digitalWrite(3, m);
}

void num3() {
  static int m = HIGH;
  m = !m;
  digitalWrite(4, m);
} 

void num4() {
  static int m = HIGH;
  m = !m;
  digitalWrite(5, m);
}

void num5() {
  static int m = HIGH;
  m = !m;
  digitalWrite(6, m);
} 

void num6() {
  static int m = HIGH;
  m = !m;
  digitalWrite(7, m);
}

void num7() {
  static int m = HIGH;
  m = !m;
  digitalWrite(8, m);
} 

void num8() {
  static int m = HIGH;
  m = !m;
  digitalWrite(9, m);
}

при посылки сигнала 1 с пульта работает реле №1 в скетче (num1)

задача: заставить скетч работать такпри получении сигнала с пульта включались только определенные реле а осталые отключались не важно в каком состоянии они были до получения сигнала 

 

вот пои коды кнопок и какие реле надо включать:

 

FE48B7 (отключает все реле )
FE00FF (включает только 2, 3, 4, 7, 8)
FE807F (включает только 2, 3)
FE40BF (включает только 2, 4, 5, 6, 8)
FEC03F (включает только 2, 3, 4, 5, 6)
FE20DF (включает только 2, 3, 5, 7)
FEA05F (включает только 3, 4, 5, 6, 7)
FE609F (включает только 3, 4, 5, 6, 7, 8)
FEE01F (включает только 2, 3, 4)
FE10EF (включает только 2, 3, 4, 5, 6, 7, 8)
FE906F (включает только 2, 3, 4, 5, 6, 7)
 
прошу помощи кто напишет или допишит скетч как мне нужно, гарантирую маленькое вознаграждение=)
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы ошиблись разделом. Вам сюда.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Не проверял, мне это не интересно

/**/
//---------------------------
// класс реле
#define OFF_ HIGH /*выключенное сост реле*/
class Cl_Rel {
  protected:
    byte pin;
  public:
    /*конструктор*/
    Cl_Rel(byte pin_): pin(pin_) {}
    /*инициализация*/
    void init() {
      pinMode(pin, OUTPUT); //Relay 1
      OFF();
    }
    /*выкл*/
    void OFF() {
      digitalWrite(pin, OFF_);
    }
    /*вкл*/
    void ON() {
      digitalWrite(pin, !OFF_);
    }
};
//-----Компановка----------------------
#include <IRremote.h>
IRrecv irrecv(/*пин ИК*/A0);
decode_results results;

Cl_Rel Rel_1(/*пин*/2);
Cl_Rel Rel_2(/*пин*/3);
Cl_Rel Rel_3(/*пин*/4);
Cl_Rel Rel_4(/*пин*/5);
Cl_Rel Rel_5(/*пин*/6);
Cl_Rel Rel_6(/*пин*/7);
Cl_Rel Rel_7(/*пин*/8);
Cl_Rel Rel_8(/*пин*/9);
//------main--------------------------

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  Rel_1.init();
  Rel_2.init();
  Rel_3.init();
  Rel_4.init();
  Rel_5.init();
  Rel_6.init();
  Rel_7.init();
  Rel_8.init();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
  if (results.value == 0xFE807F) {//1
    Rel_1.OFF();
    Rel_2.OFF();
    Rel_3.OFF();
    Rel_4.OFF();
    Rel_5.OFF();
    Rel_6.OFF();
    Rel_7.OFF();
    Rel_8.OFF();
  }
  else if (results.value == 0xFE40BF) {//2
    Rel_2.ON();
    Rel_3.ON();
    Rel_4.ON();
    Rel_7.ON();
    Rel_8.ON();
  }
  else if (results.value == 0xFEC03F) {//3

  }
  else if (results.value == 0xFE20DF) {//4

  }
  else if (results.value == 0xFEA05F) {//5

  }
  else if (results.value == 0xFE609F) {//6

  }
  else if (results.value == 0xFEE01F) {//7
  }
  else if (results.value == 0xFE10EF) {//8
  }
}
/**/

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Сдаётся мне, что классы этому скетчу никак не помогут. Он как не работал, так и не будет из-за одной небольшой ошибки, сделанной из-за бездумного копипастинга.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

sadman, согласен. Мне просто облом искать там ошибки. А без классов я уже писать не могу. Так я еще и свои напихаю.

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

qwone пишет:

sadman, согласен. Мне просто облом искать там ошибки. А без классов я уже писать не могу. Так я еще и свои напихаю.

Ну раз уж взялись за ОО, почему бы не использовать все его преимущества? К примеру куда приятенее ваш код сделать так:


Cl_Rel* Rels[8];
//------main--------------------------

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  for (int i=0; i < 8; i++){
     Rels[i] = new Cl_Rel(i+2);
     Rels[i]->init();
  }
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
  if (results.value == 0xFE807F) {//1
      for (int i=0; i < 8; i++) Rels[i]->OFF();

// ну и дальше по тексту...

Кстати, при создании экземпляров в Setup - от метода init вообще надо избавляться и все делать в конструкторе

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

sir90 пишет:

задача: заставить скетч работать такпри получении сигнала с пульта включались только определенные реле а осталые отключались не важно в каком состоянии они были до получения сигнала 

вот пои коды кнопок и какие реле надо включать:

FE48B7 (отключает все реле )

FE00FF (включает только 2, 3, 4, 7, 8)
FE807F (включает только 2, 3)
FE40BF (включает только 2, 4, 5, 6, 8)
FEC03F (включает только 2, 3, 4, 5, 6)
FE20DF (включает только 2, 3, 5, 7)
FEA05F (включает только 3, 4, 5, 6, 7)
FE609F (включает только 3, 4, 5, 6, 7, 8)
FEE01F (включает только 2, 3, 4)
FE10EF (включает только 2, 3, 4, 5, 6, 7, 8)
FE906F (включает только 2, 3, 4, 5, 6, 7)
 

Попробуйте так

#include <IRremote.h>

int RECV_PIN = A0;
IRrecv irrecv(RECV_PIN);
decode_results results;
uint32_t resultsTemp;

void setup() {
  irrecv.enableIRIn();
  Serial.begin(9600);

  DDRD = DDRD | 0b11111100;
  PORTD = PORTD & 0b00000011;
  DDRB = DDRB | 0b00000011;
  PORTB = PORTB & 0b11111100;
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
  }

  if(resultsTemp != results.value) {
    resultsTemp = results.value;
    if(results.value == 0xFE48B7) {//1 (отключает все реле )
      PORTD = PORTD & 0x03;
      PORTB &= ~(1<<0);// 0
    }
    else if(results.value == 0xFE00FF) {//2 (включает только 2, 3, 4, 7, 8)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0x9C;
      PORTB |= (1<<0);// 1
    }
    else if(results.value == 0xFE807F) {//3 (включает только 2, 3)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0x0C;
      PORTB &= ~(1<<0);// 0
    }
    else if(results.value == 0xFE40BF) {//4 (включает только 2, 4, 5, 6, 8)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0x74;
      PORTB |= 1<<0;// 1
    }
    else if(results.value == 0xFEC03F) {//5 (включает только 2, 3, 4, 5, 6)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0x78;
      PORTB &= ~(1<<0);// 0
    }
    else if(results.value == 0xFE20DF) {//6 (включает только 2, 3, 5, 7)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0xAC;
      PORTB &= ~(1<<0);// 0
    }
    else if(results.value == 0xFEA05F) {//7 (включает только 3, 4, 5, 6, 7)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0xF8;
      PORTB &= ~(1<<0);// 0
    }
    else if(results.value == 0xFE609F) {//8 (включает только 3, 4, 5, 6, 7, 8)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0xF8;
      PORTB |= 1<<0;// 1
    }
    else if(results.value == 0xFEE01F) {//9 (включает только 2, 3, 4)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0x1C;
      PORTB &= ~(1<<0);// 0
    }
    else if(results.value == 0xFE10EF) {//10 (включает только 2, 3, 4, 5, 6, 7, 8)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0xFC;
      PORTB |= 1<<0;// 1
    }
    else if(results.value == 0xFE906F) {//11 (включает только 2, 3, 4, 5, 6, 7)
      PORTD = PORTD & 0x03;
      PORTD = PORTD | 0xFC;
      PORTB &= ~(1<<0);// 0
    }
  }
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Sr.FatCat пишет:
Кстати, при создании экземпляров в Setup - от метода init вообще надо избавляться и все делать в конструкторе
А вот иницировать в конструкторе объекты при работе с микроконтролерами глупость. В компьютере да . В микроконтролере нет. Нарветесь - посмотрите на "барана" в ближайшее зеркало.

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

qwone пишет:
А вот иницировать в конструкторе объекты при работе с микроконтролерами глупость. В компьютере да . В микроконтролере нет. Нарветесь - посмотрите на "барана" в ближайшее зеркало.

Это Калапуций запретил или в наставлениях по кошерному коду написано? Если "баран в зеркале" такой идиот,
что вынесши работу с аппаратной частью в конструктор, создает экземпляр в описании, то кто мешает ему яйца клавиатурой защемить? 

Или что-то другое имелось ввиду? Фраза "иницировать в конструкторе объекты" сильно отдает неграмотностью в программировании, не сказать еще больше. 

К слову, сказать, не видел ни одного тру-эмбедера, который приветствовал бы использование ++.

sir90
Offline
Зарегистрирован: 02.01.2016

Всем привет вот что добился с дугом, типично но работает)

 


#include <IRremote.h>
int RECV_PIN = 10; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;

int ledpin2 = 2;
int ledpin3 = 3;
int ledpin4 = 4;
int ledpin5 = 5;
int ledpin6 = 6;
int ledpin7 = 7;
int ledpin8 = 8;


void setup() {

Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver

pinMode(2, OUTPUT); 
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);

digitalWrite(2, HIGH); 
digitalWrite(3, HIGH); 
digitalWrite(4, HIGH); 
digitalWrite(5, HIGH); 
digitalWrite(6, HIGH); 
digitalWrite(7, HIGH); 
digitalWrite(8, HIGH); 
digitalWrite(9, HIGH);  


}

void loop() {




if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
 

if (results.value==0xFF30CF) {//off
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
}
 
if (results.value==0xFFC03F) {//test
  
digitalWrite(2,LOW);
delay(400);
digitalWrite(4,LOW);
delay(400);
digitalWrite(7,LOW);
delay(400);
digitalWrite(5,LOW);
delay(400);
digitalWrite(3,LOW);
delay(400);
digitalWrite(6,LOW);
delay(400);
digitalWrite(8,LOW);
delay(400);
digitalWrite(2,HIGH);
delay(400);
digitalWrite(4,HIGH);
delay(400);
digitalWrite(7,HIGH);
delay(400);
digitalWrite(5,HIGH);
delay(400);
digitalWrite(3,HIGH);
delay(400);
digitalWrite(6,HIGH);
delay(400);
digitalWrite(8,HIGH);
delay(400);

digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
delay(400);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
delay(400);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
delay(400);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
delay(400);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
delay(400);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
delay(400);
}
 
if (results.value==0xFF629D) {//0
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
}
 
if (results.value==0xFFB04F) {//1
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
}
 
if (results.value==0xFF906F) {//2
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
}
 
if (results.value==0xFFA05F) {//3
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
}
 
if (results.value==0xFF807F) {//4
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
}
 
if (results.value==0xFFF20D) {//5
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
}
 
if (results.value==0xFFD22D) {//6
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
}
 
if (results.value==0xFFE21D) {//7
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
}
 
if (results.value==0xFFC23D) {//8
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
}
 
if (results.value==0xFF52AD) {//9
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
}

irrecv.resume(); // Receive the next value
}
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Шо, съели, плюсофилы?

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sir90 пишет:

Всем привет вот что добился с дугом, типично но работает)

Не могу смотреть, крофь из глаз.   Нада напица. 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

sadman41 пишет:

Шо, съели, плюсофилы?

не совсем понимаю сути твоего восторга - ты расписал в ифах, что должно происходить при получении кода с пульта, и шо?

при чём плюсофилы и классы?

напиши тоже самое без ифов и класса IRremote, если желаешь доказать свою независимость от плюсов и классов.

sadman41
Offline
Зарегистрирован: 19.10.2016

Иди проспись, динозавор - ты уже всех авторов постов перепутал.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

sadman41 пишет:

Иди проспись, динозавор - ты уже всех авторов постов перепутал.

как по мне - все тараканы на одно лицо.

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

Вот так тоже работать должно

#include <IRremote.h>

int RECV_PIN = A0;
IRrecv irrecv(RECV_PIN);
decode_results results;

uint32_t codes[] = { 0xFE48B7, 0xFE00FF,  0xFE807F, 0xFE40BF, 0xFEC03F, 0xFE20DF, 0xFEA05F, 0xFE609F, 0xFEE01F, 0xFE10EF, 0xFE906F };
uint8_t pin_states[] = { 0, B1100111, B11, B1011101, B11111, B101011, B111110, B1111110, B111, B111111, B11111 };

void setup() {
	irrecv.enableIRIn();

	DDRD |= 0b11111100;
	PORTD |= ~0b00000011;
	DDRB |= 0b00000001;
	PORTB |= ~0b11111110;
}

void loop() {
	if (irrecv.decode(&results)) {
		for (int i = 0; i < 11; i++) if (codes[i] == results.value) {
			if (pin_states[i] & B01000000) PORTB &= B11111110; else PORTB |= B00000001;
			PORTD &= ~(pin_states[i] << 2 & B11);
			break;
			}
		irrecv.resume();
	}
  
}

Дальше будем оптимизировать?

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, можно сделать красиво и в array of struct завернуть codes[] и pin_states[].

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

Sr.FatCat пишет:

Дальше будем оптимизировать?

На чистый С переходить? Без богомерзкого класса IRrecv?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

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

На чистый С переходить? Без богомерзкого класса IRrecv?

сразу в пропасть.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

А я рад человека, написал сам и главное что работает так как ему надо а остальное придет!!!

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

vosara пишет:

А я рад человека, написал сам и главное что работает так как ему надо а остальное придет!!!

Если, человек не имеет представление о циклах и массивах - ничего у него не придет. Меня поражает другое - подобные задачи сейчас являются обязательными на ГИА общеобразовательной школы. Т.е. предполагается, что каждый 9-ти классник должен мочь элементарную булеву алгебру и алгоритмы с массивами и циклами писать в одном из 3-х языков в зависимости от школы (Паскаль, Си, Питон). Про задачи на ЕГЭ я уже и молчу.

Откуда появляются такие коды, как у топикстартера?

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Sr.FatCat пишет:

Откуда появляются такие коды, как у топикстартера?

Ис мосху, мысль , она вариативна !

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Sr.FatCat пишет:

Т.е. предполагается, что каждый 9-ти классник должен мочь...

не должен мочь - у нас свободная деморкатическая страна, в отличии от, прости Аллах, Омерки и Гейропейского Союза геев.

каждый волен быть дыбилом. О_О

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

sadman41 пишет:

Да, можно сделать красиво и в array of struct завернуть codes[] и pin_states[].

Не.... Красивее pin_states засунуть старшим байтом в неиспользованый байт codes...
 

uint32_t states_and_codes[] = { 0xFE48B7, B1100111 << 24 | 0xFE00FF,  B11 << 24 | 0xFE807F, B1011101 << 24 |0xFE40BF, B11111 << 24 | 0xFEC03F, B101011 << 24 | 0xFE20DF, B111110 << 24 | 0xFEA05F, 
B1111110 << 24 | 0xFE609F, B111 << 24 | 0xFEE01F, B111111 << 24 | 0xFE10EF, B11111 << 24 | 0xFE906F };

.....

		for (int i = 0; i < 11; i++) if (states_and_codes[i] & 0xFFFFFF == results.value) {
			if (states_and_codes[i] & (B01000000 << 24)) PORTB &= B11111110; else PORTB |= B00000001;
			PORTD &= ~(states_and_codes[i] >> 22 & B11);
			break;
			}

Но главного добиться не удалось - у программы остались какие-то мизерные признаки читаемости :(

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Набросились, гнобители.  Этот то хоть сам что то пытаеца, надо просто подсказать и направить.  Хуже, когда думать и делать не хотят.  Эй, форум из ларца, сделайте мне код.  И плюшками набейте. 

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

DetSimen пишет:

Набросились, гнобители.  Этот то хоть сам что то пытаеца, надо просто подсказать и направить. 


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

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

Sr.FatCat пишет:

Но главного добиться не удалось - у программы остались какие-то мизерные признаки читаемости :(

Так есть же инструментарий!!!

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

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

Так есть же инструментарий!!!

Не, ну это Вы с козырей зашли.... Думаю, достаточно будет перевести все двочино/шеснадцетиричные действия в моем скетче в десятичные результаты и отладка программы  станет требовать почти бесконечного времени, что уже не плохо и без брайнфака.

Хотя если без шуток, очень хороший пример, на мой взгляд, когда в оптимизации надо остановиться заренее.
Я бы даже в своем изначальном скетче использовал бы не работу с регистрами, а wire и на этом бы остановился.