Lift met 3 etages

Beste Arduino specialisten
Daar ik geen noties heb van Engels en nu te oud om te leren (70 j) richt ik mij tot jullie in het nederlands
Ik zou graag een Lift besturing maken met Arduino Uno (zie URL hieronder)
http://wikimanuals.edutictac.es/index.php?title=Es:Ascensor_de_3_plantes_amb_S4A

'k heb dat gemaakt, de Code Geünzipt en geupload met succes dus geen foutmelding maar het werkt niet Er komt geen signaal uit pin 10 en pin 11 langs de Digitale kant met oscilloscoop getest.
Zou dat aan de instelling aan het moedebord van Arduino Uno kunnen liggen ??
Zou er mij iemand kunnen helpen aub jullie zouden er mij een zeer groot plezier mee doen
Alvast bedankt

Beste Arduino specialisten

Daar ik geen noties heb van Engels en nu te oud om te leren (70 j)richt ik mij tot jullie in het nederlands
Ik zou graag een Lift besturing maken met Arduino Uno (zie URL hieronder)

http://wikimanuals.edutictac.es/index.php?title=Es:Ascensor_de_3_plantes_amb_S4A

'k heb dat gemaakt, de Code Geünzipt en geupload met succes dus geen foutmelding maar het werkt niet Er komt geen signaal uit pin 10 en pin 11 langs de Digitale kant met oscilloscoop getest.
deze schakeling werk wel als ik +5 volt steek op pin 10 van ic L293D motor draait rechts en Groen Led brand, 5V op pin 15 draait motor links en rood Led brand dus tot daar alles OK
Zou dat aan de instelling aan het moedebord van Arduino Uno kunnen liggen ??
Zou er mij iemand kunnen helpen aub jullie zouden er mij een zeer groot plezier mee doen

Alvast bedankt

Hoi wattijn, welkom.

Ik twijfel er niet aan dat de 2e, identieke post binnenkort zal verdwijnen.
Het helpt niet als je je vraag herhaalt, dat vergroot alleen de kans dat je niet geholpen word (omdat het lijkt alsof je begint te zeuren).

Te oud om te leren, daar ben ik het niet helemaal mee eens.
Ook niet als iemand 70 of ouder is.
Maar goed, we hebben dit Nederlandstalige deel voor dit soort gevallen.

Ik snap dat je graag een kant en klaar projectje wil namaken, die verleiding is uiteraard ook groot.
Het probleem met dat soort sites (instuctables is daar het lichtende voorbeeld van, de site waar jij dit gevonden hebt kan er ook wat van), is dat ze niet doen wat ze beloven.
Als ik naar het "schema" op die pagina kijk, dan kan dat gedrocht hier rechtstreeks naar de wall of shame (klik !) gekopieerd worden.
Helaas ben ik de Spaanse taal niet machtig en kan dus niet volgen wat er daar verder gebeurt.
Maar gezien de hoeveelheid informatie die er daar te vinden is, is het gewoon een pagina á la insctructables:
"Als je dit en dat doet, zal het resultaat een machine opleveren die je wereldheerschappij (of, in het geval van "Contact" een transport systeem naar een andere door intelligente wezens bewoonde planeet) zal brengen.

Alleen word er niet uitgelegd wat er gedaan word, en als het niet werkt, zoek je her maar lekker uit.
Tot zo ver dus het "educatieve" gedeelte.

Ik zie de sketch niet staan, vermoed dat een van de links aldaar naar de sketch leidt.
Plaats de code die je hebt in deze thread, om er van iemand commentaar op te kunnen krijgen.
Doe dat dan tussen tags.

Ik ben het Spaans ook niet machtig en ik heb ook men bedenkingen bij het schema.
Het schema heeft 6 drukknoppen (4 voor buiten en 2 in de lift) van het type pull-up (pull down is veel beter) en 1 motor (met motorchip) om de lift te bewegen. En 2 leds om de draai richting van de motor te zien.
Hoe de lift moet weten waar ze is, is mij een raadsel.

Al bij al een vrij simpel projectje dat voor een beginner vrij snel haalbaar moet zijn. Vrij snel is wel een rekbaar begrip omdat veel afhangt van wat je al in de vingers hebt, maar reken zowiezo dat je minstens een maandje plezier zal hebben.
Ik zou in deze aanraden om eerst naar de arduino meegeleverde voorbeeld programmatjes te kijken.
Zoals blink dan "blink without delay" en die dan eens aan te passen zodat de blink enkel werkt als je op een knop drukt.
Als je dat helemaal zelf voor elkaar krijgt ben je al heel ver.
Met vriendelijke groet
Jantje

