Laporan Akhir 2 (SPI)


 

1. Kondisi [KEMBALI]

2. Rangkaian Simulasi [KEMBALI]

3. Flowchart [KEMBALI]
//MASTER

//SLAVE

4. Listing Program [KEMBALI]
//MASTER

#include
#define button 2
#define addr 0x02
bool state, lastState;
void setup() {
  // put your setup code here, to run once:
  pinMode(button, INPUT);
  //Serial.begin(9600);
  //Wire.begin();
  pinMode(SS, OUTPUT);
  digitalWrite(SS, HIGH);
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV8);
  lastState = digitalRead(button);
}
void loop() {
  // put your main code here, to run repeatedly:
  state = digitalRead(button);
  if (state != lastState) {
    lastState = state;
    /***********************************************/
    // TODO: send data to slave
    digitalWrite(SS, LOW);
    //Wire.beginTransmission(addr);
    if (state == 0) {
      SPI.transfer('A');
      //Wire.write('A');
      //Serial.write('A');
    } else {
      SPI.transfer('B');
      //Wire.write('B');
      //Serial.write('B');
    }
    digitalWrite(SS, HIGH);
    //Wire.endTransmission();
    /***********************************************/
  }
  delay(10);
}
//SLAVE
#include
#define led 2
#define addr 0x02
void setup() {
  // put your setup code here, to run once:
  pinMode(led, OUTPUT);
  //Serial.begin(9600);
  digitalWrite(led, LOW);
  SPCR |= _BV(SPE);
  SPI.attachInterrupt();
  //Wire.begin(0x02);
  //Wire.onReceive(callback);
}
ISR (SPI_STC_vect) {
  char c = SPDR;
  if (c == 'A') {
    digitalWrite(led, HIGH);
  } else if (c == 'B') {
    digitalWrite(led, LOW);
  }
}
/*
  void callback() {
  char c = Wire.read();
  if (c == 'A') {
    digitalWrite(led, HIGH);
  } else if (c == 'B') {
    digitalWrite(led, LOW);
  }
  }
*/
void loop() {
  delay(1);
}
5. Analisa [KEMBALI]
Buatlah agar ada 2 push button,1 led dengan 4 kondisi!

//Master
#include //Deklarasi library SPI
#define button1 5
#define button2 4
#define addr 0x02
bool state,lastState;
void setup (){
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(SS, OUTPUT);
  digitalWrite(SS, HIGH);
  // disable Slave Select
  SPI.begin ();
  SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
  lastState = digitalRead(button1);
  lastState = digitalRead(button2);
}
void loop () {
 state= digitalRead(button1);
 state= digitalRead(button2);
  if(state!= lastState){
    lastState=state;
   digitalWrite(SS, LOW); //enable Slave Select
  // send test string
  if (state == 1 && state== 0)
  {
    SPI.transfer('1');
  }
  else if(state == 0 && state== 1)
  {
    SPI.transfer('2');
  }
  else if(state == 0 && state== 0)
  {
    SPI.transfer('3');
  } else
  {SPI.transfer('4');}
  digitalWrite(SS, HIGH); // disable Slave Select
  delay(2000);
  }
}
//Slave
#include
#define led 7
#define addr0x02;
void setup () {
  pinMode(led, OUTPUT); // have to send on master in so it set as output
  digitalWrite(led,LOW);
  SPCR |= _BV(SPE); // turn on SPI in slave mode
  SPI.attachInterrupt(); // turn on interrupt
}
ISR (SPI_STC_vect) // SPI interrupt routine
{
  char c = SPDR; // read byte from SPI Data Register
    if (c =='1')
    {
      digitalWrite(led, HIGH); //LED menyala
      delay(100);
      digitalWrite(led, LOW); //LED menyala
      delay(100);
    }
    else if (c == '2') //Jika data yang dikirimkan berlogika
    {
      digitalWrite(led, HIGH); //LED menyala
      delay(1000);
      digitalWrite(led, LOW); //LED menyala
      delay(1000);
    }
    else if (c == '3') //Jika data yang dikirimkan berlogika
    {
      digitalWrite(led, HIGH); //LED menyala
    }
    else
    {
      digitalWrite(led, LOW); //LED mati
    }
}
    void loop () {
      delay(1);
    }
 

6. Video Simulasi [KEMBALI]


7. Link Download [KEMBALI]
Listing Program klik disini
Video Percobaan klik disini  

Tidak ada komentar:

Posting Komentar