Hallo
Heb nog een vraagje over de arduino waar ik niet uitkom
werk nog niet zolang met arduino
Als ik mijn code upload werkt de serieel monitor perfect
(ter controle serial.print achter de failsave gezet)deze werkt perfect
Nu heb ik ook een code voor de hc06 bleuthoot
Als ik deze apart upload werk het prima ook de serieel monitor
zet ik de code echter in het programma doet de serieel monitor niets meer ook niet als ik het rc signaal aanzet en hij dus "ok" zou moeten printen
Gehele code
#define PI 3.141
#include <Servo.h>
//servo
const int servo1 = 32; // Pin for the first servo
int servoVal;
Servo myservo1; // create servo object to control a servo
int val;
int ready = 0;
//l298n -------------
// Motor A
int enA =2;
int in1 = 52;
int in2 = 50;
// Motor B
int enB = 3;
int in3 = 51;
int in4 = 53;
//Motor Speed Values - Start at zero
int MotorSpeed1 = 0;
int MotorSpeed2 = 0;
//rc kanalen---------
double channel[2];
const int pwmPIN[]={4,5,6,7,8,11,12,13}; // an array to identify the PWM input pins (the array can be any length)
int RC_inputs = 0;
int i;
int buttonState =0;
int lastbuttonState = 0;
int x = 0;
void setup(){
myservo1.attach(servo1); // attaches the servo
for(i=22;i<30;i++)
{
pinMode(i, OUTPUT);//relay pins
digitalWrite(i, HIGH);
}
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Start with motors disabled and direction forward
// Motor A
digitalWrite(enA, LOW);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Motor B
digitalWrite(enB, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
Serial.begin(9600);
Serial.setTimeout(10); //ensures the the arduino does not read serial for too long
ready = 0;
}
void loop() {
channel[0]=pulseIn(7, HIGH,50000);//ch2 ln298 rechter joystick x as
channel[1]=pulseIn(8, HIGH,50000);//ch4 ln298 rechter joystick y as
channel[3]=pulseIn(6, HIGH,50000);//ch8 ln298
channel[4]=pulseIn(4, HIGH,50000);//ch 14 relais1 en relais 2
channel[5]=pulseIn(5, HIGH,50000);
// failsave voor als het rc signaal wegvalt stopt het script
//failsave
int sIn = 4;
unsigned long dur;
unsigned long failsafeVal = 1900;
int debounce = 1; //seconds//amount of time to regain rc signal from the time its lost
unsigned long lastDisconnection = 0;
unsigned long previousMillis = 0;
int RCstatus = 0;
int prevStatus = 0;
unsigned long currentMillis = millis();
dur = pulseIn(sIn, HIGH, 500000);
//falls to acceptable range
if (dur >= 950 && dur <= 2000)
{
//check if it regains signal
if (prevStatus == 2 && (currentMillis - lastDisconnection) < (debounce * 1000))
dur = failsafeVal;
Serial.println("ok");
//y as biede motoren syncroon voor achteruit x as alleen linker of rechter moter met roerservo-----------
if (channel[3] >1500){
if (channel[0] < 1400)
{
// Set Motor A backward
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// Set Motor B backward
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
MotorSpeed1 = map(channel[0], 1400, 1020, 0, 255);
MotorSpeed2 = map(channel[0], 1400,1020, 0,255);
}
else if (channel[0] > 1500)
{
// This is Forward
// Set Motor A forward
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set Motor B forward
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
//Determine Motor Speeds
MotorSpeed1 = map(channel[0],1480, 1930, 0, 255);
MotorSpeed2 = map(channel[0],1480, 1930, 0, 255);
}
else
{
// This is Stopped
MotorSpeed1 = 0;
MotorSpeed2 = 0;
}
// Now do the steering
if (channel[1] < 1400)
{
// Move Left
i = map(channel[1], 1400, 1020, 0, 255);
MotorSpeed1 = MotorSpeed1 - i;
MotorSpeed2 = MotorSpeed2 + i;
if (MotorSpeed1 < 0)MotorSpeed1 = 0;
if (MotorSpeed2 > 255)MotorSpeed2 = 255;
}
else if (channel[1] > 1550)
{
// Move Right
i= map(channel[1], 1508, 1930, 0, 255);
MotorSpeed1 = MotorSpeed1 + i;
MotorSpeed2 = MotorSpeed2 -i;
// Don't exceed range of 0-255 for motor speeds
if (MotorSpeed1 < 0)MotorSpeed1 = 0;
if (MotorSpeed2 > 255)MotorSpeed2 = 255;
}
}
//alleen syncroon draaien met roerservo -------yas motoren x as roerservo---------------
if ( channel[3]>1400 && channel[3]<1600){
if (channel[0] < 1400)
{
// Set Motor A backward
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// Set Motor B backward
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
MotorSpeed1 = map(channel[0], 1400, 1010, 0, 255);
MotorSpeed2 = map(channel[0], 1400,1010, 0,255);
}
else if (channel[0] > 1500)
{
// This is Forward
// Set Motor A forward
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set Motor B forward
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
//Determine Motor Speeds
MotorSpeed1 = map(channel[0],1500, 1930, 0, 255);
MotorSpeed2 = map(channel[0],1500, 1930, 0, 255);
}
else
{
// This is Stopped
MotorSpeed1 = 0;
MotorSpeed2 = 0;
}
}
if ( channel[3]<1400){
if (channel[1]>1500){
//Motor A achteruit
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// Set Motor B vooruit
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
MotorSpeed1 = map(channel[1],1500, 1930, 0, 255);
MotorSpeed2 = map(channel[1],1500, 1930, 0, 255);
}
else if ( channel[3]<1400){
if ( channel[1]<1500){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set Motor B backward
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
MotorSpeed1 = map(channel[1], 1400, 1020, 0, 255);
MotorSpeed2 = map(channel[1], 1400,1020, 0,255);
}
}else {
// This is Stopped
MotorSpeed1 = 0;
MotorSpeed2 = 0;
}
}
if (MotorSpeed1 < 30)MotorSpeed1 = 0; // Adjust to prevent "buzzing" at very low speed
if (MotorSpeed2 < 30)MotorSpeed2 = 0;
analogWrite(enA, MotorSpeed1); // Set the motor speeds
analogWrite(enB, MotorSpeed2);
// servo roer
// servo roer
if (channel[1]>1490){//sturen bij syncroon draaien
servoVal= map(channel[1], 1485, 1915,90,0); // sturen met beide motoren knop middenstand
}else if (channel[1]<1450){
servoVal= map(channel[1], 1480,1020, 90, 180);
}else if (channel[1]>1400 && channel[1]<1550){
servoVal = 90;
}
myservo1.write(servoVal);
delay(5);
//void myISR() {
//relay module
// rc ontvanger----------------
if(channel[4]>1600 ){
buttonState =digitalRead (22);
if (buttonState ==HIGH){
digitalWrite (22, LOW);
Serial.print (channel[4]);
} else if(channel[4]>1600 ){
digitalWrite (22, HIGH);
}
delay(300);
}
if(channel[4]<1200 && channel[4]>800 ){
buttonState =digitalRead (23);
if (buttonState ==HIGH){
digitalWrite (23, LOW);
} else if(channel[4]<1200 && channel[4]>800){
digitalWrite (23, HIGH);
}
delay(300);
}
if (channel[5] >1600){
digitalWrite (24, LOW);
}
else if(channel[5]<1200)
{
digitalWrite(25,LOW);
}
else
{
digitalWrite (24, HIGH);
digitalWrite (25,HIGH);
}
}else if (Serial.available()){ //else van de failsave
ready = 1;
val = Serial.parseInt();
Serial.println(val);
if(Serial.read() == '\n'){
Serial.flush();
//send completion of the command
Serial.print('d');
}
}
}Code enkel voor bluethooth
#define PI 3.141
int i;
int ready = 0;
int val;
void setup()
{
Serial.begin(9600);
Serial.setTimeout(10); //ensures the the arduino does not read serial for too long
ready = 0;
}
//primary arduino loop
void loop()
{
if (Serial.available()){
ready = 1;
val = Serial.parseInt();
Serial.println(val);
if(Serial.read() == '\n'){ // if the last byte is 'd' then stop reading and execute command 'd' stands for 'done'
Serial.flush(); //clear all other commands piled in the buffer
//send completion of the command
Serial.print('d');
}
}
Weet niet wat ik fout doe
Wie kan helpen??
Tja, indentatie en positie van de haakjes is nogal slordig.
Dat maakt het voor mij volkomen onleesbaar, en dat is dan weer lastig zoeken.
benleentje
Golden Member
Je omschrijving van het probleem is me niet duidelijk.
zet ik de code echter in het programma doet de serieel monitor niets
Welke code zet je in welk programma. Graag beter info omtrent het probleem wanneer dat nu precies optreed.
Je het blijkbaar 2 stukjes hardware een arduino en een HC06 hoe heb je die aangesloten en hoe heb je deze 2 op de seriële monitor aangesloten.
Je kan per seriële monitor maar 1 stuk hardware bekijken wil je er 2 dan moet je seriële monitor 2x openen. Of in je seriële monitor programma 2 aparte vensters openen. Hangt er maar vanaf welk programma je daarvoor gebruikt.
[Bericht gewijzigd door benleentje op (11%)]
Sorry ben er een tijd tussen uit geweest maar ga nu weer verder.
Heb de code inmiddels beetje veranderd en alles werkt tot nu toe prima.
Echter als ik een kanaal van mijn receiver wil toevoegen werkt deze niet en stopt de serieel monitor er ook mee heb een H bridge met 2motoren een servo en een 8kanaals relais module deze werken allemaal zowel met RC als via de telefoon met Bluetooth
Daar ik een carson 14kanaals zender /ontvanger heb en nu maar 5kanalen heb aangesloten gaat alles goed declareer. Ik echter channel[6]=pulseIn(10,HIGH,50000);
Werkt deze nietook de serieel monitor geeft niets meer aan voor de rest blijft alles wel werken
Wat doe ik verkeerd wie weet raad??
Roches
Domoticz en ESP8266, goede combo!!!
Sorry moet het ook zijn fout in bericht gezet staat wel goed in programma zal het even wijzigen
[Bericht gewijzigd door Rienvanveen op (13%)]
Heb inmiddels de oplossing gevonden
zat in "double channel[2]"en ik gebruik
meer channel daardoor deed de serieel monitor niets meer
Heb inmiddels de oplossing gevonden
zat in "double channel[2]"en ik gebruik
5 channel daardoor deed de serieel monitor niets meer