Hallo,
Folgendes Problem: Ich habe eine Methode geschrieben in welcher unter anderem Dinge im Serial Monitor ausgegeben werden sollen.
bool Watchdog (void*)
{
Serial.print("Hallo");
switch (i)
{
case 1:
i = 0;
break;
case 0:
i = 1;
break;
}
Speicher[i] = Livebit;
if (Speicher[0] != Speicher[1])
{
t = 0;
}
else
{
t++;
if(t>=10)
{
Serial.print("Fehler");
}
}
}
Wenn ich das Serial.Print("Hallo") entferne wird "Fehler" nicht ausgegeben, wenn es jedoch da steht wird Hallo und Fehler ausgegeben. Ich kann nicht beantworten wie, dass zusammenhängen könnte.
Hallo
Poste den ganzen Sketch gut formatiert und in Code Tags.
#include <mcp_can.h>
#include <mcp_can_dfs.h> //relevant???
#include <Arduino_MachineControl.h>
#include <SPI.h>
#include <arduino-timer.h>
auto timer = timer_create_default();
using namespace machinecontrol;
unsigned char Speicher[1];
int i = 1;
int t = 0; //Fehlerzähler
int Livebit;
#define DATARATE_1MB 1000000
#define DATARATE_500KB 500000
bool Watchdog (void*)
{
switch (i)
{
case 1:
i = 0;
break;
case 0:
i = 1;
break;
}
Speicher[i] = Livebit;
if (Speicher[0] != Speicher[1])
{
t = 0;
}
else
{
t++;
if(t>=10)
{
Serial.print("Feher");
}
}
}
void setup()
{
Serial.begin(9600);
while (!Serial)
{
; // wait for serial port to connect.
}
Serial.println("Start CAN initialization");
comm_protocols.enableCAN();
comm_protocols.can.frequency(DATARATE_500KB);
Serial.println("Initialization done");
timer.every(400, Watchdog);
digital_outputs.setLatch();
}
void loop()
{
mbed::CANMessage msg;
if (comm_protocols.can.read(msg)& msg.id == 256) //Warum 256!!!!!!!
{
Serial.println(msg.data[0]);
Livebit = msg.data[0];
}
timer.tick();
}
Du hast ein Array mit EINEM Feld:
unsigned char Speicher[1];
Array Felder zählt man beginnend mit 0.
Du hast also exakt ein Feld mit Index 0.
hier vergleichst du das Feld 0 mit einem nicht vorhandenem Phantasie-Wert in einem nicht vorhandenem Feld mit Index 1:
Speicher[0] != Speicher[1]
Du greist daher auf etwas zu da es nicht gibt - und an der Speicherstelle kann was ganz anderes stehen.
Vermutlich wird dir auch der Compiler ein Warning werfen - wenn du die Warning-Ausgaben in deinen Einstellungen aktiviert hast - hol' das nach.
P.S.: wenn du dateien includest, dann musst du uns diese auch hochladen oder dazu schreiben, von wo man sich die runterladen kann. Ansonsten kompiliert der Sketch bei uns nicht.
Das läuft auf einem h7 Machine.
Ohne die dazugehörigen Boardinfos wird das nicht kompilieren.
Diese Zeile kommt nicht, wenn t < 10.
Wie sollen wir dir mehr helfen? Da deine Watchdog Funktion nur alle 400 ms dran kommt (?),
kannst du -- nachdem du @noiasca s Tip befolgt hast, und immer noch nicht das passiert was du dir vorstellst -- mehr Serial.print einbauen ...
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.