/*History Version 2.0 zweite Variable LED1an übertrag3en eingerichtet zweite LED flacker beim Empänger - LED bei Sender leuchtet dauerhaft Nach Tests müsste Problem beim sender liegen. Ziehe ich CAN Transiver raus, bleibt LED1 an! Fewhler war framelenth für die länge der nachricht. Variable durch Zahl (in diem falle 2 ersetzt und das flackern ist weg 3.0 Framelenth entfernt Nachrichten ID auf 0x000001 geändert 3.1 Zweiten Taster hinzugefügt um variabelen unanbhängig zu steuern __ Funktionstest OK! 3.2 Variablen LED an gelöscht Variable Tasterstate direkt übertragen 4.0 Lichtschranken einzele Bytes in der CAN Übertragung zuweisen ------- Funktionstest OK */ //-------------------------------------- Umbenenen der STM Pins // Bliotheken //------------------------------------------------------------------------------------------------------------Testweise auskommentiert #include #include "stm32f103.h" // Bei selbst erstellten Bibliotheken der name immer in Anführungszeichen!! Nicht in größer kleiner als Zeichen! // EIngänge // Taster const int Taster = PB5; const int Taster1 = PB6; int Taster1State = 0; int TasterState = 0; // Ausgänge const int LED = PB12; const int LED1 = PB13; // Variablen uint8_t counter = 0; // Zahler für nachricht wurde x mal versand uint8_t frameLength = 0; // framelegth ist die länge der nachricht hier kann man auch im Sendeteil eine Zahl angeben unsigned long previousMillis = 0; // stores last time output was updated const long interval = 10; // transmission interval (milliseconds) Intervall in dem gesendet wird uint8_t Data0 = 00; // Data0 ist zur Übertragung der Daten in CAN[0] void setup() { // -------------------------------------- pinMode pinMode(Taster, INPUT); pinMode(Taster1, INPUT); pinMode(LED, OUTPUT); pinMode(LED1, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); //LED auf Arduino auf HIGH // CAN aktivieren { Serial.begin(115200); bool ret = CANInit(CAN_500KBPS, 0); // CAN_RX mapped to PA11, CAN_TX mapped to PA12 if (!ret) while (true); } } void loop() { // ---------------------------- Begin CAN // ---------------------------- Begin CAN Senden { { CAN_msg_t CAN_TX_msg; // Initialisierung Senden // eigentliche Daten werden eingefüllt // if (TasterState == 0)CAN_TX_msg.data[0] = 0x00; // if (TasterState == 1)CAN_TX_msg.data[0] = 0x01; // if (Taster1State == 0)CAN_TX_msg.data[1] = 0x00; // if (Taster1State == 1)CAN_TX_msg.data[1] = 0x01; // CAN_TX_msg.data[0] = ((Taster1State << 1) | (TasterState <<0 )); bitWrite (Data0, 0, TasterState); // mit bitwrite lassen sich einzelne bits innerhalb eines Bytes beschreiben. Hier Zustand TasterState in Erstes (ganz rechtes) Bit von Data0 schreiben bitWrite (Data0, 1, Taster1State); // mit bitwrite lassen sich einzelne bits innerhalb eines Bytes beschreiben. Hier Zustand Taster1State in zweites Bit von Data0 schreiben CAN_TX_msg.data[0] = Data0; // CANData0 Wert von Data0 zuweisen CAN_TX_msg.len = 1; unsigned long currentMillis = millis(); // Senden alle x millisekunden if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if ( ( counter % 2) == 0) { // Rest der Nachricht wird befüllt CAN_TX_msg.type = DATA_FRAME; if (CAN_TX_msg.len == 0) CAN_TX_msg.type = REMOTE_FRAME; CAN_TX_msg.format = EXTENDED_FORMAT; CAN_TX_msg.id = 0x000001; // nachrichten ID } CANSend(&CAN_TX_msg); // Übergabe der Nachricht an die Hardware } } } TasterState = digitalRead(Taster); // Taster abfragen Taster1State = digitalRead(Taster1); if (TasterState == LOW) { digitalWrite(LED, LOW); } else { digitalWrite(LED, HIGH); } if (Taster1State == LOW) { digitalWrite (LED1, LOW); } if (Taster1State == HIGH) { digitalWrite (LED1, HIGH); } }