problem z wielkością kodu

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
mniej123
Młodszy majsterkowicz
Posty: 3
Rejestracja: 16 sty 2013, 15:57

problem z wielkością kodu

Post autor: mniej123 » 24 lut 2013, 15:32

witam:P
Mam problem zrobiłem sobie robota na atmega8a-pu i kod jest troszkę za duży:P
może ktoś z was by mógł go trochę skrócić

Kod: Zaznacz cały

#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;
int np = 5;
int nl = 6;
int lp = 7;
int ll = 8;
int pro1 = 2;
int pro2 = 3;
int pro3 = 4;
int swith1;
int swith2;
int swith3;
int program = 0;
int prawy;
int lewy;
int czuj2;
int czuj1;
void setup() {                
pinMode(np, OUTPUT); 
pinMode(nl, OUTPUT); 
pinMode(lp, OUTPUT); 
pinMode(ll, OUTPUT); 
pinMode(pro1,INPUT);
pinMode(pro2,INPUT);
pinMode(pro3,INPUT);
irrecv.enableIRIn();
}
void loop() {
 swith1 = digitalRead(pro1);
 swith2 = digitalRead(pro2);
 swith3 = digitalRead(pro3);
 if (swith1 == HIGH){
  int program = 1;
 }
  if (swith2 == HIGH){
  int program = 2;
 }
  if (swith3 == HIGH){
  int program = 3;
 }
 if (program = 0){
   lew();
   delay(10);
   pra();
   delay(10); 
 }
  if (program = 1){
   int sensorodl=analogRead(A3);
   int czujnik = map(sensorodl, 0, 1023, 0, 100);
   if(czujnik>=80){
     lew();
     delay(1000);
   }
     if(czujnik<=79){
     nap();
     }
   }  
 if (program = 2){
   prawy = analogRead(A5);
   lewy = analogRead(A4);
   czuj1 = map(lewy, 0, 1023, 0, 100);
   czuj2 = map(prawy, 0, 1023, 0, 100); 
   if ( czuj1<=50) {
    lew();
   }
   if ( czuj2<=50) {
    pra();
   }
   if ( czuj1>=51 ,czuj2>=51 ){
     nap();
   }
   }
  if (program = 3){
  if (irrecv.decode(&results)) {
      switch (results.value) {
              case 0x97E77B1B:
            nap();
            break;
              case 0xEC7AD6DA:
              wst();
            break;
              case 0xF200A55A:
              pra();
            break;
              case 0xD2E3379E:
              lew();
            break;
              case 0x99EE44DF:
              nic();
              delay(1);
             irrecv.resume();
            break;
      }
   }  
 }
}
void nap() {
  digitalWrite(np,LOW);
  digitalWrite(lp,LOW);
  digitalWrite(nl,HIGH);
  digitalWrite(ll,HIGH);
}
void wst() {
  digitalWrite(np,HIGH);
  digitalWrite(lp,HIGH);
  digitalWrite(nl,LOW);
  digitalWrite(ll,LOW);
}
void lew() {
  digitalWrite(np,HIGH);
  digitalWrite(lp,LOW);
  digitalWrite(nl,LOW);
  digitalWrite(ll,HIGH);
}
void pra() {
  digitalWrite(np,LOW);
  digitalWrite(lp,HIGH);
  digitalWrite(nl,HIGH);
  digitalWrite(ll,LOW);
}
void nic() {
  digitalWrite(np,LOW);
  digitalWrite(lp,LOW);
  digitalWrite(nl,LOW);
  digitalWrite(ll,LOW);
}
 
dzięki za pomoc :P

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


shymon
Majsterkowicz
Posty: 139
Rejestracja: 6 paź 2012, 20:27

Re: problem z wielkością kodu

Post autor: shymon » 24 lut 2013, 16:20

Za duży, tzn. wsad się nie mieści na uC? Podstawowa sprawa - optymalizację włączyłeś?

No i przy okazji:
te zmienne co masz na początku, do których przypisujesz wartości 2,3,4, itd. Po co dawać aż int na to, skoro wystarczy char?
Dalej następne błędy,
if (program = 0)
Tutaj chcesz sprawdzić warunek, więc nie taki operator dajesz.
Popraw na
if(program==0)
W pozostałych warunkach tak samo.

Poza tym dobrze by było, gdybyś w ogóle napisał jakie zachowanie od tego kodu oczekujesz.
Awatar użytkownika
Maxik
Starszy majsterkowicz
Posty: 405
Rejestracja: 6 lip 2012, 18:27
Lokalizacja: Gdańsk
Kontakt:

Re: problem z wielkością kodu

Post autor: Maxik » 24 lut 2013, 16:39

Piny można pogrupować w tablice i w pętli do kolejnej tablicy odczytywać ich stan lub zdefiniować je jako stałe preprocesora("#define"). Wpłynie to jednak tylko na czytelność kodu. Ten program nigdy nie zmieści się na ATMegę8, bo sama biblioteka do czujnika podczerwieni zajmuje więcej niż jest w stanie pomieścić ten mikrokontroler. Tak więc albo rezygnujesz z podczerwieni albo kupujesz ATMegę168 lub jeszcze lepiej 328.
mniej123
Młodszy majsterkowicz
Posty: 3
Rejestracja: 16 sty 2013, 15:57

Re: problem z wielkością kodu

Post autor: mniej123 » 27 lut 2013, 17:07

No to niestety będę zmuszony do usunięcia obsługi podczerwieni :C
Ale zastanawiałem się czy nie ma innych bibliotek do obsługi tego :P
ODPOWIEDZ

Strony partnerskie: