Monday, 3 September 2012

PROGRAMMING PENGENDALIAN 2 PARFUM OTOMATIS DAN RPM KIPAS ANGIN MENGGUNAKAN HANDPHONE ANDROID



PROGRAMMING PENGENDALIAN 2 PARFUM OTOMATIS DAN RPM KIPAS ANGIN MENGGUNAKAN HANDPHONE ANDROID

Spesifikasi hardware:
Mikrokontroler
ATMEGA 8535
Crystal
11.059200 MHz
Komunikasi Data
RS232 to Serial TTL

Spesifikasi Software:
Compiler Mikrokontroler
Codevision Avr
Compiler Android
Basic4android




#Region Module Attributes
      #FullScreen: False
      #IncludeTitle: True
      #ApplicationLabel: PARFUM2
      #VersionCode: 1
      #VersionName:
      #SupportedOrientations: unspecified
#End Region

'Activity module
Sub Process_Globals
      Dim Serial1 As Serial
      Dim TextReader1 As TextReader
      Dim TextWriter1 As TextWriter
      Dim Timer1 As Timer
      Dim connected As Boolean
End Sub

Sub Globals
      Dim btnSend As Button
      Dim txtSend As EditText
      Dim EditText1 As EditText
      Dim SeekBar1 As SeekBar
      Dim EditText2 As EditText
      Dim SeekBar2 As SeekBar
      Dim Button2 As Button
      Dim Button3 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
      If FirstTime Then
            Serial1.Initialize("Serial1")
            Timer1.Initialize("Timer1", 500)
      End If
      Activity.LoadLayout("1")
      Activity.AddMenuItem("Connect", "mnuConnect")
      Activity.AddMenuItem("Disconnect", "mnuDisconnect")
      EditText1.Text=SeekBar1.Value
      EditText2.Text=SeekBar2.Value
End Sub
Sub Activity_Resume
      If Serial1.IsEnabled = False Then
            Msgbox("Please enable Bluetooth.", "")
      Else
            Serial1.Listen 'listen for incoming connections
      End If
End Sub
Sub mnuConnect_Click
      Dim PairedDevices As Map
      PairedDevices = Serial1.GetPairedDevices
      Dim l As List
      l.Initialize
      For i = 0 To PairedDevices.Size - 1
            l.Add(PairedDevices.GetKeyAt(i))
      Next
      Dim res As Int
      res = InputList(l, "Choose device", -1) 'show list with paired devices
      If res <> DialogResponse.CANCEL Then
            Serial1.Connect(PairedDevices.Get(l.Get(res))) 'convert the name to mac address
      End If
End Sub

Sub Serial1_Connected (Success As Boolean)
      If Success Then
            ToastMessageShow("Connected successfully", False)
            TextReader1.Initialize(Serial1.InputStream)
            TextWriter1.Initialize(Serial1.OutputStream)
            Timer1.Enabled = True
            connected = True
      Else
            connected = False
            Timer1.Enabled = False
            Msgbox(LastException.Message, "Error connecting.")
      End If
End Sub
Sub mnuDisconnect_Click
      Serial1.Disconnect
      connected = False
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Timer1_Tick
     
End Sub


Sub SeekBar1_ValueChanged (Value As Int, UserChanged As Boolean)
      EditText1.Text=SeekBar1.Value
      If connected Then
            TextWriter1.Write("A" & SeekBar1.Value)
            TextWriter1.Flush
            Timer1.Enabled=True
            TextWriter1.Write("B" & SeekBar2.Value)
            TextWriter1.Flush
            Timer1.Enabled=True
            End If     
           
End Sub
Sub EditText1_TextChanged (Old As String, New As String)
      'EditText1.SelectAll
End Sub
Sub EditText1_FocusChanged (HasFocus As Boolean)
      EditText1.SelectAll
     
End Sub
Sub EditText1_EnterPressed
      If EditText1.Text="" Then
      EditText1.Text=0
      End If
      SeekBar1.Value=EditText1.Text
End Sub
Sub Button1_Click
      Activity.Finish
End Sub

Sub SeekBar2_ValueChanged (Value As Int, UserChanged As Boolean)
      EditText2.Text=SeekBar2.Value
      If connected Then
            TextWriter1.Write("A" & SeekBar1.Value)
            TextWriter1.Flush
            Timer1.Enabled=True
            TextWriter1.Write("B" & SeekBar2.Value)
            TextWriter1.Flush
            Timer1.Enabled=True
            End If     
      End Sub

Sub EditText2_TextChanged (Old As String, New As String)
      'EditText1.SelectAll
      End Sub
Sub EditText2_FocusChanged (HasFocus As Boolean)
      EditText2.SelectAll
End Sub
Sub EditText2_EnterPressed
      If EditText2.Text="" Then
      EditText2.Text=0
      End If
      SeekBar2.Value=EditText2.Text
End Sub
Sub Button2_Click
            TextWriter1.Write("C" & "1")
            TextWriter1.Flush
End Sub
Sub Button3_Click
            TextWriter1.Write("C" & "2")
            TextWriter1.Flush
End Sub

Program Mikrokontroler
#include <mega8535.h>
long int dig7,dig6,dig5,dig4,dig3,dig2,dig1,jumlah;
int digt1,digt2,digt3,digt4,ulangi,loop,data;
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#include <delay.h>

#define e1 PORTD.5
#define a1 PORTD.6
#define b1 PORTD.7

#define e2 PORTD.4
#define a2 PORTD.2
#define b2 PORTD.3

#define sa PORTB.0
#define sb PORTB.1
#define sc PORTB.2
#define sd PORTB.3
#define se PORTB.4
#define sf PORTB.5
#define sg PORTB.6
#define sp PORTB.7

#define digit1 PORTA.3=0,PORTA.2=1,PORTA.1=1,PORTA.0=1
#define digit2 PORTA.3=1,PORTA.2=0,PORTA.1=1,PORTA.0=1
#define digit3 PORTA.3=1,PORTA.2=1,PORTA.1=0,PORTA.0=1
#define digit4 PORTA.3=1,PORTA.2=1,PORTA.1=1,PORTA.0=0

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x94;
// Place your code here
loop++;
if (loop>=100)
    {
    data++;
    loop=0;
    }

}



#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index]=data;
   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
   {
   --tx_counter;
   UDR=tx_buffer[tx_rd_index];
   if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
   {
   tx_buffer[tx_wr_index]=c;
   if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
   ++tx_counter;
   }
else
   UDR=c;
#asm("sei")
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here
void segmen(char p,char g,char f,char e,char d,char c,char b,char a)
{
sa=a;
sb=b;
sc=c;
sd=d;
se=e;
sf=f;
sg=g;
sp=p;
}

void tampil(char angka)
{
switch(angka)
{
//              p g f e d c b a     
case 0 : segmen(1,1,0,0,0,0,0,0);break;
case 1 : segmen(1,1,1,1,1,0,0,1);break;
case 2 : segmen(1,0,1,0,0,1,0,0);break;
case 3 : segmen(1,0,1,1,0,0,0,0);break;
case 4 : segmen(1,0,0,1,1,0,0,1);break;
case 5 : segmen(1,0,0,1,0,0,1,0);break;
case 6 : segmen(1,0,0,0,0,0,1,0);break;
case 7 : segmen(1,1,1,1,1,0,0,0);break;
case 8 : segmen(1,0,0,0,0,0,0,0);break;
case 9 : segmen(1,0,0,1,0,0,0,0);break;
case 10 : segmen(1,1,1,1,1,1,1,1);break;
}
}
void scan()
{
tampil(digt1);
digit1;
delay_ms(5);
tampil(digt2);
digit2;
delay_ms(5);
tampil(digt3);
digit3;
delay_ms(5);
tampil(digt4);
digit4;
delay_ms(5);
}


void main(void)
{
// Declare your local variables here



PORTA=0xff;
DDRA=0xff;

PORTB=0xff;
DDRB=0xff;

PORTC=0x00;
DDRC=0x00;

PORTD=0b00111111;
DDRD=0b00111111;


TCCR0=0x05;
TCNT0=0x94;
OCR0=0x00;

TIMSK=0x01;




UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;



// Global enable interrupts
#asm("sei")
data=0;
e1=1;
      a1=0;
      b1=1;
      delay_ms(400);
      e1=1;
      a1=1;
      b1=1;
      e2=1;
      a2=0;
      b2=1;
      delay_ms(400);
      e2=1;
      a2=1;
      b2=1;
      data=0;

while (1){
      // Place your code here
      dig7=rx_buffer[1];
      dig6=rx_buffer[2];
      dig5=rx_buffer[3];
      dig4=rx_buffer[4];
      dig3=rx_buffer[5];
      dig2=rx_buffer[6];
      dig1=rx_buffer[7];
     
       
       
      scan();

      if (rx_buffer[0]=='A')
      {
      jumlah=(dig7*1000000)+(dig6*100000)+(dig5*10000)+(dig4*1000)+(dig3*100)+(dig2*10)+(dig1*1);
      printf("@ %d",jumlah);
      scan();
      digt1=rx_buffer[4];
      digt2=rx_buffer[5];
      digt3=rx_buffer[6];
      digt4=rx_buffer[7];
      }
      if (rx_buffer[0]=='B')
      {
      jumlah=(dig7*1000000)+(dig6*100000)+(dig5*10000)+(dig4*1000)+(dig3*100)+(dig2*10)+(dig1*1);
      printf("@ %d",jumlah*2);
      scan();
      digt1=((jumlah*2)/1000)%10;
      digt2=((jumlah*2)/100)%10;
      digt3=((jumlah*2)/10)%10;
      digt4=((jumlah*2)/1)%10;
      }
     
      if (rx_buffer[0]=='C')
      {
      if (rx_buffer[7]==1)
      {
      for (ulangi=0;ulangi<1;ulangi++)
      {
      scan();
      printf("@ %d",rx_buffer[7]);
      e1=1;
      a1=0;
      b1=1;
      delay_ms(400);
      }
      e1=1;
      a1=1;
      b1=1;
      rx_buffer[0]='A';
      for (ulangi=1;ulangi<8;ulangi++)
      {
      scan();
      rx_buffer[ulangi]=1;
      }
      }
      }
     
      if (rx_buffer[0]=='C')
      {
      if (rx_buffer[7]==2)
      {
      for (ulangi=0;ulangi<1;ulangi++)
      {
      scan();
      printf("@ %d",rx_buffer[7]);
      e2=1;
      a2=0;
      b2=1;
      delay_ms(400);
      }
      e2=1;
      a2=1;
      b2=1;
      rx_buffer[0]='A';
      for (ulangi=1;ulangi<8;ulangi++)
      {
      scan();
      rx_buffer[ulangi]=1;
      }
      }
      }
     
     
      };
}


No comments:

Post a Comment