so, for the "best" solution
Well, do this. Use a spreadsheet or notebook paper and start identifying your needs...
- Some digital I/O
- Some Analog input
Which will use internal A/D
Which will use external A/D. For these, how will you address the chip... SPI or I2C?
Know your entire group of sensors. Put those in and map them to I/O.
When you finish, the best solution will not be a guess.
I simply like the Mega2560 because of the extra SRAM. It is easily worth the under $20 U.S. price from China.
But, I have always recommended that beginners and experts have at least one real Arduino in each class that they utilize; that is, a real UNO or a real MEGA, etc. This way, you will never have to try and decide if the problem you are having is a hardware related one. Then when the prototype is finished, move the software to the clone and it should work If your software works on a real Arduino but not on a clone... well, you know where the problem is located!!!
Ray
Example - my Notes in the file notes.h which I keep with the project code. The first part is notes about pin usage.
/*
Input and Output
Each of the 54 digital pins on the Mega can be used as an input or output,
using pinMode(), digitalWrite(), and digitalRead() functions. They operate at 5 volts.
Each pin can provide or receive a maximum of 40 mA and has an internal pull-up resistor
(disconnected by default) of 20-50 kOhms. In addition, some pins have specialized functions:
Serial: 0 (RX) and 1 (TX); Pins 0 and 1 are also connected to the corresponding pins of the ATmega16U2 USB-to-TTL Serial chip.
Serial 1: 19 (RX) and 18 (TX);
Serial 2: 17 (RX) and 16 (TX);
Serial 3: 15 (RX) and 14 (TX). Used to receive (RX) and transmit (TX) TTL serial data.
External Interrupts: 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4),
20 (interrupt 3), and 21 (interrupt 2). These pins can be configured to trigger an interrupt on a low value,
a rising or falling edge, or a change in value. See the attachInterrupt() function for details.
PWM: 2 to 13 and 44 to 46. Provide 8-bit PWM output with the analogWrite() function.
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). These pins support SPI communication using the SPI library.
The SPI pins are also broken out on the ICSP header, which is physically compatible with the Uno, Duemilanove and Diecimila.
LED: 13. There is a built-in LED connected to digital pin 13. When the pin is HIGH value,
the LED is on, when the pin is LOW, it's off.
TWI: 20 (SDA) and 21 (SCL). Support TWI communication using the Wire library.
Note that these pins are not in the same location as the TWI pins on the Duemilanove or Diecimila.
The Mega2560 has 16 analog inputs, each of which provide 10 bits of resolution (i.e. 1024 different values).
By default they measure from ground to 5 volts, though is it possible to change the upper end of their range
using the AREF pin and analogReference() function.
There are a couple of other pins on the board:
AREF. Reference voltage for the analog inputs. Used with analogReference().
Reset. Bring this line LOW to reset the microcontroller. Typically used to add a reset button to shields which block the one on the board.
Communication
The Arduino Mega2560 has a number of facilities for communicating with a computer, another Arduino, or other microcontrollers.
The ATmega2560 provides four hardware UARTs for TTL (5V) serial communication.
An ATmega16U2 (ATmega 8U2 on the revision 1 and revision 2 boards) on the board channels one of these over USB and provides a
virtual com port to software on the computer (Windows machines will need a .inf file, but OSX and Linux machines will recognize
the board as a COM port automatically. The Arduino software includes a serial monitor which allows simple textual data to be sent
to and from the board. The RX and TX LEDs on the board will flash when data is being transmitted via the ATmega8U2/ATmega16U2 chip
and USB connection to the computer (but not for serial communication on pins 0 and 1).
A SoftwareSerial library allows for serial communication on any of the Mega2560's digital pins.
The ATmega2560 also supports TWI and SPI communication. The Arduino software includes a Wire library to simplify use of the TWI bus;
see the documentation for details. For SPI communication, use the SPI library.
_______________________________________________DISPLAY Format _________________________________________________________________
1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1
0 1 2 3 4 5 6
Fuel Oil CHT EGT
Remaining Temp Front Left
X X X X X X X X X X X X X
X X X X X X X X X X X X X
Water Oil CHT EGT
Temp Pres Rear Right
1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1
0 1 2 3 4 5 6
_______________________________________________ AXE133Y OLED _________________________________________________________________
http://arduino.cc/playground/Main/AXE133Y
AXE133Y library for Arduino
by SmudgerD - May 2012 - www.stompville.co.uk
Functions
writeByte() Ex: OLED.writeByte(244); //display a Greek capital Omega character (Ohms)
splash() This function clears the display and shows the library version on the top line
displayShow() Ex: OLED.displayShow(false); //hide (turns off) the display
cursorShow() Ex: OLED.cursorShow(true); //shows the cursor
cursorBlink() Ex: OLED.cursorBlink(true); //shows the cursor and makes it blink
OLED.cursorBlink(false); //shows a solid cursor
clearScreen() Ex: OLED.clearScreen(); //clear screen, home cursor and switch off cursor
cursorHome() Ex: OLED.cursorHome(1); //move cursor to cursor position 0 on line 1
cursorLeft() Ex: OLED.cursorLeft(3); //move cursor three positions to the left
cursorRight() Ex: OLED.cursorRight(2); //move cursor two character to the right
cursorPosition() Ex: OLED.cursorPosition(2,0); //move the cursor to the first position on the second line
OLED.cursorPosition(1,64); //this has the same effect as the example above
printMessage() Ex: OLED.printMessage(1); //this will display the message "www.picaxe.com"
print() Ex: OLED.print("Hello World!");
Ex: OLED.print(String(charArray));
outputWrite() Ex: OLED.outputWrite(0b111); //sets all outputs high
OLED.outputWrite(0b100); //sets output C.2 high and the others low
int currentStatus = 0b000;
OLED.outputWrite(currentStatus); //all outputs low/off
currentStatus != 0b010; //set C.1 to one
OLED.outputWrite(currentStatus); //currentStatus = 0b010
currentStatus != 0b001; //set C.0 to one
OLED.outputWrite(currentStatus); //currentStatus = 0b011
currentStatus &=0b110; //set C.0 to zero
OLED.outputWrite(currentStatus); //currentStatus = 0b010
currentStatus ^=0b100; //toggle C.2
OLED.outputWrite(currentStatus); //currentStatus = 0b110
backspace() Ex: OLED.backspace(3); //backspace three chars
printFloat() Ex: OLED.printFloat(3.14159,5,4); //this will display "3.14156"
OLED.printFloat(3.14,4,1); //this will display " 3.1"
OLED.printFloat(3.14e6,5,0); //this will display "3140000"
_______________________________________________ Log File on USB/Comm: _________________________________________________________________
Europa Instruments coming online...
3:45:20 12/31/12
Exhaust Gas #1 Temp = 21.81
EG1=69
Exhaust Gas #2 Temp = 22.00
EG2=70
CHT1 (analog): 544
CHT #1 Temp = 68
CHT #1 Temp = 68
CHT2 (analog): 377
CHT #2 Temp = 68
Gasoline (analog): 367
GFL = 255
Oil Temp (analog): 364
Oil Temp = 255
Water Temp (analog): 355
Water Temp = 255
Oil Pressure (analog): 355
Oil Pressure = 255
Free RAM = 6065
IR keycode received: 80
Menu request received on IR link
Serial receive buffer 1 cleared
Entering DS1307 set menu
Day Of Month has been set to: 6
Month has been set to: 1
Year has been set to: 13
3:45:54 1/6/13
IR keycode received: 80
Menu request received on IR link
Serial receive buffer 1 cleared
Entering DS1307 set menu
Seconds have been set to: 40
Minutes have been set to: 34
Hours have been set to: 8
(repeat...)
// DS1307 Clock stuff
// Stops the DS1307, but it has the side effect of setting seconds to 0
// Probably only want to use this for testing
void stopDs1307()
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(0x80);
Wire.endTransmission();
}
*/