user23008: So my program fails to run because there is not enough room for my variables as well as the Arduino Core and Stack. I can't find any more ways to optimize my program so I'm thinking about just rewriting it in C.
However, I'm not sure if that will actually help me. For example I know that in C my program will run faster because things like digitalWrite() and analogRead() have a bunch of "extras" that make it go slower, but I don't know if this will affect RAM.
So can any of the experts on here tell me if writing my code will help before I waste time doing so?
Here is my code:
#include <SoftwareSerial.h>
#include <avr/pgmspace.h>

#define FASTADC 1

// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

SoftwareSerial mySerial(0,1) PROGMEM;

byte i;

byte pixelsArray1[128];   //Array to hold the values of the individual pixles.
byte pixelsArray2[128];   //Array to hold the values of the individual pixles.
byte pixelsArray3[128];   //Array to hold the values of the individual pixles.

void setup() 
{
  #if FASTADC
   // set prescale to 16
   sbi(ADCSRA,ADPS2);
   cbi(ADCSRA,ADPS1);
   cbi(ADCSRA,ADPS0);
  #endif

  pinMode(1,OUTPUT);        //Setting the 1 pin to be used for output 
  pinMode(0,OUTPUT);        //Setting the 0 pin to be used for output
  pinMode(A3,INPUT);        //Input for Camera 3
  pinMode(A2,INPUT);        //Input for Camera 2
  pinMode(A1,INPUT);        //Input for Camera 1

  mySerial.begin(9600);     //Setting the data transfer rate
}

Notes:

I'm programming on the ATtiny85
I'm running Windows 10
I've never programmed in Arduino before


user3917: The simplest approach to reducing RAM usage of the program shown is to get rid of the three 128-byte pixel arrays.  They are not needed for the program to function.
Instead of writing
pixelsArray1[i]=analogRead(A1)/4;
pixelsArray2[i]=analogRead(A2)/4;
pixelsArray3[i]=analogRead(A3)/4;

write
if (analogRead(A1)/4 == 0 && analogRead(A2)/4 == 0 && analogRead(A3)/4 == 0) ++foundZero;

where foundZero is initialized to zero before the loop.  After the loop, you say something like
while (foundZero--) {
  digitalWrite(1, HIGH);
  delay(2000);
  digitalWrite(1, LOW);
  delay(2000);
}

to toggle pin 1 as many times as there were three zero pixels.
Note, the timing of the if (...) ++foundZero; statement may differ from pixel to pixel because the && evaluation may short circuit.  If the timing matters, save data in temporary variables, or check if the sum of the three is zero, etc.

23008: <p>So my program fails to run because there is not enough room for my variables as well as the Arduino Core and Stack. I can't find any more ways to optimize my program so I'm thinking about just rewriting it in C.</p>

<p>However, I'm not sure if that will actually help me. For example I know that in C my program will run faster because things like <code>digitalWrite()</code> and <code>analogRead()</code> have a bunch of "extras" that make it go slower, but I don't know if this will affect RAM.</p>

<p>So can any of the experts on here tell me if writing my code will help before I waste time doing so?</p>

<p>Here is my code:</p>

<pre><code>#include &lt;SoftwareSerial.h&gt;
#include &lt;avr/pgmspace.h&gt;

#define FASTADC 1

// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

SoftwareSerial mySerial(0,1) PROGMEM;

byte i;

byte pixelsArray1[128];   //Array to hold the values of the individual pixles.
byte pixelsArray2[128];   //Array to hold the values of the individual pixles.
byte pixelsArray3[128];   //Array to hold the values of the individual pixles.

void setup() 
{
  #if FASTADC
   // set prescale to 16
   sbi(ADCSRA,ADPS2);
   cbi(ADCSRA,ADPS1);
   cbi(ADCSRA,ADPS0);
  #endif

  pinMode(1,OUTPUT);        //Setting the 1 pin to be used for output 
  pinMode(0,OUTPUT);        //Setting the 0 pin to be used for output
  pinMode(A3,INPUT);        //Input for Camera 3
  pinMode(A2,INPUT);        //Input for Camera 2
  pinMode(A1,INPUT);        //Input for Camera 1

  mySerial.begin(9600);     //Setting the data transfer rate
}
</code></pre>

<p>Notes:</p>

<ul>
<li>I'm programming on the ATtiny85</li>
<li>I'm running Windows 10</li>
<li>I've never programmed in Arduino before</li>
</ul>
 3917: <p>The simplest approach to reducing RAM usage of the program shown is to get rid of the three 128-byte pixel arrays.  They are not needed for the program to function.</p>

<p>Instead of writing</p>

<pre><code>pixelsArray1[i]=analogRead(A1)/4;
pixelsArray2[i]=analogRead(A2)/4;
pixelsArray3[i]=analogRead(A3)/4;
</code></pre>

<p>write</p>

<pre><code>if (analogRead(A1)/4 == 0 &amp;&amp; analogRead(A2)/4 == 0 &amp;&amp; analogRead(A3)/4 == 0) ++foundZero;
</code></pre>

<p>where <code>foundZero</code> is initialized to zero before the loop.  After the loop, you say something like</p>

<pre><code>while (foundZero--) {
  digitalWrite(1, HIGH);
  delay(2000);
  digitalWrite(1, LOW);
  delay(2000);
}
</code></pre>

<p>to toggle pin 1 as many times as there were three zero pixels.</p>

<p>Note, the timing of the <code>if (...) ++foundZero;</code> statement may differ from pixel to pixel because the <code>&amp;&amp;</code> evaluation may short circuit.  If the timing matters, save data in temporary variables, or check if the sum of the three is zero, etc.</p>
