Frage von OOEler, 32

Kann man diesen Arduino-Sketch noch kürzen?

Mir fehlen genau 101 Bytes von den globalen Variablen... Kann man diesen Sketch eventuell kürzen? Ich hoffe ihr könnt mir helfen

#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>

modbusDevice led;
modbusSlave slave;

void setup() {
  led.setId(3); //Slave Adresse
  led.add(1); //Digital read&write
  led.add(2);
  led.add(3);
  led.add(4);
  led.add(5);
  led.add(6);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
  
  slave._device = &led;  
  slave.setBaud(9600);
}

void loop() {
  if(digitalRead(3) == HIGH){
    led.set(1, 1);
  }
  if(digitalRead(4) == HIGH){
    led.set(2, 1);
  }
  if(digitalRead(5) == HIGH){
    led.set(3, 1);
  }
  if(digitalRead(6) == HIGH){
    led.set(4, 1);
  }
  if(digitalRead(7) == HIGH){
    led.set(5, 1);
  }
  if(digitalRead(8) == HIGH){
    led.set(6, 1);
  }
    if(digitalRead(3) != HIGH){
    led.set(1, 0);
  }
  if(digitalRead(4) != HIGH){
    led.set(2, 0);
  }
  if(digitalRead(5) != HIGH){
    led.set(3, 0);
  }
  if(digitalRead(6) != HIGH){
    led.set(4, 0);
  }
  if(digitalRead(7) != HIGH){
    led.set(5, 0);
  }
  if(digitalRead(8) != HIGH){
    led.set(6, 0);
  }
  slave.run();
}
Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von LeCux, 23

Mit ein paar Bitoperationen kann man schon noch ein bischen was sparen, aber das wird dennoch knapp. 

https://www.arduino.cc/en/Reference/PortManipulation

Man kann den gesammten Port lesen und dann sowas schreiben:

led.set(5, (PORTD & B0001000) >> 5)

Sind denn die Optimizer Flags für den Compiler gesetzt?

Kommentar von OOEler ,

Zu dem (PORTD & B0001000) ... welchen pin spreche ich da wie an?

Antwort
von W00dp3ckr, 15

Ich würde eine FOR-Schleife bauen, und ein Array benutzen.

Oder in Inline-Assembler sehen, ob Du es nicht kürzer ausdrücken kannst als der Compiler.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten