#include int main(){ init(); Serial.begin(9600); uint8_t Tank_Status; PORTC |= (1 << PORTC4) | (1 << PORTC5); //analog Input 4 & 5 mit Pull-up-Widerstand auf High ziehen (PC4, PC5) TWBR = 72; // Übertragungsgeschwindigkeit festlegegen while(1){ delay(1000); //Start Senden TWCR |= (1 << TWINT); //Twin Wire Interrup zurücksetzten | 1 ist Low Zustand TWCR |= (1 << TWSTA); //Twin Wire Start setzen | übertragung starten TWCR |= (1 << TWEN); //Twin Wire Enable setzten | lokaler TW-Schalter //Warten while(!(TWCR & (1 << TWINT))); //Warten bis TW Interrupt gesetzt wird | 0 ist High Zustand // Status ueberpruefen: Start wurde gesendet if (TW_STATUS != TW_START) ERROR(); //TW_Start = 0x8 Adresse -> Start condition has been transmitted // Adresse senden uint8_t SLA_W = 0b00000110; //Slave Adresse definieren | 0b00000100 TWDR = SLA_W; //Master Reciever - Slave Transmitter (Write = 1) |0b00000110 Serial.print("Adresse:"); Serial.println(TWDR, BIN); TWCR |= (1 << TWINT) | (1 << TWEN); // Sende Aufforderung TW-Interrupt = low | TW-Enable = high //Warten while(!(TWCR & (1 << TWINT))); //Warten bis TW Interrupt gesetzt wird | 0 ist High Zustand // Status ueberpruefen: Slave hat adresse bestätigt if (TW_STATUS != TW_MR_SLA_ACK) ERROR(); //TW_MR_SLA_ACK = 0x40 -> Slave + R has been transmitted | ACK has been recieved // Empfang starten, NACK fuer Daten vorbereitet (weil letztes Paket) TWCR |= (1 << TWINT); //Twin Wire Interrup zurücksetzten | 1 ist Low Zustand TWCR |= (1 << TWEN); //Lokaler Enable Schalter // Warten while (!(TWCR & (1 << TWINT))); //Warten bis TW Interrupt gesetzt wird | 0 ist High Zustand // Status ueberpruefen: Daten empfangen if (TW_STATUS != TW_MR_DATA_NACK) ERROR(); //TW_MR_DATA_NACK = 0x58 -> Data byte has been recieved | not ACK has been recieved (letztes Paket) // Daten auslesen Tank_Status = TWDR; //Variable den übertragenen Wert zuweisen Serial.print("Tank: "); Serial.println(Tank_Status); // Stop senden TWCR |= (1 << TWINT); //Twin Wire Interrup zurücksetzten | 1 ist Low Zustand TWCR |= (1 << TWSTO); //Twin Wire Stop setzen | übertragung beenden TWCR |= (1 << TWEN); //Twin Wire Enable setzen | lokaler TW-Schalter } } void ERROR() { Serial.print("TWCR: "); Serial.println(TWCR, BIN); Serial.print("TW_STATUS: "); Serial.println(TW_STATUS, HEX); }