#include int main(){ init(); Serial.begin(9600); // Slave Adresse uint8_t SLA_W = 0b00000110; TWAR = SLA_W; Serial.println("Adresse:"); Serial.println(TWAR, BIN); // Slave aktivieren, ACK fuer eigene Adresse vorbereitet TWCR |= (1 << TWINT); //TW-Interrupt rücksetzen | 0 ist low Zustand TWCR |= (1 << TWEA); //TW-Enable Acknowledge Bit -> ACK wird gesendet wenn: eigene Slave Adresse Empfangen wurde | Daten empfangen wurden | General Call TWCR |= (1 << TWEN); //TW-Enable setzen uint8_t Tank_out = 56; //Variable für das zu sendende Datenpaket while (1) { Serial.println("---"); // Warten while (!(TWCR & (1 << TWINT))); //Warten bis TW Interrupt gesetzt wird | 0 ist High Zustand // Status ueberpruefen: Eigene Adresse empfangen if (TW_STATUS != TW_ST_SLA_ACK) ERROR(); //TW_ST_SLA_ACK = 0xA8 -> Own Slave + R has been recieved | ACK has been returned // Daten senden, NACK erwarten (weil letztes Paket) TWDR = Tank_out; //Datenpaket senden TWCR |= (1 << TWINT); //TW-Interrupt rücksetzen | 0 ist low Zustand TWCR |= (1 << TWEN); //TW-Enable setzen // Warten while (!(TWCR & (1 << TWINT))); //Warten bis TW Interrupt gesetzt wird | 0 ist High Zustand // Status ueberpruefen: Master hat Daten bestaetigt if (TW_STATUS != TW_ST_DATA_NACK) ERROR(); //TW_ST_DATA_NACK = 0xC0 -> Data Byte in TWDR has been transmitted | Not ACK has been recieved // Slave aktivieren, ACK fuer eigene Adresse vorbereitet TWCR |= (1 << TWINT); //TW-Interrupt rücksetzen | 0 ist low Zustand TWCR |= (1 << TWEA); //TW-Enable Acknowledge Bit -> ACK wird gesendet wenn: eigene Slave Adresse Empfangen wurde | Daten empfangen wurden | General Call TWCR |= (1 << TWEN); //TW-Enable setzen } } // Error funktion für Fehlerbehebung void ERROR() { Serial.print("TWCR: "); Serial.println(TWCR, BIN); Serial.print("TW_STATUS: "); Serial.println(TW_STATUS, HEX); }