Da sind noch so einige Ungereimtheiten Ferdinand
Schönheitsrepartur:
Du hast eine "Forward Deklaration" für die Funktion
clickedIt() gemacht.
das benötigst Du normalerweise nicht.
Deine Funktion clickedIt()
muss einfach ganz nach oben hin.
Dann rufst Du die Funktion mit void auf,
staune das er da nicht meckert, sieht auf jeden Fall ungewöhnlich aus....
Also den Aufruf der Funktion bitte ohne void
wie das mit den buttons genau funktioniert weis ich nicht,
aber ich vermute mal, dass durch den Aufruf von
button.attachClick(clickedIt); in der Setup Funktion
bei einem Tastendruck automatisch die entsprechende Funktion aufgerufen wird.
somit darfst Du dann nicht mehr zusätzlich clickedIt in deinef Loop aufrufen.
Vermutlich musst Du nur immer wieder die Funktion
button.tick(); in deiner Schleife aufrufen.
Da steck ich aber im Detail nicht drin, das ist nur eine Vermutung von mir.
In der eigentlichen Hauptschleife, das scheint ja die Loop zu sein
setzt Du am Anfang deine beiden Motorbits auf High
dann folgt deine Abfrage Drehrichtung und dort setzt Du die Motorbits entsprechend,
danach landet aber die Software wieder oben und setzt die Motorsignale wieder beide auf High.
damit werden alle 200ms deine Signale beide High, das gibt so nicht wirklich Sinn.
Wie dem auch sei,
ich hab mal einiges umgebaut,
ich kann das weder compilieren noch testen,
das soll lediglich ein Anhaltspunkt sein
wie man es vermutlich machen kann:
-------------
Code:
#include "OneButton.h"
#define MOTOR_1 A2
#define MOTOR_2 A4
#define POTI A0
#define PWM 9
#define TASTER 5
#define LED 3
OneButton button(TASTER, true); // wird hier eine Instanz eines Buttons kreiert ??
int poti_prozent = 0;
bool sicherheit = 1;
bool Drehrichtung = true;
//-------------------------------------------------------
// das ist vermutlich die Funktion die automatisch aufgerufen wird
// was Du durch button.attachClick(clickedIt); festgelegt hast.
// Dies Funktion muss vermutlich nie wieder aufgerufen werden.
void clickedIt()
{
Drehrichtung = ! Drehrichtung;
}
//-------------------------------------------------------
// hier wird die LED entsprechend der Drehrichtung gesetzt
// und die beiden benötigten Motorbits entsprechend der Richtung
void SetDirection(void)
{
if (Drehrichtung) // rechts
{
digitalWrite(LED, LOW); // LED Rechts
digitalWrite(MOTOR_1, LOW); // Motor rechts
digitalWrite(MOTOR_2, HIGH);
}
else // links
{
digitalWrite(LED, HIGH; // LED Links
digitalWrite(MOTOR_1, HIGH); // Motor links
digitalWrite(MOTOR_2, LOW);
}
}
//-------------------------------------------------------
// Motor Geschwindigkeit setzen
void SetSpeed(void)
{ int poti_Value ;
poti_Value = analogRead(POTI); // Potiwert lesen
poti_prozent = map(poti_Value, 0,1023, 0,100); // umrechnen
analogWrite(PWM, poti_Value / 4); // Pulsbreite setzen
}
//-------------------------------------------------------
// alle 500ms, also 2 mal pro Sekunde, sollen die Werte ueber die RS232 gesendet werden
void SendData(void)
{ static int tim;
delay(10); // eine definierte Zeit warten, ich nehm mal 10ms
if (tim++ < 50) return; // wenn Zeit kleiner als 500ms , dann nichts tun
tim=0; // ansonsten Zeitwert wieder auf 0 setzen und senden
// Die Drehrichtung senden
Serial.print("Richtung : ");
if (Drehrichtung) Serial.println("rechts");
else Serial.println("links");
// Den Potiwert in Prozent senden
Serial.print("Poti = ");
Serial.print(poti_prozent);
Serial.println("% ");
}
//-------------------------------------------------------
void setup()
{
pinMode(LED , OUTPUT);
pinMode(MOTOR_1, OUTPUT);
pinMode(MOTOR_2, OUTPUT);
pinMode(PWM , OUTPUT);
pinMode(TASTER , INPUT);
pinMode(TASTER,INPUT_PULLUP); // den braucht man eventuell
button.attachClick(clickedIt); // Die Click Funktion setzen
Serial.begin(9600); // RS232 initialisieren
// deine Startup Funktion lass ich mal so stehen, wie sie war.....
poti_prozent = 4;
while( poti_prozent >= 3 )
{
digitalWrite(MOTOR_1, HIGH);
digitalWrite(MOTOR_2, HIGH);
digitalWrite(LED, HIGH);
delay(300); poti_Value = analogRead(POTI);poti_prozent = map(poti_Value, 0,1023, 0,100);
digitalWrite(LED, LOW);
delay(300);
}
}
//---------------------------------------
// Die Hauptschleife ist nun etwas übersichtlicher geworden:
void loop()
{
button.tick();
SetDirection();
SetSpeed();
SendData();
}
Lesezeichen