• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Optymalizacja kodu w Arduino
#1
Question 
Witam,
Napisałem program w Arduino IDE włącz/Wyłącz z pilota, szkic używa 8 948 bajtów a ja bym chciał to opchnąć w atmega8. dało by radę zoptymalizować kod tego programu?

Kod:
#include <IRremote.h>
#include <EEPROM.h>

void EEPROMWritelong(int address, long value)
{
 //Decomposition from a long to 4 bytes by using bitshift.
 //One = Most significant -> Four = Least significant byte
 byte four = (value & 0xFF);
 byte three = ((value >> 8) & 0xFF);
 byte two = ((value >> 16) & 0xFF);
 byte one = ((value >> 24) & 0xFF);

 //Write the 4 bytes into the eeprom memory.
 EEPROM.write(address, four);
 EEPROM.write(address + 1, three);
 EEPROM.write(address + 2, two);
 EEPROM.write(address + 3, one);
}

long EEPROMReadlong(long address)
{
 //Read the 4 bytes from the eeprom memory.
 long four = EEPROM.read(address);
 long three = EEPROM.read(address + 1);
 long two = EEPROM.read(address + 2);
 long one = EEPROM.read(address + 3);

 //Return the recomposed long by using bitshift.
 return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
}

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long CurrentValue = 0;
unsigned long StoredCode = 0;

const int buttonPin = 6;     // pin przycisku
const int ledPin =  4;      // pin diody LED
//const int outputPin =  3;      // wyjście pinu LED
const int relayPin =  2;      // pin przekaźnika
int buttonState = 0;         // zmienna do odczytu stanu przycisku
int RecordState = 0;         //zmienna odbiornika w trybie nagrywania
int outputState = 1;         //zmienna wyjścia włączyć lub wyłączyć

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

  // Inicjalizacja pinu LED jako wyjścia:
pinMode(ledPin, OUTPUT);    
//  Inicjalizacja pinu przycisku jako dane wejściowe:
//pinMode(outputPin, OUTPUT);    
// Inicjalizacja pin przycisku jako wejście:
pinMode (buttonPin, INPUT);  
pinMode(relayPin, OUTPUT);    
// Inicjalizacja pin przycisku jako wejście:
pinMode(buttonPin, OUTPUT);  

}


void loop() {
if (StoredCode == 0) {
StoredCode = EEPROMReadlong(0);
}
// Odczyt stanu wartości przyciskiem:
buttonState = digitalRead(buttonPin);

 // Jeśli zostanie wykryty sygnał, przechowywania wartość
 
if (irrecv.decode(&results)) {
CurrentValue = (results.value);

 // Jeśli wartość Odebrana równa zaprogramowanej wartości, a następnie przełączyć stan wyjściowy
if(CurrentValue == StoredCode) {
    outputState = !outputState;
 }

 // Czy tryb nagrywania jest aktywowany zapisać bieżącą wartość jako zaprogramowanej wartości
if (RecordState == 1) {
  StoredCode = CurrentValue;
  long address=0;
  EEPROMWritelong(address, StoredCode);
  address+=4;
  RecordState = 0;
  digitalWrite(ledPin, LOW);  
 // Serial.println(StoredCode);  //Wyświetla zapisany kod w celach informacyjnych
  //Serial.println(EEPROMReadlong(0));
 }

 // Otrzymuj kolejną wartość
irrecv.resume();

}

else //jeśli nie zostanie wykryty żaden sygnał, to bieżąca wartość jest równa 0
{
CurrentValue = 0;
}

// Sprawdź czy przycisk nagrywania zostanie naciśnięty.
// Jeśli tak jest, to buttonState HIGH:
if (buttonState == HIGH) {  
// Oczekiwanie na przycisku ma zostać wydany
while (buttonState == HIGH) {
  buttonState = digitalRead(buttonPin);
}

 //Włącz LED wskazuje, że tryb nagrywania jest włączony
 digitalWrite(ledPin, HIGH);
 RecordState = 1;
}

 //Ustaw odpowiedni stan wyjściowy
if(outputState == 1) {

    // digitalWrite(outputPin, LOW);
      digitalWrite(relayPin, LOW);
   
}
else {
     // digitalWrite(outputPin, HIGH);
    digitalWrite(relayPin, HIGH);
}

}


A tu schemat.
[Obrazek: w704.jpg]

TU jest biblioteka:


Załączone pliki
.zip   IRremote.zip (Rozmiar: 69.08 KB / Pobrań: 2)
 
  


Wiadomości w tym wątku
Optymalizacja kodu w Arduino - przez bu.tomasz - 28-04-2016, 11:57
RE: Optymalizacja kodu w Arduino - przez JasQ - 28-04-2016, 13:02
RE: Optymalizacja kodu w Arduino - przez bu.tomasz - 28-04-2016, 16:01
RE: Optymalizacja kodu w Arduino - przez JasQ - 28-04-2016, 19:19
RE: Optymalizacja kodu w Arduino - przez bu.tomasz - 28-04-2016, 19:22
RE: Optymalizacja kodu w Arduino - przez JasQ - 28-04-2016, 19:22
RE: Optymalizacja kodu w Arduino - przez bu.tomasz - 28-04-2016, 19:24
RE: Optymalizacja kodu w Arduino - przez JasQ - 28-04-2016, 20:46
RE: Optymalizacja kodu w Arduino - przez bu.tomasz - 28-04-2016, 21:15
RE: Optymalizacja kodu w Arduino - przez JasQ - 28-04-2016, 22:01
RE: Optymalizacja kodu w Arduino - przez bu.tomasz - 29-04-2016, 13:02
RE: Optymalizacja kodu w Arduino - przez JasQ - 29-04-2016, 15:26
RE: Optymalizacja kodu w Arduino - przez bu.tomasz - 12-05-2016, 11:39
RE: Optymalizacja kodu w Arduino - przez JasQ - 12-05-2016, 22:55
RE: Optymalizacja kodu w Arduino - przez CEO - 13-05-2016, 08:20

Skocz do:


Przeglądający: 1 gości