Hey Mas3

Sorry dat mijn vraag 2 maal geplaatst is dat was zeker mijn bedoeling niet kan echt niet zeggen wat er is mis gelopen ,zal in het vervolg beter opletten
Ook bedankt voor uw antwoord

Hey Jantje

Ook bedankt voor uw uitleg Zal eerst eens die bijgeleverde motorsturing maken en dan zien om uit te breiden

Dank jullie

Wattijn

Beste dit is de code om de lift te bediennen

#include <Bridge.h>
#include <BridgeClient.h>
#include <BridgeServer.h>
#include <BridgeUdp.h>
#include <Console.h>
#include <FileIO.h>
#include <HttpClient.h>
#include <Mailbox.h>
#include <Process.h>
#include <YunClient.h>
#include <YunServer.h>

// NEW IN VERSION 1.4:
// Changed Serial.print() for Serial.write() in ScratchBoardSensorReport function to make it compatible with latest Arduino IDE (1.0)

// NEW IN VERSION 1.3:
// Now it works on GNU/Linux. Also tested with MacOS and Windows 7.
// timer2 set to 20ms, fixing a glitch that made this period unstable in previous versions.
// readSerialport() function optimized.
// pulse() modified so that it receives pulse width as a parameter instead using a global variable.
// updateServoMotors changes its name as a global variable had the same name.
// Some minor fixes.

// Thanks to Jorge Gomez for all these new fixes!

#define TIMER2_PRELOAD 100

char outputs[6];
int states[6];

unsigned long initialPulseTime;
unsigned long lastDataReceivedTime;

volatile boolean updateServoMotors;
volatile boolean newInterruption;

void setup()
{
Serial.begin(38400);
Serial.flush();
configurePins();
configureServomotors();
lastDataReceivedTime = millis();
}

void loop()
{
if (updateServoMotors)
{
sendUpdateServomotors();
sendSensorValues();
updateServoMotors = false;
}
else
{
readSerialPort();
}
}

void configurePins()
{
for (int index = 0; index < 6; index++)
{
states[index] = 0;
pinMode(index + 8, OUTPUT);
digitalWrite(index + 8, LOW); //reset pins
}

pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);

outputs[0] = 's'; //pin 8
outputs[1] = 'a'; //pin 9
outputs[2] = 'd'; //pin 10
outputs[3] = 'd'; //pin 11
outputs[4] = 'd'; //pin 12
outputs[5] = 'd'; //pin 13
}

void configureServomotors() //servomotors interruption configuration (interruption each 10 ms on timer2)
{
newInterruption = false;
updateServoMotors = false;

TCCR2A = 0;
TCCR2B = 1 << CS22 | 1 << CS21 | 1 << CS20;
TIMSK2 = 1 << TOIE2; //timer2 Overflow Interrupt
TCNT2 = TIMER2_PRELOAD; //start timer
}

void sendSensorValues()
{
int sensorValues[6], readings[5], sensorIndex;
for (sensorIndex = 0; sensorIndex < 6; sensorIndex++) //for analog sensors, calculate the median of 5 sensor readings in order to avoid variability and power surges
{
for (int p = 0; p < 5; p++)
readings[p] = analogRead(sensorIndex);
InsertionSort(readings, 5); //sort readings
sensorValues[sensorIndex] = readings[2]; //select median reading
}

//send analog sensor values
for (sensorIndex = 0; sensorIndex < 6; sensorIndex++)
ScratchBoardSensorReport(sensorIndex, sensorValues[sensorIndex]);

//send digital sensor values
ScratchBoardSensorReport(6, digitalRead(2) ? 1023 : 0);
ScratchBoardSensorReport(7, digitalRead(3) ? 1023 : 0);
ScratchBoardSensorReport(8, digitalRead(4) ? 1023 : 0);
ScratchBoardSensorReport(9, digitalRead(5) ? 1023 : 0);
ScratchBoardSensorReport(10, digitalRead(6) ? 1023 : 0);
ScratchBoardSensorReport(11, digitalRead(7) ? 1023 : 0);
}

void InsertionSort(int* array, int n)
{
for (int i = 1; i < n; i++)
for (int j = i; (j > 0) && ( array[j] < array[j - 1] ); j--)
swap( array, j, j - 1 );
}

