Probleem met code voor tinkerkit shield

algemene C code
Berichten: 9
Geregistreerd: 15 Mei 2014, 19:20

Probleem met code voor tinkerkit shield

Berichtdoor kennyquintens » 15 Mei 2014, 19:36

Beste medeleden,

Ik heb een probleem met mijn (zeer eenvoudige) code maar dit is de eerste keer dat ik met tinkerkit werk.
De opstelling is als volgt, wanneer er op de drukknop van de frees gedrukt wordt moet de servo van de frees op 90° gaan staan en moeten de led en de afzuiging aan gaan, wanneer er dan nogmaals op die drukknop van de frees wordt gedrukt moet alles weer naar de begin stand gaan (uit).
Dit moet zo ook werken voor de drukknop van de frees, wanneer er gewisseld wordt van frees naar laser moeten enkel de servo's wisselen en de leds natuurlijk maar de afzuiging moet aanblijven, dit werkt nu al.
Het enig probleem is dat ik het moeilijk krijg uitgezet met dezelfde knop, ik moet er een aantal keer heel kort na elkaar op drukken en dan gaat hij af en toe uit. (beide kanten)
Tevens staan mijn servo's niet op 90 maar eerder op 70° en 20°

Code: Alles selecteren
/*************************************************************************************/
/****                                                                                                                                           ****/
/****  # Code wirtten by: Quintens Kenny                                                                                      ****/
/****  # Copyright 2014                                                                                                                ****/
/****                                                                                                                                           ****/
/****  # Sturing voor afzuiging van frees en laser                                                                           ****/
/****                                                                                                                                           ****/
/*************************************************************************************/

#include <TinkerKit.h>                     // include the TinkerKit library
#include <Servo.h>                         // include the servo library


////////////////////////////////////////OUTPUTS////////////////////////////////////////

TKMosFet afzuiging(O0);                    // Toekenning van relay voor afzuiging
TKLed frees(O1);                      // Toekenning van led voor de frees
TKLed laser(O2);                 // Toekenning van led voor de laser
Servo servofrees;                          // Toekenning van servo voor de frees
Servo servolaser;                          // Toekenning van servo voor de laser

////////////////////////////////////////INPUTS/////////////////////////////////////////

TKButton drukknopfrees(I0);                // Toekenning drukknop voor de frees
TKButton drukknoplaser(I1);                // Toekenning drukknop voor de laser

//////////////////////////////////////Variabelen///////////////////////////////////////

int toestand = 0;
int toestandfrees = 0;
int toestandlaser = 0;

///////////////////////////////////////////////////////////////////////////////////////

void setup() {
  Serial.begin(9600);
  servofrees.attach(5);                      // Servo frees toekennen aan pin 5, O4 op sensor shield
  servolaser.attach(3);                      // Servo laset toekennen aan pin 3, O5 op sensor shield
                                       
}

void loop()
{
    if(drukknopfrees.pressed() == HIGH && toestandfrees == 0) {
         toestand = toestand + 1;
       }
    else if(drukknopfrees.pressed() == HIGH && toestandfrees == 1) {
         toestand = 0;
       } 
 
    if(drukknoplaser.pressed() == HIGH && toestandlaser == 0) {
         toestand = toestand - 1;
       }
    else if(drukknoplaser.pressed() == HIGH && toestandlaser == - 1) {
         toestand = 0;
       }   
 
 
    if(toestand == 1) {
  frees.on();                             
  laser.off();
  afzuiging.on();
  servofrees.write(90);
  servolaser.write(0);
  Serial.println("frees");
  //delay(50);
  }
    else if(toestand == -1) {
  frees.off();     
  laser.on();
  afzuiging.on();
  servofrees.write(0);
  servolaser.write(90);
  Serial.println("laser");
  //delay(50);
  }
    else if(toestand == 0) {
  frees.off();
  laser.off();
  afzuiging.off();
  servofrees.write(1000);
  servolaser.write(1000);
  Serial.println("uit");
  //delay(50);
  }
 
 
}

Advertisement

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

Re: Probleem met code voor tinkerkit shield

Berichtdoor nicoverduin » 15 Mei 2014, 21:28

Hoe zijn die knoppen bedraad? Met een pullup? of pull down of helemaal niet?
De servo...tja ik weet niet wat de kwaliteit van die dingen is.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 15 Mei 2014, 19:20

Re: Probleem met code voor tinkerkit shield

Berichtdoor kennyquintens » 16 Mei 2014, 13:27

Het zijn de standaard tinkerkit knopjes
En de Servos komen van bij een rc shop en kosten toch wat € per stuk.

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

Re: Probleem met code voor tinkerkit shield

Berichtdoor nicoverduin » 16 Mei 2014, 19:37

Ik zou de servo gewoon eens testen los van alles en dan van 0-180 graden laten lopen. Dan kan je uitsluiten dat de Servo goed. Dure servo's zegt niets......
Idem voor de knopjes.... Ik ken de libraries van de tinkerkit niet (en gezien de prijs zal dat wel nooit gebeuren). Het zou kunnen dat er geen opvang in de library is voor het "trillen" van de contacten binnen in de schakelaar.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 15 Mei 2014, 19:20

Re: Probleem met code voor tinkerkit shield

Berichtdoor kennyquintens » 16 Mei 2014, 21:26

De servo's zijn van RC plus, type rcd 625b, maar zal deze morgen eens testen zoals je zegt.
en de knopjes werken als ik me het nog goed voorstel met pull downs maar hier zit een inwendige struing op, de ingang krijgt 5v als er gedrukt wordt, uitleg op deze pagina http://www.tinkerkit.com/button/

alvast bedankt voor de reactie

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

Re: Probleem met code voor tinkerkit shield

Berichtdoor nicoverduin » 17 Mei 2014, 08:01

ff die Tinkerkit library bekeken. Maar volgens mij moet je eerst een update() voor die buttons uitvoeren voordat de juiste waarde wordt gezet.
dus bijv:

Code: Alles selecteren
drukknopfrees.update();


Als eerste in de loop. Idem voor de laser.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 15 Mei 2014, 19:20

Re: Probleem met code voor tinkerkit shield

Berichtdoor kennyquintens » 17 Mei 2014, 19:20

Beste,
alvast bedankt.

Ik heb het geprobeerd met de .update functie maar krijg dan een foutmelding dus vermoed dat het geen geldige functie is.
Tevens heb ik de servo's geprobeerd met volgende code:

Code: Alles selecteren
// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.


#include <Servo.h>
 
Servo myservo;  // create servo object to control a servo
                // a maximum of eight servo objects can be created
 
int pos = 0;    // variable to store the servo position
 
void setup()
{
  myservo.attach(3);  // attaches the servo on pin 9 to the servo object
}
 
 
void loop()
{
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees
  {                               
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}


bij deze code werken ze perfect, maar wanneer ik ze in mijn code inlaad doen ze niks bij de waardes 0 en 180 ik moet ze vervangen door 90 en 1000 maar dan bewegen ze slechts een 30tal °

Tevens nog een klein beetje aangepast aan de code maar nog steeds gaan ze niet uit.
Code: Alles selecteren
/*************************************************************************************/
/****                                                                             ****/
/****  # Code wirtten by: Quintens Kenny                                          ****/
/****  # Copyright 2014                                                           ****/
/****                                                                             ****/
/****  # Sturing voor afzuiging van frees en laser                                ****/
/****                                                                             ****/
/*************************************************************************************/

#include <TinkerKit.h>                     // include the TinkerKit library
#include <Servo.h>                         // include the servo library


////////////////////////////////////////OUTPUTS////////////////////////////////////////

TKMosFet afzuiging(O0);                    // Toekenning van relay voor afzuiging
TKLed frees(O1);                      // Toekenning van led voor de frees
TKLed laser(O2);                 // Toekenning van led voor de laser
Servo servofrees;                          // Toekenning van servo voor de frees
Servo servolaser;                          // Toekenning van servo voor de laser

////////////////////////////////////////INPUTS/////////////////////////////////////////

TKButton drukknopfrees(I0);                // Toekenning drukknop voor de frees
TKButton drukknoplaser(I1);                // Toekenning drukknop voor de laser

//////////////////////////////////////Variabelen///////////////////////////////////////

int toestand = 0;
int toestandfrees = 0;
int toestandlaser = 0;
int aan = 90;
int uit = 1000;

///////////////////////////////////////////////////////////////////////////////////////

void setup() {
  Serial.begin(9600);
  servofrees.attach(5);                      // Servo frees toekennen aan pin 5, O4 op sensor shield
  servolaser.attach(3);                      // Servo laset toekennen aan pin 3, O5 op sensor shield
                                       
}

void loop()
{
 
    if(drukknopfrees.pressed() == HIGH && toestandfrees == 0) {
         toestand = toestand + 1;
       }
    else if(drukknopfrees.pressed() == HIGH && toestandfrees == 1) {
         toestand = 0;
       } 
 
    if(drukknoplaser.pressed() == HIGH && toestandlaser == 0) {
         toestand = toestand - 1;
       }
    else if(drukknoplaser.pressed() == HIGH && toestandlaser == - 1) {
         toestand = 0;
       }   
 
 
    if(toestand == 1) {
  toestandfrees = 1;
  frees.on();                             
  laser.off();
  afzuiging.on();
  servofrees.write(aan);
  servolaser.write(uit);
  Serial.println("frees");
  //delay(50);
  }
    else if(toestand == -1) {
  toestandlaser = - 1;
  frees.off();     
  laser.on();
  afzuiging.on();
  servofrees.write(uit);
  servolaser.write(aan);
  Serial.println("laser");
  //delay(50);
  }
    else if(toestand == 0) {
  toestandfrees = 0;
  toestandlaser = 0;
  frees.off();
  laser.off();
  afzuiging.off();
  servofrees.write(uit);
  servolaser.write(uit);
  Serial.println("uit");
  //delay(50);
  }
 
 
}


alvast bedankt,
Kenny.

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

Re: Probleem met code voor tinkerkit shield

Berichtdoor shooter » 17 Mei 2014, 19:46

aan = 90 en uit is dan of 180 of 0 graden en geen 1000
het is veel slimmer om als je op een toets drukt gewoon de frees aan te zetten en een aparte stopknop.
dus drukknopfrees is toestandfrees=1
als stop dan toestandfrees=0
als je hem nu langer vasthoudt dan 50 ms, is 20 Hz dan kom je ergens terecht , maar niet bij stop

verder moet je al die delays eruitkiepen, want die servos vragen telkens om aandacht en delay stopt gewoon je programma.
Een servo moet heel vaak op de juiste stand gezet worden (20 ms) want anders loopt deze naar nul. maar dat ligt aan de software.


maak van je drukknoppen een aparte sub en van je
paul deelen
shooter@home.nl

Berichten: 9
Geregistreerd: 15 Mei 2014, 19:20

Re: Probleem met code voor tinkerkit shield

Berichtdoor kennyquintens » 17 Mei 2014, 19:59

beste bedankt voor de reactie maar het moet gebeuren met een drukknop voor elk apparaat, ik weet dat het mogelijk is want heb dat ooit gedaan maar ik weet niet meer hoe.
en de servo's ik weet dat het werkt met 0 en 180 maar dan doet hij niks enkel als ik dit op 90 en 1000 zet zoals in voorgaande reactie vermeld.
De delay's staan allemaal uit, die zijn als description gezet => // die waren enkel om de serialmonitor te gebruiken.

Berichten: 9
Geregistreerd: 15 Mei 2014, 19:20

Re: Probleem met code voor tinkerkit shield

Berichtdoor kennyquintens » 27 Mei 2014, 22:13

Heb mijn code terug aangepast, ze doet het nu volledig op een kleinigheidje na.

Het probleem wat ik nu nog heb is dat de code sneller loopt dan je het knopje kan indrukken en loslaten, ik heb hiervoor een counter ingeprogrammeert maar dan zit je met het probleem dat het knopje niet werkt wanneer deze counter aan het tellen is.
Ik weet dat er een andere manier was, maar hoe ging dit weer?

alvast bedankt.

Code: Alles selecteren
/*************************************************************************************/
/****                                                                             ****/
/****  # Code wirtten by: Quintens Kenny                                          ****/
/****  # Copyright 2014                                                           ****/
/****                                                                             ****/
/****  # Sturing voor afzuiging van frees en laser                                ****/
/****                                                                             ****/
/*************************************************************************************/

#include <TinkerKit.h>                     // include the TinkerKit library
#include <Servo.h>                         // include the servo library


////////////////////////////////////////OUTPUTS////////////////////////////////////////

TKMosFet afzuiging(O0);                    // Toekenning van relay voor afzuiging
TKLed frees(O1);                      // Toekenning van led voor de frees
TKLed laser(O2);                 // Toekenning van led voor de laser
Servo servofrees;                          // Toekenning van servo voor de frees
Servo servolaser;                          // Toekenning van servo voor de laser

////////////////////////////////////////INPUTS/////////////////////////////////////////

const int drukknopfrees(I0);                // Toekenning drukknop voor de frees
const int drukknoplaser(I1);                // Toekenning drukknop voor de laser

//////////////////////////////////////Variabelen///////////////////////////////////////

int toestand = 0;
int freesteller = 0;
int laserteller = 0;
int toestandfrees = 0;
int toestandlaser = 0;
int aan = 10;
int uit = 110;

///////////////////////////////////////////////////////////////////////////////////////

void setup() {
  Serial.begin(9600);
  servofrees.attach(5);                      // Servo frees toekennen aan pin 5, O4 op sensor shield
  servolaser.attach(3);                      // Servo laset toekennen aan pin 3, O5 op sensor shield
                                       
}

void loop()
{
 
  toestandfrees = digitalRead(drukknopfrees);
  toestandlaser = digitalRead(drukknoplaser);
 
 
  if(toestandfrees == HIGH && freesteller == 0 && toestand == 0) {
    freesteller = freesteller + 1;
  }   
  else if(toestandlaser == HIGH && laserteller == 0 && toestand == 0) {
    laserteller = laserteller + 1;
  }   
  else if(toestandfrees == HIGH && freesteller == 1 && toestand == 0) {
    freesteller = freesteller - 1;
  }   
  else if(toestandlaser == HIGH && laserteller == 1 && toestand == 0) {
    laserteller = laserteller - 1;
  } 

 
  if(freesteller == 1) { 
    afzuigingfrees(); 
  }
  else if(laserteller == 1) {                       
    afzuiginglaser(); 
  }
  else if(freesteller == 0 || laserteller == 0) {                       
    afzuiginguit(); 
  }
 
  toestand = toestand + 1;
 
  if(toestand == 40){
    toestand = 0;
  }
}


 
  void afzuigingfrees() {
    //toestandfrees = 1;
    frees.on();                             
    laser.off();
    afzuiging.on();
    servofrees.write(aan);
    servolaser.write(uit);
    Serial.println("frees");
    //delay(50);
  }
 
 
  void afzuiginglaser() {
    //toestandlaser = - 1;
    frees.off();     
    laser.on();
    afzuiging.on();
    servofrees.write(uit);
    servolaser.write(aan);
    Serial.println("laser");
    //delay(50);
  }
 
 
  void afzuiginguit() {
    //toestandfrees = 0;
    //toestandlaser = 0;
    frees.off();
    laser.off();
    afzuiging.off();
    servofrees.write(uit);
    servolaser.write(uit);
    Serial.println("uit");
    //delay(50);
  }
 
 

Volgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 18 gasten