hulp bij het afmaken van een timmer in state functie

algemene C code
Berichten: 2
Geregistreerd: 13 Mrt 2021, 14:21

hulp bij het afmaken van een timmer in state functie

Berichtdoor vectrapower » 05 Dec 2021, 21:44

beste leden,

op dit moment ben ik bezig met een programma waarbij ik met case werk. het programma werkt voor zover alleen wil ik er een timer in maken dat wanneer de rode led aan is voor 5 seconden en dat hij dan naar groen gaat dat groen uit gaat en dan pas na 1 seconden de rode aan gaat , zoiets als nu hebben als we auto rijden. ik werk met 2 arduino een master en slave die met elkaar communiceren om te kijken wat de status is van de led die hun zijn.

ik zal mijn code hier posten advies of aanpassingen zal ik zeer blij mee zijn

Code: Alles selecteren
#include <Arduino.h>

#include <TimerOne.h>

#include "traffic_light.h"
#include "traffic_slave_serial.h"

const int greenLightPin = 6;
const int redLightPin = 7;

int Prev_State;
unsigned long previousMillis = 0;
long OnTime = 250;           // milliseconds of on-time
long OffTime = 750;          // milliseconds of off-time
long interval = 1000;           // interval at which to blink (milliseconds)

#define MESSAGE_START ('#')
#define MESSAGE_STOP (';')
#define TIME_Traffic_light_state (3000)

bool (*sendRequestAndCheckReply)(char*mes);

typedef enum {
     MASTER_SLAVE_CONNECTING,
     MASTER_DRIVING_ALLOWED,
     SLAVE_DRIVING_ALLOWED,
     NOT_DRIVING_ALLOWED, 
 } Traffic_light_state;


int  currentState = MASTER_SLAVE_CONNECTING;

int Master_Slave_Connecting_Begin()
{
    char buf [20] = "BEAT";
    bool voltooid = sendRequestAndCheckReply(buf);
    Serial.print(buf);
    Serial.print("........");
    Serial.println(voltooid ? "ack": "nack");
    if (voltooid)
    {
        currentState = MASTER_DRIVING_ALLOWED;
        return currentState;
    }
    else
    {
        return currentState;
    }
}
   




    int Master_Slave_RED(int state)
    {
   
    {
    char doneRed [20] = "RED";
    bool voltooid = sendRequestAndCheckReply(doneRed);
    Serial.print(doneRed);
    Serial.print("........");
    Serial.println(voltooid ? "ack": "nack");
    traffic_light_set_color(RED);
   
    }
    if (state == MASTER_DRIVING_ALLOWED)
    {
        currentState = SLAVE_DRIVING_ALLOWED;
    }
    if (state == SLAVE_DRIVING_ALLOWED)
    {
        currentState = MASTER_DRIVING_ALLOWED;
    }
    return currentState;
    }
   




int Slave_Green_Light_Begin()
{
 
    {
      char doneGreen[20] = "GREEN";
      bool voltooid = sendRequestAndCheckReply(doneGreen);
      Serial.print(doneGreen);
      Serial.print("........");
      Serial.println(voltooid ? "ack": "nack");
      if (voltooid)
      {
      traffic_light_set_color(RED);
      startmillis=millis();
     
    }
    else
    {
        currentState = MASTER_SLAVE_CONNECTING;
        return currentState;
    }
        currentState  = NOT_DRIVING_ALLOWED;
        Prev_State = SLAVE_DRIVING_ALLOWED;
         return currentState ;
    }
}




   
int Master_Green_Light_Begin()
{
   
 
    {
      char donered[20] = "RED";
      bool voltooid = sendRequestAndCheckReply(donered);
      Serial.print(donered);
      Serial.print("........");
      Serial.println(voltooid ? "ack": "nack");
      if (voltooid)
      {
      traffic_light_set_color(GREEN);
     
    }
    else
    {
        currentState = MASTER_SLAVE_CONNECTING;
        return currentState;
    }
        currentState  = NOT_DRIVING_ALLOWED;
        Prev_State = MASTER_DRIVING_ALLOWED;
         return currentState ;
    }
}



 void startmilis()
  unsigned long currentMillis = millis();
{
  if(currentMillis - previousMillis > interval) {


    // save the last time you blinked the LED
    previousMillis = currentMillis;   

  }
}



/*----------------------------------------------------------------*/
/*     SETUP                                                      */
/*----------------------------------------------------------------*/
void setup()
{
Serial.begin(9600);
Serial.println("master gestard");
traffic_slave_serial_begin(MESSAGE_START,MESSAGE_STOP);
sendRequestAndCheckReply = traffic_slave_serial_sendRequestAndCheckReply;
traffic_light_begin(greenLightPin, redLightPin);
Timer1.initialize(500000000);
}




/*----------------------------------------------------------------*/
/*     LOOP                                                       */
/*----------------------------------------------------------------*/

void loop()
{
switch (currentState)
{
    case  MASTER_SLAVE_CONNECTING: // case 1
    Master_Slave_Connecting_Begin();
   
    break;

    case MASTER_DRIVING_ALLOWED: // case 2
    Master_Green_Light_Begin();
     
    break;

    case SLAVE_DRIVING_ALLOWED: // case 3
    Slave_Green_Light_Begin();
     
    break;

    case NOT_DRIVING_ALLOWED: // case 4
    Master_Slave_RED(Prev_State);
     
    break;
}
}



Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: hulp bij het afmaken van een timmer in state functie

Berichtdoor shooter » 06 Dec 2021, 20:55

wat meer commentaar is handig, en bijvoorbeeld connecting is niet state 1 echter is dat state 0
en dan snap ik de code niet meer door het gebrek aan commentaar en je gebruikt een library, maar die staat niet beschreven dus dan is het een grote puzle.
paul deelen
shooter@home.nl

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: hulp bij het afmaken van een timmer in state functie

Berichtdoor ctunes » 20 Dec 2021, 01:52

Code: Alles selecteren
switch (currentState)


Waar komt currentState vandaan?

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten