hulp bij het programmeren

Arduino specifieke Software
Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: hulp bij het programmeren

Berichtdoor nicoverduin » 29 Okt 2013, 22:24

Dan wordt je code ietsje anders (3 statements veranderd)

Code: Alles selecteren
//
// pulse definitions
//
#define PULSEONTIME      150      // 250 milliseconds ON time
#define PULSEOFFTIME   150      // 250 milliseconds OFF time

//
// pin definitions : 3 groups of 3 switches makes processing easier
//

#define  SWITCH1_GROUP1      2   // Button 1 voor Groep 1
#define  SWITCH2_GROUP1      3   // Button 2 voor Groep 1
#define  SWITCH3_GROUP1      4   // Button 3 voor Groep 1
#define  SWITCH1_GROUP2      5   // Button 4 voor Groep 2
#define  SWITCH2_GROUP2      6   // Button 5 voor Groep 2
#define  SWITCH3_GROUP2      7   // Button 6 voor Groep 2
#define  SWITCH1_GROUP3      8   // Button 7 voor Groep 3
#define  SWITCH2_GROUP3      9   // Button 8 voor Groep 3
#define  SWITCH3_GROUP3      10   // Button 9 voor Groep 3
#define    PULSE1            11   // Pulse score 1
#define  PULSE2            12   // Pulse Score 2
#define  PULSE3            13  // Pulse score 3

//
// global vaiables
//
//
// put the switches in an array, makes processing easier
//
unsigned int switchArray[3][3] = {   { SWITCH1_GROUP1,SWITCH2_GROUP1, SWITCH3_GROUP1 },
                           { SWITCH1_GROUP2,SWITCH2_GROUP2, SWITCH3_GROUP2 },
                           { SWITCH1_GROUP3,SWITCH2_GROUP3, SWITCH3_GROUP3 } };
//
// put the pulse outputs in an array, makes processing easier
//
unsigned int pulseArray[3] =  { PULSE1, PULSE2, PULSE3 };
//
// switch states
//
bool switchState[3];         // false = switch is released, true switch is set
/**
 * @name readSwitches(unsigned int group)
 * @param group determines which group needs to be tested
 * @returns switchNumber index 0-2 or -1 if not pressed
 * reads the switches of one group. if 2 buttons are pressed at the same time, the button pressed with the lowest
 * index is taken. if no switch is pressed,
 */
int readSwitches(unsigned int group) {

   int switchNumber = -1;            // no switch pressed is default
   //
   // test if switch in group is pressed
   //
   for (unsigned int i = 0; i < 3; i++) {
      //
      // check each switch
      //
      if (digitalRead(switchArray[group][i]) == HIGH) {
         //
         // check if we can process this switch
         //
         if (switchState[group] == false) {
            //
            // save switch number
            //
            switchNumber = i;
            //
            // set switch state
            //
            switchState[group] = true;
            //
            // and exit loop
            //
         }
         break;
      }
   }

   //
   // check if a switch was pressed or allowed
   //
   if (switchNumber == -1) {
      //
      // check if all switches are released
      //
      unsigned int i;
      for (i = 0; i < 3; i++) {
         if (digitalRead(switchArray[group][i]) == HIGH) {
            //
            // still a switch pressed so may as wel exit loop
            //
            break;
         }
      }
      if (i == 3) {
         //
         // all switches are released otherwise i would never become 3
         //
         switchState[group] = false;
      }
   }
   return switchNumber;            // return value back to caller
}

/**
 * @name processSwitches(unsigned int group, unsigned int button)
 * @param group   group currently in process
 * @param button switch which was process
 */
void processSwitches(unsigned int group, unsigned int button) {

   unsigned int pulseCnt;         // number of pulses to generate

   //
   // determine the number of pulses needed based on button value.
   // as the index = 0-2 so the below formula is the easyway
   //
   pulseCnt = (button * 5) + 5;
   //
   // send the pulses out to the score board
   //
   for (unsigned int i= 0; i < pulseCnt; i++) {
      //
      // pulse on
      //
      digitalWrite(pulseArray[group], HIGH);
      //
      // wait pulse time on
      //
      delay(PULSEONTIME);
      //
      // pulse off
      //
      digitalWrite(pulseArray[group], LOW);
      //
      // wait pulse off time
      //
      delay(PULSEOFFTIME);
   }
}
/**
 * @name setup()
 * initializes the sketch once by power on or Reset
 */
void setup()
{
   //
   // set pin modes input
   //
   // 3 groups
   //
   for (unsigned int i = 0; i < 3; i++) {
      //
      // with each 3 inputs
      //
      for (unsigned int j = 0; j < 3; j++){
         //
         // switches must have pull down resistors on data pin (say 10K) to avoid floating input
         //
         pinMode(switchArray[i][j], INPUT);
      }
      //
      // and the corresponding output
      //
      pinMode(pulseArray[i], OUTPUT);
      //
      // reset switch states
      //
      switchState[i] = false;
   }
}

/**
 * @name loop()
 * loop functions is called continuously
 */
void loop()
{
   int button;            // determines which switch is pushed

   //
   // process per group
   //
   for (unsigned int i = 0; i < 3; i++){
      //
      // get the switch value
      //
      button = readSwitches(i);
      //
      // if a switch was pushed, process it
      //
      if (button != -1) {
         processSwitches(i, button);
      }
   }
}

Vergeet je niet om een weerstand van 10K oid (niet te groot en niet te klein qua waarde) tussen GND en de datapin te doen bij de schakelaars. anders wordt de knop ingang onvoorspelbaar. Met de weerstand trek je de ingang LOW als de schakelaar open staat.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

Berichten: 7
Geregistreerd: 27 Okt 2013, 14:30
Woonplaats: Turnhout

Re: hulp bij het programmeren

Berichtdoor joris1975 » 30 Okt 2013, 19:14

Hey nico, heb het gedaan hoe je zei met dat ledje heb gewoon de + en de min omgedraaid bij de schakelaars en het ledje deed het 5x, 10x, 15x. dus terug getest met de tellers. En daar deed die het niet dus wat ga ik nu doen is de uitgangen aan een relais zetten met voorzet transistor en deze dan aansturen. Ik laat nog iets weten hopelijk tegen half volgende week als ik de onderdelen heb en gesoldeerd laat ik het hier weten. Kun je hier ook filpjes plaatsen? als het zo is zet ik hier een filmpje aals alles behoorlijk werkt ;-)

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: hulp bij het programmeren

Berichtdoor nicoverduin » 30 Okt 2013, 19:33

Heb je geen specificaties van die tellers?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 7
Geregistreerd: 27 Okt 2013, 14:30
Woonplaats: Turnhout

Re: hulp bij het programmeren

Berichtdoor joris1975 » 17 Nov 2013, 17:47

hoi nico,

het werkt hier is de link om het filmpje te bekijken hopelijk zie je het.
tis een deel maar het werkt het resterende filmpje van de 3 borden krijg je achteraf

many many thx

https://www.facebook.com/photo.php?v=10 ... _processed

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: hulp bij het programmeren

Berichtdoor nicoverduin » 17 Nov 2013, 19:24

Hij zegt dat de inhoud niet beschikbaar is. Maar geeft niet... Het werkt en dat is het belangrijkste :)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ajuzegaj en 17 gasten