void swap (int* array, int a, int b)
{
int temp = array[a];
array[a] = array**;**
__ array = temp;__
}
void ScratchBoardSensorReport(int sensor, int value) //PicoBoard protocol, 2 bytes per sensor
{
** Serial.write( B10000000**
** | ((sensor & B1111) << 3)**
** | ((value >> 7) & B111));**
** Serial.write( value & B1111111);**
}
void readSerialPort()
{
** int pin, inByte, sensorHighByte;**
** if (Serial.available() > 1)**
** {**
** lastDataReceivedTime = millis();**
** inByte = Serial.read();**
** if (inByte >= 128) // Are we receiving the word's header?**
** {**
** sensorHighByte = inByte;**
** pin = ((inByte >> 3) & 0x0F);**
** while (!Serial.available()); // Wait for the end of the word with data**
** inByte = Serial.read();**
** if (inByte <= 127) // This prevents Linux ttyACM driver to fail**
** {**
** states[pin - 8] = ((sensorHighByte & 0x07) << 7) | (inByte & 0x7F);**
** updateActuator(pin - 8);**
** }**
** }**
** }**
** else checkScratchDisconnection();**
}
void reset() //with xbee module, we need to simulate the setup execution that occurs when a usb connection is opened or closed without this module
{
** for (int pos = 0; pos < 6; pos++) //stop all actuators**
** {**
** states[pos] = 0;**
** digitalWrite(pos + 8, LOW);**
** }**
** //reset servomotors**
** newInterruption = false;**
** updateServoMotors = false;**
** TCNT2 = TIMER2_PRELOAD;
__
//protocol handshaking**__
** sendSensorValues();**
** lastDataReceivedTime = millis();**
}
void updateActuator(int pinNumber)
{
** if (outputs[pinNumber] == 'd') digitalWrite(pinNumber + 8, states[pinNumber]);**
** else if (outputs[pinNumber] == 'a') analogWrite(pinNumber + 8, states[pinNumber]);**
}
void sendUpdateServomotors()
{
** for (int p = 0; p < 6; p++)**
** {**
** if (outputs[p] == 'c') servomotorC(p + 8, states[p]);**
** if (outputs[p] == 's') servomotorS(p + 8, states[p]);**
** }**
}
void servomotorC (int pinNumber, int dir)
{
** if (dir == 1) pulse(pinNumber, 1300); //clockwise rotation**
** else if (dir == 2) pulse(pinNumber, 1700); //anticlockwise rotation**
}
void servomotorS (int pinNumber, int angle)
{
** if (angle < 0) pulse(pinNumber, 600);**
** else if (angle > 180) pulse(pinNumber, 2400);**
__ else pulse(pinNumber, (angle * 10) + 600);__
}
void pulse (int pinNumber, int pulseWidth)
{
** initialPulseTime = micros();**
** digitalWrite(pinNumber, HIGH);**
** while (micros() < pulseWidth + initialPulseTime) {}**
** digitalWrite(pinNumber, LOW);**
}
void checkScratchDisconnection() //the reset is necessary when using an wireless arduino board (because we need to ensure that arduino isn't waiting the actuators state from Scratch) or when scratch isn't sending information (because is how serial port close is detected)
{
** if (millis() - lastDataReceivedTime > 1000) reset(); //reset state if actuators reception timeout = one second**
}
ISR(TIMER2_OVF_vect) //timer1 overflow interrupt vector handler
{ //timer2 => 8 bits counter => 256 clock ticks
** //preeescaler = 1024 => this routine is called 61 (16.000.000/256/1024) times per second approximately => interruption period = 1 / 16.000.000/256/1024 = 16,384 ms**
** //as we need a 20 ms interruption period but timer2 doesn't have a suitable preescaler for this, we program the timer with a 10 ms interruption period and we consider an interruption every 2 times this routine is called.**
** //to have a 10 ms interruption period, timer2 counter must overflow after 156 clock ticks => interruption period = 1 / 16.000.000/156/1024 = 9,984 ms => counter initial value (TCNT) = 100**
** if (newInterruption)**
** {**
** updateServoMotors = true;**
** }**
** newInterruption = !newInterruption;**
** TCNT2 = TIMER2_PRELOAD; //reset timer**
}

Beste wattijn.

Zoals je ziet, gaat dat niet goed.
Als je code plaatst, moet je dat tussen [code] [/code] tags zetten.
Anders gaat er van alles mis.
Zo heb jij ineens smilies in de code staan, die je in werkelijkheid niet hebt.
En je hebt ook niet halverwege ineens vette tekst in je code, maar wel ergens het voor ons deels onzichtbare "array [b]" staan.

In mijn eerdere bericht had ik dat ook vermeld, maar om een of andere reden is het belangrijkste stukkie in de laatste regel daar weggevallen.

de code die je laat zien hoort totaal niet bij het schema wat er ook staat.

het schema is van drie plantes (etages)
polsador betekent drukknop van een verdieping (het maakt natuurlijk niet uit als je hier 2 drukknoppen van maakt 1 voor in de lift en 1 voor op de verdieping.
final carrera betekent lift op verdieping.

en ja ik kan natuurlijk wel een lift programma geven maar daar wacht ik nog even mee tot je 71 bent.

probeer eerst eens met 2 drukknoppen de motor in 2 richtingen te sturen.
opdracht om met een potmeter de pwm te sturen zodat de snelheid te wijzigen is.

maak er dan 1 met 2 etages zoals ook in het filmpje,
dan 1 met 3 etages zoals jouw schema is.
moeilijkheid hier is de plaatsing van 1 of 2 microswitches om te stoppen.

en dan jawel 1 met 4 etages (elke volgende is een herhaling.

opdracht: zet op de middenverdieping 2 knoppen 1 voor omlaag en 1 voor omhoog, zodat de lift de verdieping overslaat als je naar beneden wilt terwijl de lift omhoog gaat.

Beste Mas3

Mag ik U eerst bedanken voor uw reactie
Ik heb intussen die sturing gemaakt met 2 drukknoppen en de potentiometer en dat werkt prima zelfs met de 2 Led's rood voor links- en groen voor rechtsdraaiende motor.
Ben blij dat ik eens een programmatje zal krijgen van een liftsturing (die wel werkt) je moet daarvoor niet wachten tot ik 71 j ben (Ha Ha )
NB ik heb die code juist gecopiëerd om eens te laten zien hoe ze er uit ziet maar in feite kan je alles zien op die URL " http://wikimanuals.edutictac.es/index.php?title=Es:Ascensor_de_3_plantes_amb_S4A " zoals de tekening, onder Programación kan je de link openen en dan zie je S4A16DT zip staan als je dat unzipt kom je op Firmware dan staat die code automatisch in Arduino programmawaar je de code ziet staan en Uploaden naar het moederbordje

Groetjes van Albert

Beste Albert.

Het is de bedoeling dat je het werk zelf doet.
Dus een code die je aan je bericht hebt toegevoegd downloaden en dan in de IDE bekijken, of gewoon in het code venstertje, das OK.
Maar wijzen naar een andere site van ga 'm daar maar halen, is wat minder.
En als die site in een taal is die de potentiële helper niet machtig is, dan is er al een grote kans dat men afhaakt.
En dat wil je natuurlijk niet, want je komt niet voor niets om hulp vragen.

Ik was overigens niet degene die het over volgend jaar had, dat was iemand anders (wilniet zeggen dat ik het oneens ben met wat ie bedoelde).

Het is, zoals de anderen al vertelden, veel slimmer om eerst eens een beetje met het programmeren kennis te maken.
Jantje heeft je daarom al op wat stappen gewezen.

Prima dat je inmiddels al wat werkend hebt.
Dat je de sturing simuleert met een aantal LEDs is ook prima, maar dan is het wel het beste als je het op dezelfde manier maakt als de driver werkt.
Dus als je driver werkt met 1 draad om de ene richting op te draaien, en een andere om de andere kant op te gaan (plus een gemeenschappelijk draad), dan kun je ook twee pinnen van je Arduino gebruiken en zo 2 LEDs aansturen.

Als er meer nodig is om straks de motor te laten draaien, dan is het een heel goed idee om dit op dezelfde wijze aan te sturen en de betreffende LED pas te laten oplichten als de motor ook zou gaan draaien.
Dat zeg ik zo omdat ik meen te weten dat je motor driver meer dan 1 draadje per draairichting nodig heeft.

Wat ik niet weet, is of je de LEDs op de motordriver hebt aangesloten (dat kun je gewoon doen, met een passende weerstand uiteraard).
Ik zie nu overigens dat die LEDs in je eerder verwezen "schema" zitten, ook na de motordriver.
Je kunt dan ook zien of de snelheidssturing ook een beetje werkt (indien van toepassing), omdat de LED bij een andere snelheid ook met een andere intensiteit zal oplichten.
Die intensiteit van de LED zegt overigens niet veel over de draaisnelheid van je motor straks, maar dat mag de pret niet drukken.

Oeps
Weer een foutje dit berichtje was eindelijk voor Shooter en niet voor Mas3 (had er niet op gelet)maar door dat iedereen het kan lezen maak dat eindelijk niet veel verschil hé
In ieder geval alle 2 bedankt

Groetjes Albert Wattijn

Kun je ook laten zien wat je nu hebt ?
Met je sketch in tags.
En heb je het "schema"nagebouwd ?

Hallo Mas3

In de starterkit van Arduino staan 12 programma's standaard één er van noemt "Zoetrope" en die heb ik dan aangepast met die Leds voor links en rechts
Zie Figuur

Mas3 wat bedoel je juist met je "sketch in tags"?
Groetjes Albert

[ code ] en [ /code ] en dan zonder die spaties ertussen

Welkom in de wereld van Arduino.

Het programma of de code die je in je Arduino wil zetten, word bij Arduino sketch genoemd.
Dat komt doordat Arduino is gemaakt met een scheef oog naar "processing", een soortgelijk idee voor PC programma's waar er ook met sketches word gewerkt.

Dus zet je code in tags, die zien er zo uit als je ze typt:[code] [/code].
Die code zet je in plaats van de spatie tussen de ] en de [.
Dan krijg je uiteindelijk dit te zien (bij de standaard minimale sketch):

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
  // Dit zullen geen smilies worden of onbedoelde dingen doen: B) :) [B] testtekst

}

Zoals je ziet kan iemand dan eenvoudig die code selecteren om te kopiëren naar de IDE, maar ook is de code dan fatsoenlijk leesbaar in het venstertje waarin het terecht komt.

Hey Mas3

[#include <Bridge.h>
#include <BridgeClient.h>
#include <BridgeServer.h>
#include <BridgeUdp.h>
#include <Console.h>
#include <FileIO.h>
#include <HttpClient.h>
#include <Mailbox.h>
#include <Process.h>
#include <YunClient.h>
#include <YunServer.h>

// NEW IN VERSION 1.4:
// Changed Serial.print() for Serial.write() in ScratchBoardSensorReport function to make it compatible with latest Arduino IDE (1.0)

// NEW IN VERSION 1.3:
// Now it works on GNU/Linux. Also tested with MacOS and Windows 7.
// timer2 set to 20ms, fixing a glitch that made this period unstable in previous versions.
// readSerialport() function optimized.
// pulse() modified so that it receives pulse width as a parameter instead using a global variable.
// updateServoMotors changes its name as a global variable had the same name.
// Some minor fixes.

// Thanks to Jorge Gomez for all these new fixes!

#define TIMER2_PRELOAD 100

char outputs[6];
int states[6];

unsigned long initialPulseTime;
unsigned long lastDataReceivedTime;

volatile boolean updateServoMotors;
volatile boolean newInterruption;

void setup()
{
Serial.begin(38400);
Serial.flush();
configurePins();
configureServomotors();
lastDataReceivedTime = millis();
}

void loop()
{
if (updateServoMotors)
{
sendUpdateServomotors();
sendSensorValues();
updateServoMotors = false;
}
else
{
readSerialPort();
}
}

void configurePins()
{
for (int index = 0; index < 6; index++)
{
states[index] = 0;
pinMode(index + 8, OUTPUT);
digitalWrite(index + 8, LOW); //reset pins
}

pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);

outputs[0] = 's'; //pin 8
outputs[1] = 'a'; //pin 9
outputs[2] = 'd'; //pin 10
outputs[3] = 'd'; //pin 11
outputs[4] = 'd'; //pin 12
outputs[5] = 'd'; //pin 13
}

void configureServomotors() //servomotors interruption configuration (interruption each 10 ms on timer2)
{
newInterruption = false;
updateServoMotors = false;

TCCR2A = 0;
TCCR2B = 1 << CS22 | 1 << CS21 | 1 << CS20;
TIMSK2 = 1 << TOIE2; //timer2 Overflow Interrupt
TCNT2 = TIMER2_PRELOAD; //start timer
}

void sendSensorValues()
{
int sensorValues[6], readings[5], sensorIndex;
for (sensorIndex = 0; sensorIndex < 6; sensorIndex++) //for analog sensors, calculate the median of 5 sensor readings in order to avoid variability and power surges
{
for (int p = 0; p < 5; p++)
readings[p] = analogRead(sensorIndex);
InsertionSort(readings, 5); //sort readings
sensorValues[sensorIndex] = readings[2]; //select median reading
}

//send analog sensor values
for (sensorIndex = 0; sensorIndex < 6; sensorIndex++)
ScratchBoardSensorReport(sensorIndex, sensorValues[sensorIndex]);

//send digital sensor values
ScratchBoardSensorReport(6, digitalRead(2) ? 1023 : 0);
ScratchBoardSensorReport(7, digitalRead(3) ? 1023 : 0);
ScratchBoardSensorReport(8, digitalRead(4) ? 1023 : 0);
ScratchBoardSensorReport(9, digitalRead(5) ? 1023 : 0);
ScratchBoardSensorReport(10, digitalRead(6) ? 1023 : 0);
ScratchBoardSensorReport(11, digitalRead(7) ? 1023 : 0);
}

void InsertionSort(int* array, int n)
{
for (int i = 1; i < n; i++)
for (int j = i; (j > 0) && ( array[j] < array[j - 1] ); j--)
swap( array, j, j - 1 );
}

void swap (int* array, int a, int b)
{
int temp = array[a];
array[a] = array**;**
__ array = temp;__
}
void ScratchBoardSensorReport(int sensor, int value) //PicoBoard protocol, 2 bytes per sensor
{
** Serial.write( B10000000**
** | ((sensor & B1111) << 3)**
** | ((value >> 7) & B111));**
** Serial.write( value & B1111111);**
}
void readSerialPort()
{
** int pin, inByte, sensorHighByte;**
** if (Serial.available() > 1)**
** {**
** lastDataReceivedTime = millis();**
** inByte = Serial.read();**
** if (inByte >= 128) // Are we receiving the word's header?**
** {**
** sensorHighByte = inByte;**
** pin = ((inByte >> 3) & 0x0F);**
** while (!Serial.available()); // Wait for the end of the word with data**
** inByte = Serial.read();**
** if (inByte <= 127) // This prevents Linux ttyACM driver to fail**
** {**
** states[pin - 8] = ((sensorHighByte & 0x07) << 7) | (inByte & 0x7F);**
** updateActuator(pin - 8);**
** }**
** }**
** }**
** else checkScratchDisconnection();**
}
void reset() //with xbee module, we need to simulate the setup execution that occurs when a usb connection is opened or closed without this module
{
** for (int pos = 0; pos < 6; pos++) //stop all actuators**
** {**
** states[pos] = 0;**
** digitalWrite(pos + 8, LOW);**
** }**
** //reset servomotors**
** newInterruption = false;**
** updateServoMotors = false;**
** TCNT2 = TIMER2_PRELOAD;
__
//protocol handshaking**__
** sendSensorValues();**
** lastDataReceivedTime = millis();**
}
void updateActuator(int pinNumber)
{
** if (outputs[pinNumber] == 'd') digitalWrite(pinNumber + 8, states[pinNumber]);**
** else if (outputs[pinNumber] == 'a') analogWrite(pinNumber + 8, states[pinNumber]);**
}
void sendUpdateServomotors()
{
** for (int p = 0; p < 6; p++)**
** {**
** if (outputs[p] == 'c') servomotorC(p + 8, states[p]);**
** if (outputs[p] == 's') servomotorS(p + 8, states[p]);**
** }**
}
void servomotorC (int pinNumber, int dir)
{
** if (dir == 1) pulse(pinNumber, 1300); //clockwise rotation**
** else if (dir == 2) pulse(pinNumber, 1700); //anticlockwise rotation**
}
void servomotorS (int pinNumber, int angle)
{
** if (angle < 0) pulse(pinNumber, 600);**
** else if (angle > 180) pulse(pinNumber, 2400);**
__ else pulse(pinNumber, (angle * 10) + 600);__
}
void pulse (int pinNumber, int pulseWidth)
{
** initialPulseTime = micros();**
** digitalWrite(pinNumber, HIGH);**
** while (micros() < pulseWidth + initialPulseTime) {}**
** digitalWrite(pinNumber, LOW);**
}
void checkScratchDisconnection() //the reset is necessary when using an wireless arduino board (because we need to ensure that arduino isn't waiting the actuators state from Scratch) or when scratch isn't sending information (because is how serial port close is detected)
{
** if (millis() - lastDataReceivedTime > 1000) reset(); //reset state if actuators reception timeout = one second**
}
ISR(TIMER2_OVF_vect) //timer1 overflow interrupt vector handler
{ //timer2 => 8 bits counter => 256 clock ticks
** //preeescaler = 1024 => this routine is called 61 (16.000.000/256/1024) times per second approximately => interruption period = 1 / 16.000.000/256/1024 = 16,384 ms**
** //as we need a 20 ms interruption period but timer2 doesn't have a suitable preescaler for this, we program the timer with a 10 ms interruption period and we consider an interruption every 2 times this routine is called.**
** //to have a 10 ms interruption period, timer2 counter must overflow after 156 clock ticks => interruption period = 1 / 16.000.000/156/1024 = 9,984 ms => counter initial value (TCNT) = 100**
** if (newInterruption)**
** {**
** updateServoMotors = true;**
** }**
** newInterruption = !newInterruption;**
** TCNT2 = TIMER2_PRELOAD; //reset timer**
}
Heb die code van de liftbesturing eens gedownload en geplaatst tussen de haakjes waar
**__ <strong>** stond maar daarnaast staat nog eens**</strong> __**
met een backslash moet er daar ook iets ingevuld worden ?
of mag dat daarna verwijderd worden
heb ik dit juist gedaan?
Alvast bedankt

Mas3
't Is raar hé je kopieert die code en alles is ok ,je plaatst die code en hup daar heb je die Smiley terug in de code

Ik zou nog eens de laatste 2 posts van de vorige pagina nog eens goed lezen.......

#include <Bridge.h>
#include <BridgeClient.h>
#include <BridgeServer.h>
#include <BridgeUdp.h>
#include <Console.h>
#include <FileIO.h>
#include <HttpClient.h>
#include <Mailbox.h>
#include <Process.h>
#include <YunClient.h>
#include <YunServer.h>

// NEW IN VERSION 1.4:
// Changed Serial.print() for Serial.write() in ScratchBoardSensorReport function to make it compatible with latest Arduino IDE (1.0)

// NEW IN VERSION 1.3:
// Now it works on GNU/Linux. Also tested with MacOS and Windows 7.
// timer2 set to 20ms, fixing a glitch that made this period unstable in previous versions.
// readSerialport() function optimized.
// pulse() modified so that it receives pulse width as a parameter instead using a global variable.
// updateServoMotors changes its name as a global variable had the same name.
// Some minor fixes.

// Thanks to Jorge Gomez for all these new fixes!

#define TIMER2_PRELOAD 100

char outputs[6];
int states[6];

unsigned long initialPulseTime;
unsigned long lastDataReceivedTime;

volatile boolean updateServoMotors;
volatile boolean newInterruption;

void setup()
{
  Serial.begin(38400);
  Serial.flush();
  configurePins();
  configureServomotors();
  lastDataReceivedTime = millis();
}

void loop()
{
  if (updateServoMotors)
  {
    sendUpdateServomotors();
    sendSensorValues();
    updateServoMotors = false;
  }
  else
  {
    readSerialPort();
  }
}

void configurePins()
{
  for (int index = 0; index < 6; index++)
  {
    states[index] = 0;
    pinMode(index + 8, OUTPUT);
    digitalWrite(index + 8, LOW); //reset pins
  }

  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);

  outputs[0] = 's'; //pin 8
  outputs[1] = 'a'; //pin 9
  outputs[2] = 'd'; //pin 10
  outputs[3] = 'd'; //pin 11
  outputs[4] = 'd'; //pin 12
  outputs[5] = 'd'; //pin 13
}

void configureServomotors() //servomotors interruption configuration (interruption each 10 ms on timer2)
{
  newInterruption = false;
  updateServoMotors = false;

  TCCR2A = 0;
  TCCR2B = 1 << CS22 | 1 << CS21 | 1 << CS20;
  TIMSK2 = 1 << TOIE2; //timer2 Overflow Interrupt
  TCNT2 = TIMER2_PRELOAD; //start timer
}

void sendSensorValues()
{
  int sensorValues[6], readings[5], sensorIndex;
  for (sensorIndex = 0; sensorIndex < 6; sensorIndex++) //for analog sensors, calculate the median of 5 sensor readings in order to avoid variability and power surges
  {
    for (int p = 0; p < 5; p++)
      readings[p] = analogRead(sensorIndex);
    InsertionSort(readings, 5); //sort readings
    sensorValues[sensorIndex] = readings[2]; //select median reading
  }

  //send analog sensor values
  for (sensorIndex = 0; sensorIndex < 6; sensorIndex++)
    ScratchBoardSensorReport(sensorIndex, sensorValues[sensorIndex]);

  //send digital sensor values
  ScratchBoardSensorReport(6, digitalRead(2) ? 1023 : 0);
  ScratchBoardSensorReport(7, digitalRead(3) ? 1023 : 0);
  ScratchBoardSensorReport(8, digitalRead(4) ? 1023 : 0);
  ScratchBoardSensorReport(9, digitalRead(5) ? 1023 : 0);
  ScratchBoardSensorReport(10, digitalRead(6) ? 1023 : 0);
  ScratchBoardSensorReport(11, digitalRead(7) ? 1023 : 0);
}

void InsertionSort(int* array, int n)
{
  for (int i = 1; i < n; i++)
    for (int j = i; (j > 0) && ( array[j] < array[j - 1] ); j--)
      swap( array, j, j - 1 );
}

void swap (int* array, int a, int b)
{
  int temp = array[a];
  array[a] = array[b];
  array[b] = temp;
}

void ScratchBoardSensorReport(int sensor, int value) //PicoBoard protocol, 2 bytes per sensor
{
  Serial.write( B10000000
                | ((sensor & B1111) << 3)
                | ((value >> 7) & B111));
  Serial.write( value & B1111111);
}

void readSerialPort()
{
  int pin, inByte, sensorHighByte;

  if (Serial.available() > 1)
  {
    lastDataReceivedTime = millis();
    inByte = Serial.read();

    if (inByte >= 128) // Are we receiving the word's header?
    {
      sensorHighByte = inByte;
      pin = ((inByte >> 3) & 0x0F);
      while (!Serial.available()); // Wait for the end of the word with data
      inByte = Serial.read();
      if (inByte <= 127) // This prevents Linux ttyACM driver to fail
      {
        states[pin - 8] = ((sensorHighByte & 0x07) << 7) | (inByte & 0x7F);
        updateActuator(pin - 8);
      }
    }
  }
  else checkScratchDisconnection();
}

void reset() //with xbee module, we need to simulate the setup execution that occurs when a usb connection is opened or closed without this module
{
  for (int pos = 0; pos < 6; pos++)  //stop all actuators
  {
    states[pos] = 0;
    digitalWrite(pos + 8, LOW);
  }

  //reset servomotors
  newInterruption = false;
  updateServoMotors = false;
  TCNT2 = TIMER2_PRELOAD;

  //protocol handshaking
  sendSensorValues();
  lastDataReceivedTime = millis();
}

void updateActuator(int pinNumber)
{
  if (outputs[pinNumber] == 'd')  digitalWrite(pinNumber + 8, states[pinNumber]);
  else if (outputs[pinNumber] == 'a')  analogWrite(pinNumber + 8, states[pinNumber]);
}

void sendUpdateServomotors()
{
  for (int p = 0; p < 6; p++)
  {
    if (outputs[p] == 'c') servomotorC(p + 8, states[p]);
    if (outputs[p] == 's') servomotorS(p + 8, states[p]);
  }
}

void servomotorC (int pinNumber, int dir)
{
  if (dir == 1) pulse(pinNumber, 1300); //clockwise rotation
  else if (dir == 2) pulse(pinNumber, 1700); //anticlockwise rotation
}

void servomotorS (int pinNumber, int angle)
{
  if (angle < 0) pulse(pinNumber, 600);
  else if (angle > 180) pulse(pinNumber, 2400);
  else pulse(pinNumber, (angle * 10) + 600);
}

