New Head Unit....

Request new hardware or ideas for the controller
User avatar
jsclownfish
Posts: 378
Joined: Mon Oct 24, 2011 7:52 pm
Location: Saint Louis

Re: New Head Unit....

Post by jsclownfish »

So, a quick update on the ezLCD... I haven't had a lot of time to play with it, but I think it can work depending on what you want to do. I am by no means a programmer, so I'm sure someone more adept could make it do lots of things. :geek: I've just worked on having it display data from the main and it seems to be working. I haven't had really tried to make the touchscreen communicate back. I've found the prepared widgets (buttons, sliders, etc) are a bit wonky to work with. :?

Anyway, here is what it looks like when you order it....
photo copy 6.JPG
photo copy 6.JPG (38.58 KiB) Viewed 12787 times
photo copy 7.JPG
photo copy 7.JPG (44.06 KiB) Viewed 12787 times
and here is my first demo screen hooked up to my RA...
photo copy 8.JPG
photo copy 8.JPG (112.12 KiB) Viewed 12787 times
I'll be playing with some buttons and stuff soon.
-Jon
binder
Posts: 2871
Joined: Fri Mar 18, 2011 6:20 pm
Location: Illinois
Contact:

Re: New Head Unit....

Post by binder »

very cool pictures. Looking good.
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: New Head Unit....

Post by lnevo »

How are you attaching that to the head unit? As an expansion through USB? or TTL?
User avatar
jsclownfish
Posts: 378
Joined: Mon Oct 24, 2011 7:52 pm
Location: Saint Louis

Re: New Head Unit....

Post by jsclownfish »

I use an I2C connection with the USB. I have a USB cable with the lines split out on one end. I then connect it to the Arduino board on the ArLCD. The I2C needs a couple pull up resistors so I have it on a small breadboard for testing.

-Jon
00Warpig00
Posts: 289
Joined: Wed May 16, 2012 9:52 pm

Re: New Head Unit....

Post by 00Warpig00 »

I know I have been eyeballing this Touchscreen LCD

http://www.sainsmart.com/arduino-compat ... -2560.html

There is a sheild to fit it directly to a Arduino Mega 2560 as well. I think The Display with the sheild can be found on ebay for about $30

It's been calling my name...

Nick
180G FOWLR
20GH QT#1
29G QT#2

Image
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: New Head Unit....

Post by rimai »

Just be careful with level shift....
That board does not have one.
I'm 99% confident that the LCD module is 3.3V.
I use similar screens and they are all 3.3V. If your Mega is 3.3V, then you are fine.
Roberto.
00Warpig00
Posts: 289
Joined: Wed May 16, 2012 9:52 pm

Re: New Head Unit....

Post by 00Warpig00 »

Here is the same Display on ebay with the sheild and even a Sainsmart clone of an Arduino 2560 Mega all for about $50

I came so very very close to purchasing this package.

http://www.ebay.com/itm/SainSmart-Mega2 ... 3f1a0ab450

I did buy one but with the more common blue 2 line LCD with the up/down/L/R/Enter buttons. Cant remember the LCD model number but it's a common one used in Arduino projects. Should arrive any day now.

Nick
180G FOWLR
20GH QT#1
29G QT#2

Image
User avatar
jsclownfish
Posts: 378
Joined: Mon Oct 24, 2011 7:52 pm
Location: Saint Louis

Re: New Head Unit....

Post by jsclownfish »

I spent the good part of the weekend working on this "ezLCD" system to try and accomplish three things:
1) receiving info from the main to display on a bigger LCD
2) control the relays from the touch screen
3) alternate between screens to accomplish 1&2

Seems like it would be straigthforward from the system libraries and the "widgets", but I had a tough time getting them to work appropriately and had to litter the code with delay steps to allow things to display correctly. This causes things to show correctly, but they don't always load as you would expect and it requires you to hold buttons 2 or 3 seconds before you see the activity. I'm guessing this has to do with the speed the LCD communicates with the Arduino board. I also had to add back in code for text display, clock, etc that is already in the RA LCD library but not in this LCD. Nevertheless, I did eventually get it to work :geek: , but I wouldn't say it is robust. Here is a video link of how it looks....(nevermind the football in the background, I was multitasking ;) )

[youtube]http://www.youtube.com/watch?v=6O-KktgTzD8[/youtube]

If you're curious, here is what the code I put together looks like for the ezLCD. I'll admit I have no idea why some of the delays work, I just started adding them in places until it displayed correctly.

Code: Select all

#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <ezLCD.h>
#include <SoftwareSerial.h>

EzLCD3_SW lcd( 10, 11 );

volatile boolean ezLCDInt = false; // flag to indicate interrupt


//screen set-up
#define NumScreens 4
int ScreenID=0;

//define for data over I2C
int maintemp=800;
int roomtemp=780;
int sumptemp=780;
int ph=700;
int moonlight=0;
byte TempRelay =15;
byte TempRelay2=15;
int wavetime=0;
int wavetime2=0;
int flow0=0;
int flow1=0;
int flow2=0;
int wmaker2;
byte mhour;
byte mminute;
byte msecond;
byte mday;
byte mmonth;
int myear = 2012;
byte Overflow;
byte Reservoir;
byte LATO;
byte HATO;
byte level;
byte atos;

//defines for sending relay data
byte lcdtype =0;
byte lcdrelay =0;
byte TouchOut[3];

//defines for button selection
int rate =0;
int selected = 0;
int prevSelected = 0;
int backcheck = 5;

void setup()
{
  Wire.begin(7);
  Wire.onRequest(requestEvent);
  Wire.onReceive(receiveEvent);
  setTime(19,59,0,6,3,12);
  lcd.begin( EZM_BAUD_RATE );
  lcd.cls(BLACK);
//  delay(1000); 
 //lcd.theme( id, embossDkColor, embossLtColor, textColor0, textColor1, textColorDisabled,
 //color0, color1, colorDisabled, commonBkColor, fontw )
  lcd.theme( 1, 9, 3, 0, 0, 0, 8, 9, 8, 1, 1 );
  lcd.theme( 2, 5, 20, 3, 3, 3, 4, 5, 4, 2, 1 );
  lcd.theme( 3, 13, 20, 3, 3, 3, 12, 13, 12, 2, 1 );
  lcd.theme( 4, 7, 20, 0, 0, 0, 6, 7, 6, 2, 1 );
  
 attachInterrupt(0, ezLCDevent, LOW);  
}

void loop()
{  
 //start up opttion screen 
  lcd.cls( 0 );
  delay(1000);
  lcd.fontw( 1, "sans24" );
  lcd.string( 51, "STATUS" ); // stringId 1
  lcd.string( 52, "RELAY1"); // stringId 2
  lcd.string( 53, "RELAY2"); // stringId 2  
  lcd.button( 51, 10, 40, 100, 100, 1, 0,0, 1, 51 );
  lcd.button( 52, 110, 40, 100, 100,  1, 0,0, 1, 52 );
  lcd.button( 53, 210, 40, 100, 100,  1, 0,0, 1, 53 );
  delay(1000);
  if(  ezLCDInt )
  {
    ezLCDInt = false;
  if( lcd.isPressed(51) ) // if Button 1 is pressed:
    ScreenID = 1;
  if( lcd.isPressed(52) ) // if Button 2 was pressed:
    ScreenID = 2;
  if( lcd.isPressed(53) ) // if Button 2 was pressed:
    ScreenID = 3;
  }
  if (ScreenID<0) ScreenID=NumScreens;
  if (ScreenID>=NumScreens) ScreenID=0;
  lcd.waitTouch();
  switch (ScreenID)
  {
  case 1:
  lcd.cls(BLACK);
  delay(1000);
  do
     {
  Wire.onReceive(receiveEvent);
  lcd.fontw( 1, "sans24" );
  lcd.string( 54, "BACK" ); // stringId 1
  lcd.button( 54, 200, 1, 50, 50, 1, 0, 0, 4, 54 );
  delay (1000);
  if(  ezLCDInt )
  {
    ezLCDInt = false;
  if( lcd.isPressed(54) ) // if Button 1 is pressed:
    backcheck= 54;  
  }
  lcd.color(WHITE);
  DrawText(6,10,5,"Main Temp");
  DrawSingleMonitor(3,maintemp,150,5,10);
    delay(100);
  DrawText(8,10,30,"Room Temp");
  DrawSingleMonitor(3,roomtemp,150,30,10);
  delay(100);
  DrawText(10,10,55,"Sump Temp");
  DrawSingleMonitor(3,sumptemp,150,55,10);
    delay(100);
  DrawText(12,10,80,"pH");
  DrawSingleMonitor(3,ph,150,80,100);
    delay(100);
  DrawText(14,10,105,"Overflow");
  DrawSingleMonitor(3,flow0,150,105,1);
    delay(100);
  DrawText(16,10,130,"Skimmer");
  DrawSingleMonitor(3,flow1,150,130,1);
    delay(100);
  DrawText(7,10,155,"Phosban");
  DrawSingleMonitor(4,flow2,150,155,1);
    delay(100);
  DrawSingleMonitor(4,backcheck,150,180,1);
    delay(100);
  lcd.image("logo200.gif",220,80);
  DrawDate(4,6,205);
    delay(100);
     } while (backcheck != 54);
  backcheck = 0;
  ScreenID=0;
  break;
case 2:
     lcd.cls(0);     
     delay(1000);
     lcd.fontw( 1, "sans24" );
  do
     {
 // delay (100);
     DrawText(3,1,1,"Relay #1");
     DrawSwitch(5,40,1,2,3);
     DrawSwitch(5,90,4,5,6);
     DrawSwitch(5,140,7,8,9);
     DrawSwitch(5,190,10,11,12);
     DrawSwitch(160,40,13,14,15);
     DrawSwitch(160,90,16,17,18);
     DrawSwitch(160,140,19,20,21);
     DrawSwitch(160,190,22,23,24);
     lcd.string( 25, "BACK" ); // stringId 1
     lcd.button( 25, 200, 1, 50, 40, 1, 0, 0, 4, 25 );
     for(int i=1; i <= 25; i++)
     {   
       boolean checked = lcd.isPressed(i);
       if(checked)   // if Button 1 is checked
        selected = i; // store the selected widget
     }
     if(selected != prevSelected)  
     {  
       prevSelected = selected;
     }
     if (selected < 4) 
     {
     lcdrelay=1;
     if (selected == 1) lcdtype = 0;
     else if (selected == 2) lcdtype = 1;
     else if (selected == 3) lcdtype = 2;
     }
     else if (selected >3 && selected < 7) 
     {
     lcdrelay=2;
     if (selected == 4) lcdtype = 0;
     else if (selected == 5) lcdtype = 1;
     else if (selected == 6) lcdtype = 2;
     }
     else if (selected >6 && selected < 10) 
     {
     lcdrelay=3;
     if (selected == 7) lcdtype = 0;
     else if (selected == 8) lcdtype = 1;
     else if (selected == 9) lcdtype = 2;
     }
     else if (selected >9 && selected < 13) 
     {
     lcdrelay=4;
     if (selected == 10) lcdtype = 0;
     else if (selected == 11) lcdtype = 1;
     else if (selected == 12) lcdtype = 2;
     }
     else if (selected >12 && selected < 16) 
     {
     lcdrelay=5;
     if (selected == 13) lcdtype = 0;
     else if (selected == 14) lcdtype = 1;
     else if (selected == 15) lcdtype = 2;
     }
     else if (selected >15 && selected < 19) 
     {
     lcdrelay=6;
     if (selected == 16) lcdtype = 0;
     else if (selected == 17) lcdtype = 1;
     else if (selected == 18) lcdtype = 2;
     }
     else if (selected >18 && selected < 22) 
     {
     lcdrelay=7;
     if (selected == 19) lcdtype = 0;
     else if (selected == 20) lcdtype = 1;
     else if (selected == 21) lcdtype = 2;
     }
     else if (selected >21 && selected < 25) 
     {
     lcdrelay=8;
     if (selected == 22) lcdtype = 0;
     else if (selected == 23) lcdtype = 1;
     else if (selected == 24) lcdtype = 2;
     }
     TouchOut[1]=lcdtype;
     TouchOut[2]=lcdrelay;
     } while (selected != 25);
  ScreenID=0;
  selected=0;
  break;
case 3:
     lcd.cls(0);     
     delay(1000);
     lcd.fontw( 1, "sans24" );
  do
     {
 // delay (100);
     DrawText(3,1,1,"Relay #2");
     DrawSwitch(5,40,26,27,28);
     DrawSwitch(5,90,29,30,31);
     DrawSwitch(5,140,32,33,34);
     DrawSwitch(5,190,35,36,37);
     DrawSwitch(160,40,38,39,40);
     DrawSwitch(160,90,41,42,43);
     DrawSwitch(160,140,44,45,46);
     DrawSwitch(160,190,47,48,49);
     lcd.string( 50, "BACK" ); // stringId 1
     lcd.button( 50, 200, 1, 50, 40, 1, 0, 0, 4, 50 );
     for(int i=26; i <= 50; i++)
     {   
       boolean checked = lcd.isPressed(i);
       if(checked)   // if Button 1 is checked
        selected = i; // store the selected widget
     }
     if(selected != prevSelected)  
     {  
       prevSelected = selected;
     }
     if (selected >25 && selected < 29) 
     {
     lcdrelay=9;
     if (selected == 26) lcdtype = 0;
     else if (selected == 27) lcdtype = 1;
     else if (selected == 28) lcdtype = 2;
     }
     else if (selected >28 && selected < 32) 
     {
     lcdrelay=10;
     if (selected == 29) lcdtype = 0;
     else if (selected ==30) lcdtype = 1;
     else if (selected == 31) lcdtype = 2;
     }
     else if (selected >31 && selected < 35) 
     {
     lcdrelay=11;
     if (selected == 32) lcdtype = 0;
     else if (selected == 33) lcdtype = 1;
     else if (selected == 34) lcdtype = 2;
     }
     else if (selected >34 && selected < 38) 
     {
     lcdrelay=12;
     if (selected == 35) lcdtype = 0;
     else if (selected == 36) lcdtype = 1;
     else if (selected == 37) lcdtype = 2;
     }
     else if (selected >37 && selected < 41) 
     {
     lcdrelay=13;
     if (selected == 38) lcdtype = 0;
     else if (selected == 39) lcdtype = 1;
     else if (selected == 40) lcdtype = 2;
     }
     else if (selected >40 && selected < 44) 
     {
     lcdrelay=14;
     if (selected == 41) lcdtype = 0;
     else if (selected == 42) lcdtype = 1;
     else if (selected == 43) lcdtype = 2;
     }
     else if (selected >43 && selected < 47) 
     {
     lcdrelay=15;
     if (selected == 44) lcdtype = 0;
     else if (selected == 45) lcdtype = 1;
     else if (selected == 46) lcdtype = 2;
     }
     else if (selected >46 && selected < 50) 
     {
     lcdrelay=16;
     if (selected == 47) lcdtype = 0;
     else if (selected == 48) lcdtype = 1;
     else if (selected == 49) lcdtype = 2;
     }
     TouchOut[1]=lcdtype;
     TouchOut[2]=lcdrelay;
     } while (selected != 50);
  ScreenID=0;
  selected=0;
  break;
}
}
void receiveEvent(int howMany) 
{
    if (howMany==5)  // Our custom protocol is 13 bytes
  {
    byte cmd1,cmd2,cmd3,cmd4,cmd5;
      cmd1=Wire.read();
      cmd2=Wire.read();
      cmd3=Wire.read();
      cmd4=Wire.read();
      cmd5=Wire.read();
    if (cmd1=='$' && cmd2=='$' && cmd3=='$') // the first 3 bytes of the custom protocol are $$$ to ensure it's coming from RA
      {
      maintemp=(cmd4<<8)+cmd5;
      }
  }
}
void requestEvent() {
    Wire.write(TouchOut, sizeof(TouchOut));
}
void ConvertNumToString(char* string, int num, byte decimal)
{
    char temptxt[3];
    int Temp = num;
    if (Temp==0xFFFF) Temp=0;
	itoa(Temp/decimal,string,10);
	if (decimal>1)
	{
		itoa(Temp%decimal,temptxt,10);
		strcat(string , ".");
		if (Temp%decimal<10 && decimal==100) strcat(string , "0");
		strcat(string , temptxt);
	}
}
void DrawSingleMonitor(byte c,int Temp, byte x, byte y, byte decimal)
{
        lcd.xy(x,y);
        char text[7];
	if ( Temp == 0xFFFF ) Temp = 0;
	if (( Temp == 0 ) && ( decimal > 1 ))
	{
	strcpy(text, "Error");
	}
	else
	{
	ConvertNumToString(text, Temp, decimal);
	}
        lcd.color(BLACK);
        lcd.rect(x,y,50,20);
        lcd.fill(TRUE);
        lcd.string(1,text);
        lcd.color(c);
        lcd.printStringId(1,10);
}
 
void DrawText(byte c, byte x, byte y, char* string)
{
	lcd.color(c);
        lcd.xy(x,y);
        lcd.string(9,string);
        lcd.printStringId(9,10);
}

void DrawSwitch(byte x, byte y, byte a, byte b, byte c)
{
  lcd.fontw( 1, "sans24" );
  lcd.color(WHITE); 
  lcd.theme( 1, 9, 3, 0, 0, 0, 8, 9, 8, 1, 1 );
  lcd.theme( 2, 5, 20, 3, 3, 3, 4, 4, 4, 2, 1 );
  lcd.theme( 3, 5, 20, 3, 3, 3, 13, 13, 13, 2, 1 );
  delay(500);
  lcd.string( 1, "OFF" ); // stringId 1
  lcd.string( 2, "ON" ); // stringId 2  
  lcd.string( 3, "AUTO" ); // stringId 1
  lcd.button( a, x, y, 50, 50, 1, 0, 0, 1, 1 ); 
  lcd.button( b, x+50, y, 50, 50, 1, 0, 0, 2, 2 ); 
  lcd.button( c, x+100, y, 50, 50, 1, 0, 0, 3, 3 ); 
}

void DrawDate(byte c, byte x, byte y)
{
    //byte iTimeHourOffset=0;
    char text[21];
    char temp[]="  ";
    strcpy(text,"");
    itoa(month(),temp,10);
    if (temp[1]==0) strcat(text,"0");
    strcat(text,temp);
    strcat(text,"/");
    itoa(day(),temp,10);
    if (temp[1]==0) strcat(text,"0");
    strcat(text,temp);
    strcat(text,"/");
    itoa(year()-2000,temp,10);
    if (temp[1]==0) strcat(text,"0");
    strcat(text,temp);
    strcat(text," ");
    //if (iTimeHour>12) iTimeHourOffset=12;
    itoa(hourFormat12(),temp,10);
    if (temp[1]==0) strcat(text,"0");
    strcat(text,temp);
    strcat(text,":");
    itoa(minute(),temp,10);
    if (temp[1]==0) strcat(text,"0");
    strcat(text,temp);
    strcat(text,":");
    itoa(second(),temp,10);
    if (temp[1]==0) strcat(text,"0");
    strcat(text,temp);
    if (isAM())
    {
        strcat(text," AM");
    }
    else
    {
        strcat(text," PM");
    }
    lcd.color(BLACK);
    lcd.rect(x,y,200,20);
    lcd.fill(TRUE);
    lcd.string(1,text);
    lcd.color(c);
    lcd.printStringId(1,10);
}

void ezLCDevent( void ) {
  ezLCDInt = true;
}
and the demo code on the RA unit I used to test it. I ony had the main temp probe connected to see that it updated correctly.

Code: Select all

#include <Salinity.h>
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <ReefAngel.h>

byte lcdrelay = 0;
byte lcdtype = 0;
//wire.write variable number
byte param[2];
byte TouchIn[4];

void DrawCustomMain()
{
  // the graph is drawn/updated when we exit the main menu &
  // when the parameters are saved
  ReefAngel.LCD.Clear(BtnActiveColor,5,0,127,11);
  ReefAngel.LCD.DrawText(DefaultBGColor,BtnActiveColor,30,3,"My Reef Angel");
//  ReefAngel.LCD.DrawDate(6, 122);

  pingSerial();
#if defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor(15, 70, ReefAngel.Params,
  ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue());
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor(15, 70, ReefAngel.Params);
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
  pingSerial();
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox(12, 103, TempRelay);
  TempRelay = ReefAngel.Relay.RelayDataE[0];
  TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
  TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
  ReefAngel.LCD.DrawOutletBox(12, 120, TempRelay);
}

void DrawCustomGraph()
{
  ReefAngel.LCD.DrawGraph(5, 15);
}

void setup()
{
  ReefAngel.Init();  //Initialize controller
}

void loop()
{
GetRelay();
//  ReefAngel.LCD.DrawSingleMonitor(lcdrelay, 0,20,122, 1);
//  ReefAngel.LCD.DrawSingleMonitor(lcdtype, 0,80,122, 1);
 if (lcdrelay < 9)
 {
  if (lcdtype==0)  // Turn port off
   {
    bitClear(ReefAngel.Relay.RelayMaskOn,lcdrelay-1);
    bitClear(ReefAngel.Relay.RelayMaskOff,lcdrelay-1);
   }
   else if (lcdtype==1)  // Turn port on
   {
    bitSet(ReefAngel.Relay.RelayMaskOn,lcdrelay-1);
    bitSet(ReefAngel.Relay.RelayMaskOff,lcdrelay-1);
    } 
    else if (lcdtype==2)  // Turn port Auto
    {
    bitClear(ReefAngel.Relay.RelayMaskOn,lcdrelay-1);
    bitSet(ReefAngel.Relay.RelayMaskOff,lcdrelay-1);
    }
  } 
else if (lcdrelay < 17)
 {
  if (lcdtype==0)  // Turn port off
   {
    bitClear(ReefAngel.Relay.RelayMaskOnE[0],lcdrelay-9);
    bitClear(ReefAngel.Relay.RelayMaskOffE[0],lcdrelay-9);
   }
   else if (lcdtype==1)  // Turn port on
   {
    bitSet(ReefAngel.Relay.RelayMaskOnE[0],lcdrelay-9);
    bitSet(ReefAngel.Relay.RelayMaskOffE[0],lcdrelay-9);
    } 
    else if (lcdtype==2)  // Turn port Auto
    {
    bitClear(ReefAngel.Relay.RelayMaskOnE[0],lcdrelay-9);
    bitSet(ReefAngel.Relay.RelayMaskOffE[0],lcdrelay-9);
    }
 } 
//send data parameter package to the auxillary monitor
         Wire.beginTransmission(7);      // transmit to device #10
         Wire.write('$');         // send the $$$
         Wire.write('$');
         Wire.write('$');
         paramsend(ReefAngel.Params.Temp[T1_PROBE]);
         Wire.endTransmission();      // stop transmitting
  ReefAngel.ShowInterface();
}
void GetRelay()  //relay status sent from ezLCD
{
  Wire.requestFrom(7,3);
  if(Wire.available())
  {
    for (int a=0;a<4;a++)
      TouchIn[a]=Wire.read();
  }
  lcdtype=TouchIn[1];
  lcdrelay=TouchIn[2];
}
//function to backage int into bytes for parameters temp, pH, timers, actinic%)
void paramsend(int a)
{
  param[0]=(byte)(a>>8);
  param[1]=(byte)(a);
  Wire.write(param,2);
}
-jon
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: New Head Unit....

Post by rimai »

Cool :)
Roberto.
binder
Posts: 2871
Joined: Fri Mar 18, 2011 6:20 pm
Location: Illinois
Contact:

Re: New Head Unit....

Post by binder »

that is pretty sweet.
Smotz
Posts: 412
Joined: Sat Mar 30, 2013 5:02 pm
Location: CT, USA

Re: New Head Unit....

Post by Smotz »

Nice where can I buy the completed product? :D
User avatar
jsclownfish
Posts: 378
Joined: Mon Oct 24, 2011 7:52 pm
Location: Saint Louis

Re: New Head Unit....

Post by jsclownfish »

I need to get back to it. :geek: I kinda put in on the back burner as Roberto was moving forward on an LCD extension.

Jon
User avatar
mikedizon
Posts: 31
Joined: Fri May 04, 2012 10:13 am

Re: New Head Unit....

Post by mikedizon »

Hey thats cool. This serves as an inspiration for the next Generation Ra controllers.
The only problem here is if your hands get wet or dirty and you accidentally touch it. I wonder if this touch LCD screen is like the apple ipad screens really heavy duty.
Last edited by mikedizon on Sat Apr 02, 2016 11:49 am, edited 1 time in total.
89delta
Posts: 163
Joined: Mon Oct 15, 2012 7:21 pm
Location: Leesburg, GA

Re: New Head Unit....

Post by 89delta »

I'm looking into doing a touch screen as well. Right now I'm getting all the required pieces needed to prototype a stackable shield for the mega2560. Thought about using a 3.2" tft I got a 7" tft as well. I figured there would be more room on the 7" to display a lot of parameters, but would still try the 3.2" tft to display these other parameters on different screens. Setup menu would be basic time, pH calibration, feed, water change modes as well as clearing any flags. Will take a bit with working 12hr days.
User avatar
mikedizon
Posts: 31
Joined: Fri May 04, 2012 10:13 am

Re: New Head Unit....

Post by mikedizon »

Excited for a new touch screen for my RA controller.

The joystick has been ok but I can already retire them. Now
that 1 of my RA controller joystick stop working properly.
I cannot scroll anymore to the right. Despite the repair.
Im just waiting for the new Touch Screen LCD controller
to be available.

This is my guess eventually in time the other RA joystick will
break down and you will want to have the new LCD touch screen
ready if not as a back up with you.

The important thing is the LCD screen should be robust.
specially near seawater.

Anyone know when the RA LCD touch screen will be ready.
Ismaclst
Posts: 250
Joined: Wed Jan 28, 2015 5:17 pm

Re: New Head Unit....

Post by Ismaclst »

I could be wrong but I don't think it's going to happen. Few people have used tablets instead, considering they are so cheap now.

http://forum.reefangel.com/viewtopic.php?f=2&t=3118
Image
User avatar
cosmith71
Posts: 1437
Joined: Fri Mar 29, 2013 3:51 pm
Location: Oklahoma City

Re: New Head Unit....

Post by cosmith71 »

I believe there are prototype touch screens in the wild, but given the cost a cheap, dedicated 7" Android tablet running the RA app is a more reasonable way to go. I've done this for a few years now and it works great.
troylong45
Posts: 214
Joined: Sat Oct 10, 2015 9:17 pm

Re: New Head Unit....

Post by troylong45 »

Robert I seen u said you can run a secondary screen with Adriano shield or something like that. I would like to have a larger screen but don't want it to run from wifi cud of the update Intervals . And would like live feed on it and direct interface on my phone sometimes on the app it will lag or error sometimes and then I gotta do it again.

A cheap tablet or custom LCD touch screen would be cool but have no idea what route to take and if some help form from someone to set up a secondary larger touch screen would be great
Image
troylong45
Posts: 214
Joined: Sat Oct 10, 2015 9:17 pm

Re: New Head Unit....

Post by troylong45 »

Robert I seen u said you can run a secondary screen with Adriano shield or something like that. I would like to have a larger screen but don't want it to run from wifi cud of the update Intervals . And would like live feed on it and direct interface on my phone sometimes on the app it will lag or error sometimes and then I gotta do it again.

A cheap tablet or custom LCD touch screen would be cool but have no idea what route to take and if some help form from someone to set up a secondary larger touch screen would be great
Image
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: New Head Unit....

Post by lnevo »

A cheap android tablet running the ReefAngel UApp or Binder's app.. doesn't have to rely on the cloud..
troylong45
Posts: 214
Joined: Sat Oct 10, 2015 9:17 pm

Re: New Head Unit....

Post by troylong45 »

It don't work properly for me same on uapp (home ipxxxxxxxx:2000/wifi) and the Android app on home . It's to delayed and errors sometimes while its loading. So i think hard wired is the way I have to go.
Image
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: New Head Unit....

Post by lnevo »

Thats not uapp. Try downloading the native version of the uapp, not the /wifi, that one is buggy.
troylong45
Posts: 214
Joined: Sat Oct 10, 2015 9:17 pm

Re: New Head Unit....

Post by troylong45 »

Where do i find that
Image
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: New Head Unit....

Post by lnevo »

Not sure i don't use android :P
User avatar
cosmith71
Posts: 1437
Joined: Fri Mar 29, 2013 3:51 pm
Location: Oklahoma City

Re: New Head Unit....

Post by cosmith71 »

troylong45
Posts: 214
Joined: Sat Oct 10, 2015 9:17 pm

Re: New Head Unit....

Post by troylong45 »

Thanks Lee and cosmith71, I got it to download it doenst seem to be a live feed only if u hit refresh . The fuction is there but not the constant up to date feed. So that won't really wrok for me I'll probably have to search some more on if anyone has done a Tutorial on a touch screen and or bigger screen.
Image
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: New Head Unit....

Post by lnevo »

Roberto, can we add auto refresh in the uapp?
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: New Head Unit....

Post by rimai »

Yeah, but the cloud server would take care of this and provide a live stream of data without the need of refresh.
You will just have to wait a little more for the cloud server to be a reality :)
Roberto.
troylong45
Posts: 214
Joined: Sat Oct 10, 2015 9:17 pm

Re: New Head Unit....

Post by troylong45 »

Ok thanks guys till then Ill research on a new controller screw till then
Image
Post Reply