void pulse (int pinNumber, int pulseWidth)
{
  initialPulseTime = micros();
  digitalWrite(pinNumber, HIGH);

  while (micros() < pulseWidth + initialPulseTime) {}
  digitalWrite(pinNumber, LOW);
}

void checkScratchDisconnection() //the reset is necessary when using an wireless arduino board (because we need to ensure that arduino isn't waiting the actuators state from Scratch) or when scratch isn't sending information (because is how serial port close is detected)
{
  if (millis() - lastDataReceivedTime > 1000) reset(); //reset state if actuators reception timeout = one second
}

ISR(TIMER2_OVF_vect) //timer1 overflow interrupt vector handler
{ //timer2 => 8 bits counter => 256 clock ticks
  //preeescaler = 1024 => this routine is called 61 (16.000.000/256/1024) times per second approximately => interruption period =  1 / 16.000.000/256/1024 = 16,384 ms
  //as we need a 20 ms interruption period but timer2 doesn't have a suitable preescaler for this, we program the timer with a 10 ms interruption period and we consider an interruption every 2 times this routine is called.
  //to have a 10 ms interruption period, timer2 counter must overflow after 156 clock ticks => interruption period = 1 / 16.000.000/156/1024 = 9,984 ms => counter initial value (TCNT) = 100
  if (newInterruption)
  {
    updateServoMotors = true;
  }
  newInterruption = !newInterruption;
  TCNT2 = TIMER2_PRELOAD;  //reset timer
}

Chapeau :grin: